Puntos de comprobación de base de datos (SQL Server)

Se aplica a:SQL ServerAzure SQL Database

Un punto de control crea un punto conocido correcto desde el que el Motor de base de datos de SQL Server puede empezar a aplicar los cambios incluidos en el registro durante la recuperación después de un cierre o un bloqueo insperado del sistema.

Información general

Por motivos de rendimiento, el Motor de base de datos realiza modificaciones en las páginas de la base de datos en memoria, en la memoria caché de búfer, y no escribe estas páginas en el disco después de cada cambio. En su lugar, el Motor de base de datos emite periódicamente un punto de control en cada base de datos. Un punto de control escribe las páginas modificadas en memoria actuales (denominadas páginas desfasadas) y la información del registro de transacciones de la memoria en el disco y, además, registra la información en el registro de transacciones.

El Motor de base de datos admite varios tipos de puntos de control: automáticos, indirectos, manuales e internos. En la tabla siguiente se resumen los tipos de puntos de control.

Nombre Interfaz de Transact-SQL Descripción
Automático EXEC sp_configure "intervalo de recuperación", "segundos" Se emite automáticamente en segundo plano para cumplir el límite de tiempo superior que sugiere la opción de configuración de servidor recovery interval . Los puntos de comprobación automáticos se ejecutan hasta completarse. Los puntos de control automáticos están limitados según el número de operaciones de escritura pendientes y en función de si el Motor de base de datos detecta un aumento de la latencia de escritura superior a 50 milisegundos.

Para más información, consulte Configure la opción de configuración del servidor del intervalo de recuperación.
Indirecto ALTER DATABASE ... SET TARGET_RECOVERY_TIME = target_recovery_time { SEGUNDOS | MINUTOS } Se ejecutan en segundo plano para alcanzar el tiempo de recuperación objetivo especificado por el usuario para una base de datos determinada. A partir de SQL Server 2016 (13.x), el valor predeterminado es 1 minuto. El valor predeterminado es 0 para versiones antiguas, que indica que la base de datos utilizará puntos de comprobación automáticos, cuya frecuencia depende del valor de intervalo de recuperación de la instancia de servidor.

Para obtener más información, vea Cambiar el tiempo de recuperación de destino de una base de datos (SQL Server).
Manual PUNTO DE CONTROL [ checkpoint_duration ] Se emite cuando se ejecuta un comando CHECKPOINT de Transact-SQL. El punto de control manual se realiza en la base de datos actual de su conexión. De forma predeterminada, los puntos de comprobación manuales se ejecutan hasta completarse. La limitación de velocidad funciona igual que con los puntos de control automáticos. Opcionalmente, el parámetro checkpoint_duration especifica un periodo de tiempo solicitado, en segundos, para que se complete el punto de comprobación.

Para más información, consulte CHECKPOINT (Transact-SQL).
Interno Ninguno La emiten diversas operaciones del servidor, como la copia de seguridad y la creación de instantáneas de bases de datos, para garantizar que las imágenes de disco se correspondan con el estado actual del registro.

La opción de configuración avanzada -k de SQL Server permite a un administrador de bases de datos regular el comportamiento de E/S de los puntos de control en función del rendimiento del subsistema de E/S para algunos tipos de puntos de control. La opción de configuración -k se aplica a los puntos de control automáticos y a cualquier otro punto de control manual e interno sin limitación.

Para los puntos de comprobación automáticos, manuales e internos, durante la recuperación de la base de datos solo deben rehacerse las modificaciones efectuadas después del último punto de comprobación. De este modo se reduce el tiempo necesario para recuperar una base de datos.

Importante

Las transacciones no confirmadas de larga ejecución aumentan el tiempo de recuperación para todos los tipos de puntos de comprobación.

Interacción de las opciones TARGET_RECOVERY_TIME y "recovery interval"

En la tabla siguiente se resume la interacción entre la configuración de sp_configure 'recovery interval' que afecta a todo el servidor y la configuración ALTER DATABASE ... TARGET_RECOVERY_TIME específica de la base de datos.

TIEMPO_OBJETIVO_DE_RECUPERACIÓN intervalo de recuperación Tipo de punto de control usado
0 0 Puntos de control automáticos cuyo intervalo objetivo de recuperación es de 1 minuto.
0 > 0 Los puntos de comprobación automáticos cuyo intervalo de recuperación de destino lo especifica la configuración definida por el usuario de la opción sp_configure 'recovery interval'.
> 0 No aplicable Puntos de comprobación indirectos cuyo tiempo de recuperación de destino lo determina la configuración TARGET_RECOVERY_TIME, expresado en segundos.

Puntos de comprobación automáticos

Un punto de control automático se produce cada vez que el número de entradas de registro alcanza el número que el Motor de base de datos calcula que puede procesar durante el tiempo especificado en la opción de configuración del servidor recovery interval. Para más información, consulte Configure la opción de configuración del servidor del intervalo de recuperación.

En cada base de datos sin un tiempo de recuperación de destino definido por el usuario, el Motor de base de datos genera puntos de control automáticos. La frecuencia de los puntos de comprobación automáticos depende de la opción avanzada de configuración del servidor intervalo de recuperación, que especifica el tiempo máximo que una determinada instancia del servidor debe tardar en recuperar una base de datos durante un reinicio del sistema. El Motor de base de datos calcula el número máximo de entradas de registro que puede procesar durante el intervalo de recuperación. Cuando una base de datos que usa puntos de control automáticos alcanza el número máximo de entradas de registro, el Motor de base de datos emite un punto de control en la base de datos.

El intervalo de tiempo entre puntos de comprobación puede ser muy variable. Una base de datos con una carga de trabajo de transacciones considerable tendrá más puntos de comprobación frecuentes que otra que se usa principalmente para operaciones de solo lectura. Según el modelo de recuperación simple, un punto de comprobación automático también se pone en cola si el registro se llena al 70 %.

Según el modelo de recuperación simple, a menos que algún factor retrase el truncamiento del registro, un punto de comprobación automático trunca la sección no usada del registro de transacciones. Por el contrario, con los modelos de recuperación completa y de registro masivo, una vez que se ha establecido una cadena de copias de seguridad del registro, los puntos de control automáticos no provocan el truncamiento del registro de transacciones. Para más información, consulte El registro de transacciones (SQL Server).

Después de un fallo del sistema, el tiempo necesario para recuperar una base de datos determinada depende en gran medida de la cantidad de E/S aleatoria necesaria para rehacer las páginas que estaban sucias en el momento del fallo. Esto significa que la configuración recovery interval no es confiable. No puede determinar una duración de recuperación precisa. Además, cuando se está llevando a cabo un punto de control automático, la actividad general de E/S de datos aumenta significativamente y de forma impredecible.

Efecto del intervalo de recuperación en el rendimiento de recuperación

En un sistema de procesamiento de transacciones en línea (OLTP) con transacciones cortas, la opción recovery interval es el factor principal que determina la duración de la recuperación. Pero la opción recovery interval no afecta al tiempo necesario para deshacer una transacción de larga duración. La recuperación de una base de datos con una transacción de ejecución prolongada puede tardar mucho más que lo especificado en el valor de intervalo de recuperación.

Por ejemplo, si una transacción de ejecución prolongada tardó dos horas en realizar actualizaciones antes de que se deshabilitara el servidor, la recuperación real tarda un tiempo considerablemente superior al valor de recovery interval para recuperar la transacción de ejecución prolongada. Para obtener más información sobre la repercusión de una transacción de larga duración en el tiempo de recuperación, vea El registro de transacciones (SQL Server). Para más información sobre el proceso de recuperación, vea Información general sobre restauración y recuperación (SQL Server).

Normalmente, los valores predeterminados proporcionan un rendimiento de recuperación óptimo. No obstante, el cambio del intervalo de recuperación podría mejorar el rendimiento en las siguientes circunstancias:

  • Si la recuperación suele tardar mucho más de 1 minuto cuando no se están revirtiendo transacciones de larga duración.

  • Si observa que los puntos de comprobación frecuentes afectan negativamente al rendimiento de una base de datos.

Si decide aumentar la configuración recovery interval , es recomendable que lo haga gradualmente en pequeños incrementos y evaluando el efecto de cada aumento incremental en el rendimiento de recuperación. Este planteamiento es importante ya que a medida que aumenta la configuración recovery interval , se multiplica el tiempo que tarda en completarse la recuperación de la base de datos. Por ejemplo, si cambia intervalo de recuperación a 10 minutos, la recuperación tarda aproximadamente 10 veces más en completarse que cuando intervalo de recuperación se establece en 1 minuto.

Puntos de comprobación indirectos

Los puntos de control indirectos, presentados en SQL Server 2012 (11.x), proporcionan una alternativa de nivel de base de datos configurable a los puntos de control automáticos. Esto se puede configurar mediante la especificación de la opción de configuración de la base de datos Tiempo de recuperación de destino. Para obtener más información, vea Cambiar el tiempo de recuperación de destino de una base de datos (SQL Server). Si se produce un bloqueo del sistema, los puntos de comprobación indirectos proporcionan un tiempo de recuperación más rápido y predecible que los puntos de comprobación automáticos.

Los puntos de comprobación indirectos proporcionan las siguientes ventajas:

  • Los puntos de comprobación indirectos garantizan que el número de páginas desfasadas se encuentra por debajo de un umbral determinado para que la recuperación de la base de datos finalice en el tiempo de recuperación de destino.

    La opción de configuración intervalo de recuperación usa el número de transacciones para determinar el tiempo de recuperación, a diferencia de los puntos de comprobación indirectos, que usan el número de páginas desfasadas. Cuando se habilitan los puntos de comprobación indirectos en una base de datos que recibe un gran número de operaciones DML, el proceso de escritura en segundo plano puede comenzar a vaciar de forma agresiva los búferes sucios en disco para garantizar que el tiempo necesario para realizar la recuperación no supere el tiempo objetivo de recuperación establecido para la base de datos. Esto puede provocar actividad de E/S adicional en determinados sistemas, lo que puede contribuir a un cuello de botella de rendimiento si el subsistema del disco está funcionando por encima del umbral de E/S o cerca de él.

  • Los puntos de comprobación indirectos permiten controlar de forma fiable el tiempo de recuperación de la base de datos teniendo en cuenta el coste de las E/S aleatorias durante REDO. Eso permite que una instancia de servidor permanezca dentro de un límite superior en los tiempos de recuperación de una determinada base de datos (excepto cuando una transacción de ejecución prolongada provoca tiempos de UNDO excesivos).

  • Los puntos de comprobación indirectos reducen los picos de E/S relacionados con los puntos de comprobación al escribir continuamente las páginas desfasadas en disco en segundo plano.

Pero una carga de trabajo transaccional en línea en una base de datos que esté configurada para puntos de comprobación indirectos puede experimentar un deterioro del rendimiento. Esto se debe a que el proceso de escritura en segundo plano que utiliza el punto de comprobación indirecto a veces aumenta la carga total de escritura en una instancia de servidor.

Importante

El punto de control indirecto es el comportamiento predeterminado para nuevas bases de datos creadas en SQL Server 2016 (13.x), incluidas las bases de datos model y tempdb.

Las bases de datos que se actualizan in situ o se restauraron a partir de una versión anterior de SQL Server usarán el comportamiento de punto de control automático anterior, a menos que explícitamente se modifique para usar el punto de control indirecto.

Escalabilidad mejorada de puntos de control indirectos

En versiones anteriores a SQL Server 2019 (15.x), es posible que experimente errores de programador sin cesión si hay una base de datos que genera un gran número de páginas sucias, como tempdb. SQL Server 2019 (15.x) presenta una mejor escalabilidad para los puntos de control indirectos, lo que debería evitar estos errores en las bases de datos con una gran carga de trabajo UPDATE/INSERT.

Puntos de comprobación internos

Hay distintos componentes del servidor que generan puntos de comprobación internos para garantizar que las imágenes de disco coinciden con el estado actual del registro. Los puntos de control internos se generan en respuesta a los siguientes eventos:

  • Los archivos de base de datos se han agregado o quitado mediante ALTER DATABASE.

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

  • Se crea una instantánea de base de datos, tanto explícita como internamente para DBCC CHECKDB.

  • 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.

  • Se detiene una instancia de SQL Server deteniendo el servicio SQL Server (MSSQLSERVER). Esta acción inserta un punto de control en cada base de datos de la instancia de SQL Server.

  • Poner sin conexión una instancia de clúster de conmutación por error (FCI) de SQL Server.

Pasos siguientes

Consulte también