Blogia
tecnolakis

INSERT con APPEND

Insert Normal

En un Insert Normal, el Insert se realiza registro a registro.

Para cada registro, los pasos principales son:

  • La BBDD busca un bloque con espacio libre para dar cabida al nuevo registro.
    • Esta búsqueda puede ser en el current block, las freelists o bien los bitmap dependiendo del tipo de tablespace.
    • Si no hay bloques con espacio suficiente, se coje un bloque nuevo.
  • Se genera la información  de ROLLBACK y de REDOLOG para el insert
  • Se formatea el bloque con el nuevo registro y se le añade el lock correspondiente al regsitro.
  • Si hay índices, por cada uno de los índices:
    • Se busca el bloque donde hay el índice.
    • Si no hay espacio suficiente, se hace un split del bloque
    • Se genera información de ROLLBACK y REDOLOG
    • Se formatea el bloque con el nuevo registro.

Como ventajas podemos indicar:

  • Se rellenan los bloques que pudiera haber medio vacios.
  • Cada uno de los registros se inserta en el índice correspondiente.
  • Una misma transacción puede realizar Insert en varais tablas.

Como inconvenientes, podemos indicar:

  • Se realiza un tratamiento registro a registro y, al terminar el proceso de un registro, los bloques implicados tienen los valores definitivos.
  • El ROLLBACK es lento debido a que se debe hacer ROLBACK de cada uno de los registros insertados.
  • Se genera mucha informaciónde ROLLBACK y, por consiguiente, de REDOLOG

Insert Append

El insert append es un tipo especial de insert qeu tiene especial interés si se desean insertar muchos registros en una tabla vacía o bien que la relación de registros a insertar sea muy superior al numero de registros que hay en la tabla.

El Insert Append se puede realizar de dos formas:

  • Mediante un INsert con el hist de append:
    • INSERT /*+ APPEND */ INTO...
  • Utilizando SQL*Loader e indicando la opción de APPEND

El algoritmo que sigue Oracle con un Insert APPEND es:

  • Obtiene un lock exclusivo sobre la tabla
    • Como consecuencia, solo puede haber 1 sesión accediendo a la tabla.
  • Va cojiendo bloques por encima del High Water Mark (Véase aquí) y los va llemando con los registros a insertar.
    • Cuando ha llenado totalmente un bloque, sigue con el siguiente bloque y modifica el HWM.
  • Si la tabla tiene índices, por cada índice:
    • Ordena los registros nuevos
    • Crea un nuevo B-Tree mediante un MERGE del anterior índice y los nevos registros.
    • El B-tree del índice original no se libera hasta que se realiza el COMMIT.

Como ventajas podemos indicar:

  • Es mucho más rápido que el insert normal.
  • No genera tanto REDOLOG ya que no se genera información de ROLLBACK.
  • El ROLLBACK es muy rápido: basta con restablecer el HWM al valor inicial y liberar los nuevos árboles B-Tree de los índices.

Como inconvenientes:

  • En una transacción solo puede haber un INSERT APPEND.
  • Los bloques medio llenos no se rellenan: la tabla siempre crece.
  • Si la tabla tiene varios índices, la recreación de todos los índices puede durar mucho tiempo.

0 comentarios