Apunte de Logging (Bases de Datos)

De Cuba-Wiki
Saltar a: navegación, buscar
Back.png Volver a la página de la materia

Algoritmos[editar]

Hay tres algoritmos para recuperación ante fallas que conllevan distintas estrategias de logging: Undo, Redo y Undo/Redo; en sus variantes con o sin checkpoints, quiescentes o no quiescentes.

Undo[editar]

  • Los registros de update se escriben en disco antes que el valor en la tabla.
  • Los registros de commit se escriben en disco despues de haber escrito en disco todas las modificaciones.

Checkpoint quiescente

  • Se dejan de aceptar nuevas transacciones.
  • Se espera a que finalicen las actuales, y se escribe y flushea un CKPT en el log.

Checkpoint no quiescente:

  • Se escribe y flushea un Start CKPT con la lista de transacciones activas a ese momento.
  • Se escribe y flushea un End CKPT una vez que todas ellas terminaron.

Recuperación[editar]

  • Se consideran solamente las unfinished transactions.
  • Se deshacen las operaciones de la última a la primera.
  • Se agregan y flushean ABORTs para las unfinished transactions.

Checkpoint quiescente

  • El log se recorre de abajo hacia arriba hasta encontrar un registro CKPT.

Checkpoint no quiescente

  • Si se encuentra un End CKPT, entonces basta revisar el log hasta el Start CKPT correspondiente, ya que todas las activas al momento del start estan finalizadas.
  • Si no se encuentra un End CKPT sino un Start CKPT, se debe seguir hasta cubrir todos los Start Transaction de las transacciones listadas en el Start CKPT, puesto que eran las activas a ese momento.

Redo[editar]

  • Los registros de update se escriben en disco antes que el valor en la tabla.
  • Los registros de commit se escriben en disco antes de haber escrito en disco todas las modificaciones.

Checkpoint no quiescente:

  • Se escribe y flushea un Start CKPT con la lista de transacciones activas a ese momento.
  • Una vez que las transacciones ya commiteadas bajaron todas sus modificaciones a disco, se marca el End CKPT y flushea el log (notar que la condicion no tiene nada que ver con las activas).

Recuperación[editar]

  • Se consideran solamente las committed transactions.
  • Se rehacen las operaciones de la primera a la última.
  • Se agregan y flushean ABORTs para las unfinished transactions.

Checkpoint no quiescente

  • Si se encuentra un End CKPT, significa que todas las transacciones previas al Start correspondiente ya bajaron sus datos a disco. Entonces se deben rehacer todas las acciones de las transacciones activas al momento del Start y de las que comenzaron luego del Start. Notar que puede que sea necesario ir más atrás del Start CKPT hasta el Start Transaction más viejo.
  • Si no se encuentra un End CKPT sino un Start CKPT, entonces se lo omite y se busca el End CKPT anterior y se aplica el algoritmo anterior.


Undo/Redo[editar]

  • Los registros de update se escriben en disco antes que el valor en la tabla.
  • No hay condicion sobre los registros de commit.

Checkpoint no quiescente:

  • Se escribe y flushea un Start CKPT con la lista de transacciones activas a ese momento.
  • Una vez que todas las modificaciones realizadas antes del Start CKPT bajen a sisco, se marca el End CKPT y flushea el log (notar que la condicion no tiene nada que ver con las activas, ni pide que las transacciones sean las committeadas como en el caso de redo).

Recuperación[editar]

  • Se consideran las committed y unfinished transactions.
  • Se deshacen las operaciones de las unfinished de la ultima a la primera.
  • Se rehacen las operaciones de las committed de la primera a la última.
  • Se agregan y flushean ABORTs para las unfinished transactions.

Checkpoint no quiescente

  • Las transacciones a deshacer no se encuentran afectadas por el checkpointing, solamente la parte del algoritmo de redo.
  • Si se encuentra un End CKPT, significa que todas las modificaciones realizadas previas al Start CKPT ya bajaron a disco, entonces alcanza con rehacer todas las modificaciones iniciadas luego del Start.
  • Si no, se vuelve al Start que tenga un End CKPT al igual que en el caso de redo.