Compilación vs Compromiso rápido Compromiso de limpieza en la base de datos Oracle

12

Me preguntaba si alguien podría verificar mi comprensión con respecto a las diferencias entre esos 3 términos relacionados con las bases de datos Oracle.

Muchas fuentes confunden estos términos y no los explican en detalle, por lo que fue un poco difícil encontrar información.

Por lo que sé:

  1. El commit y el commit rápido son exactamente lo mismo, todos los commits son commits rápidos.
  2. Una confirmación rápida esencialmente solo actualiza el indicador en la tabla de transacciones del encabezado del segmento deshacer / deshacer para indicar que la transacción se ha confirmado. Sin embargo, el bloque real no se revisa, lo que significa que la dirección de byte de deshacer (UBA) en la lista de transacciones interesadas (ITL) que se encuentra en el encabezado del bloque de datos todavía apunta a la tabla de transacciones del segmento de deshacer correspondiente. Además, los bytes de bloqueo de las filas correspondientes no se liberan y el recuento de bloqueo en el ITL no se modifica (las filas siguen bloqueadas).
  3. En una limpieza de confirmación, el bloque se vuelve a visitar y el ITL se actualiza con el SCN de confirmación. Sin embargo, el recuento de bloqueos en el ITL y el byte de bloqueo almacenado con cada fila todavía no se actualiza (la fila sigue bloqueada al igual que en la confirmación rápida), esto no genera rehacer aunque se cambie el bloque.
  4. Los bloques que se confirmaron normalmente (== confirmación rápida) se someterán a una limpieza de bloque retrasada la próxima vez que se toquen (y generarán rehacer).
  5. Los bloques que se sometieron a la limpieza de confirmación se someterán a la limpieza del bloque de registro retrasado la próxima vez que se toquen (y generarán rehacer).

¡Ojalá alguien pueda verificar estos puntos! ¡Gracias!

BYS2
fuente

Respuestas:

6

Tienes lo básico correcto. Solo hay un tipo de confirmación (no normal , rápido ...).

de los conceptos doc :

Cuando se confirma una transacción, se producen las siguientes acciones:

  • Se genera un número de cambio del sistema (SCN) para el COMMIT.

    La tabla de transacciones internas para los espacios de tablas de deshacer asociados que la transacción ha confirmado. El SCN único correspondiente de la transacción se asigna y registra en la tabla de transacciones. Consulte "Nivel de aislamiento serializable".

  • El proceso de escritura del registro (LGWR) escribe las entradas restantes del registro de rehacer en las memorias intermedias de registro de rehacer en el registro de rehacer en línea y escribe el SCN de la transacción en el registro de rehacer en línea. Este evento atómico constituye el compromiso de la transacción.

  • Oracle Database libera bloqueos en filas y tablas.

    Los usuarios que se pusieron en cola esperando en las cerraduras retenidas por la transacción no comprometida pueden continuar con su trabajo.

  • La base de datos Oracle elimina los puntos de guardado.

  • Oracle Database realiza una limpieza de confirmación.

    Si los bloques modificados que contienen datos de la transacción confirmada todavía están en el SGA, y si ninguna otra sesión los modifica, la base de datos elimina la información de la transacción relacionada con el bloqueo de los bloques. Idealmente, el COMMIT limpia los bloques para que un SELECT posterior no tenga que realizar esta tarea.

Por lo tanto, la limpieza (completa con rehacer) se realizará durante la confirmación si los bloques aún están en el SGA.

En los sistemas activos, es común que los bloques con transacciones no confirmadas se escriban en el disco y se vacíen del SGA. En este caso, el bloque se deja como está y la siguiente consulta que toca el bloque realizará una limpieza de bloque retrasada (su punto 5 no sucede en todos los casos).

Vincent Malgrat
fuente