Puntos de comprobación y la parte activa del registro

Los puntos de comprobación vacían las páginas de datos desfasadas en la caché del búfer de la base de datos actual en el disco. De este modo, se minimiza la parte activa del registro que se debe procesar durante una recuperación completa de una base de datos. Durante una recuperación completa, se llevan a cabo los siguientes tipos de acciones:

  • Se ponen al día los registros de modificaciones que no se vaciaron en el disco antes de detenerse el sistema.

  • Se revierten todas las modificaciones asociadas a transacciones incompletas, como las transacciones para las que no hay entradas COMMIT o ROLLBACK en el registro.

Funcionamiento de los puntos de comprobación

Un punto de comprobación realiza los procesos siguientes en la base de datos:

  • Escribe en el archivo de registro una entrada que marca el inicio del punto de comprobación.

  • Guarda información registrada para el punto de comprobación en una cadena de entradas de registro de puntos de comprobación.

    Una parte de la información registrada en el punto de comprobación es el número de secuencia de registro (LSN) de la primera entrada del registro que debe estar presente para una reversión correcta de toda la base de datos. Este LSN se denomina LSN de recuperación mínimo (MinLSN). El MinLSN es el mínimo de:

    • El LSN del inicio del punto de comprobación

    • El LSN del inicio de la transacción activa más antigua

    • El LSN del inicio de la transacción de replicación más antigua que aún no se ha entregado a la base de datos de distribución

    Los registros del punto de comprobación también contienen una lista de las transacciones activas que han modificado la base de datos.

  • Si la base de datos utiliza el modelo de recuperación simple, marca para su reutilización el espacio que se encuentra antes del MinLSN.

  • Escribe en el disco todas las páginas de datos y de registro desfasadas.

  • Escribe en el archivo de registro un registro que marca el final del punto de comprobación.

  • Escribe el LSN del inicio de esta cadena en la página de inicio de la base de datos.

Actividades que provocan un punto de comprobación

Los puntos de comprobación pueden darse en las situaciones siguientes:

  • Se ejecuta explícitamente una instrucción CHECKPOINT. Se produce un punto de comprobación en la base de datos actual para la conexión.

  • Se realiza una operación registrada al mínimo en la base de datos; por ejemplo, se realiza una operación de copia masiva en una base de datos que utiliza el modelo de recuperación optimizado para cargas masivas de registros.

  • Se han agregado o eliminado archivos de base de datos mediante ALTER DATABASE.

  • Se detiene una instancia de SQL Server mediante una instrucción SHUTDOWN o deteniendo el servicio SQL Server (MSSQLSERVER). Las dos acciones insertan un punto de comprobación en cada base de datos de la instancia de SQL Server.

  • Una instancia de SQL Server genera periódicamente puntos de comprobación de manera automática en cada base de datos para reducir el tiempo que tardará la instancia en recuperar la base de datos.

  • Se realiza una copia de seguridad de la base de datos.

  • Se realiza una actividad que requiere cerrar la base de datos. Por ejemplo, el valor de AUTO_CLOSE es ON y se ha cerrado la última conexión de usuario a la base de datos, o bien se realiza una modificación de una opción de la base de datos que requiere reiniciarla.

Puntos de comprobación automáticos

El SQL Server Database Engine (Motor de base de datos de SQL Server) genera puntos de comprobación automáticos. El intervalo entre puntos de comprobación automáticos se basa en el espacio del registro utilizado y en el tiempo transcurrido desde el último punto de comprobación. El intervalo de tiempo entre los puntos de comprobación automáticos puede ser muy variable y largo si se realizan pocas modificaciones en la base de datos. Los puntos de comprobación automáticos también se pueden producir con frecuencia si se modifican muchos datos.

El intervalo entre puntos de comprobación automáticos para todas las bases de datos de una instancia de servidor se calcula a partir de la opción de configuración del servidor recovery interval. Esta opción especifica el máximo de tiempo que el Database Engine (Motor de base de datos) debe utilizar para recuperar una base de datos al reiniciar el sistema. El Database Engine (Motor de base de datos) calcula cuántas entradas de registro puede procesar en el intervalo de recuperación durante una operación de recuperación.

El intervalo entre los puntos de comprobación automáticos depende también del modelo de recuperación:

  • Si la base de datos utiliza el modelo de recuperación completa o el modelo de recuperación optimizado para cargas masivas de registros, se generará un punto de comprobación automático cuando el número de entradas del registro alcance el número que Database Engine (Motor de base de datos) estima que puede procesar durante el tiempo especificado en la opción recovery interval.

  • Si la base de datos utiliza el modelo de recuperación simple, se generará un punto de comprobación automático cuando el número de registros alcance el menor de estos dos valores:

    • El registro está ocupado en un 70 por ciento.

    • El número de entradas de registro alcanza el número que el Database Engine (Motor de base de datos) calcula que puede procesar en el periodo especificado en la opción recovery interval.

Para obtener más información acerca del establecimiento del intervalo de recuperación, vea Cómo establecer el intervalo de recuperación (SQL Server Management Studio).

Los puntos de comprobación automáticos truncan la parte no utilizada del registro de transacciones si la base de datos utiliza el modelo de recuperación simple. No obstante, el registro no se trunca mediante puntos de comprobación automáticos si la base de datos utiliza el modelo de recuperación completa o el modelo optimizado para cargas masivas de registros. Para obtener más información, vea Truncación del registro de transacciones.

Ahora la instrucción CHECKPOINT ofrece un argumento checkpoint_duration opcional que especifica en segundos el tiempo necesario para que finalicen los puntos de comprobación. Para obtener más información, vea CHECKPOINT (Transact-SQL).

Registro activo

La parte del archivo de registro desde el MinLSN hasta el último registro escrito se denomina parte activa del registro o registro activo. Ésta es la parte del registro necesaria para una recuperación completa de la base de datos. No se puede truncar ninguna parte del registro activo. Los truncamientos del registro se deben realizar en las partes del registro anteriores al MinLSN.

En la ilustración siguiente se muestra una versión simplificada del final de un registro de transacciones con dos transacciones activas. Los registros de punto de comprobación se han compactado en un solo registro.

final de un registro de transacciones con transacciones activas

LSN 148 es la última entrada del registro de transacciones. En el momento en que se procesó el registro del punto de comprobación en LSN 147, Tran 1 se había confirmado y Tran 2 era la única transacción activa. Esto hace que la primera entrada del registro para Tran 2 sea la entrada de transacción activa más antigua del registro en el momento del último punto de comprobación. Esto convierte al registro de inicio del registro de transacciones para Tran 2, LSN 142, en el MinLSN.

Transacciones de ejecución prolongada

El registro activo debe incluir cada una de las partes de todas las transacciones no confirmadas. Una aplicación que inicia una transacción y no la confirma o la revierte impide que el Database Engine (Motor de base de datos) avance hacia el valor de MinLSN. Esto puede causar dos tipos de problemas:

  • Si se cierra el sistema después de que la transacción haya realizado un gran número de modificaciones no confirmadas, la fase de recuperación del siguiente reinicio puede durar bastante más que el tiempo especificado en la opción recovery interval.

  • Puede que el tamaño del registro aumente de forma considerable, porque no se puede truncar pasado el MinLSN. Esto ocurre incluso si la base de datos utiliza el modelo de recuperación simple, donde el registro de transacciones se suele truncar en cada punto de comprobación automático.

Transacciones de replicación

El Agente de registro del LOG supervisa el registro de transacciones de cada base de datos configurada para la replicación transaccional y copia las transacciones marcadas para la replicación desde el registro de transacciones a la base de datos de distribución. El registro activo debe contener todas las transacciones marcadas para la replicación, pero que aún no se han entregado a la base de datos de distribución. Si estas transacciones no se replican puntualmente, pueden evitar el truncamiento del registro. Para obtener más información, vea Cómo funciona la replicación transaccional.