Cuando reiniciamos el sistema, no sabemos hasta donde tenemos que retroceder en el archivo de log. Aunque muchas transacciones antiguas ya commiteadas seguramente tendrán sus datos guardados ya en disco.
Para evitar este retroceso hasta el inicio del sistema y el crecimiento ilimitado de los archivos de log se utilizan puntos de control.
Un punto de control, ocheckpoint, es un registro especial en el archivo de log que indica que todos los ítems modificados hasta ese punto han sido almacenados en disco.
La presencia de un checkpoint en el log implica que todas las transacciones cuyo registro de commit aparece con anterioridad tienen todos sus ítems guardados de forma persistente, y, por lo tanto, ya no deberán ser deshechas ni rehechas.
Checkpoints Inactivos vs. Activos
Los checkpoints inactivos (quiescent checkpoints) tienen un único tipo de registro: .
La creación de un checkpoint inactivo en el log implica la suspensión momentánea de todas las transacciones para hacer el volcado de todos los buffers en memoria a disco.
Para aminorar la perdida de tiempo de ejecución en el volcado a disco, puede utilizarse una técnica conocida como checkpoining activo (non-quiescent o fuzzy checkpointing). Esta utiliza dos tipos de registros de checkpoint: ) y , en donde es un listado de todas las transacciones que se encuentran activas.
Algoritmo UNDO
Checkpointing Inactivo
En este algoritmo, el procedimiento con un checkpointing inactivo se realiza de la siguiente manera:
- Dejar de aceptar nuevas transacciones.
- Esperar a que todas las transacciones hagan su commit.
- Escribir en el log y volcarlo a disco.
Durante la recuperación solo debemos deshacer las transacciones que no hayan hecho commit, hasta el momento en que encontremos un registro . De hecho, todo el archivo de log anterior podría ser eliminado.
Checkpointing Activo
El procedimiento de un checkpointing activo se realiza de la siguiente manera:
- Escribir un registro con el listado de todas las transacciones activas hasta el momento
- Esperar a que todas esas transacciones activas hagan su commit (sin dejar por eso de recibir nuevas transacciones)
- Escribir en el log y volcarlo a disco.
En la recuperación, se dan dos situaciones:
- Si encontramos primero un registro , solo debemos retroceder hasta el durante el rollback, porque ninguna transacción incompleta puede haber comenzado antes.
- Si encontramos primero un registro , implica que el sistema cayó sin asegurar los commits del listado de transacciones. Deberemos volver hacia atrás, pero solo hasta el inicio de la más antigua del listado.
Algoritmo REDO
En este algoritmo, el procedimiento con un checkpointing activo se realiza de la siguiente manera:
- Escribir un registro con el listado de todas las transacciones activas hasta el momento, y volcar el log a disco.
- Hacer el volcado a disco de todos los ítems que hayan sido modificados por transacciones que ya commitearon.
- Escribir en el log y volcarlo a disco.
En la recuperación, deberemos retroceder hasta el de la transacción más antigua del listado que figure en el .
Si encontramos primero un registro , entonces no nos sirve, y debemos buscar un checkpoint anterior en el log.
Algoritmo REDO
En este algoritmo, el procedimiento con un checkpointing activo se realiza de la siguiente manera:
- Escribir un registro con el listado de todas las transacciones activas hasta el momento, y volcar el log a disco.
- Hacer el volcado a disco de todos los ítems que hayan sido modificados antes del
- Escribir en el log y volcarlo a disco.
En la recuperación, debemos retroceder hasta el inicio de la transacción más antigua en el listado del listado, para deshacerla en caso de que no haya commiteado, o para rehacer sus operaciones posteriores al en caso de que haya commiteado.
Si encontramos primero un registro , entonces no nos sirve, y debemos buscar un checkpoint anterior en el log.