Escribir páginas
La E/S de una instancia de Motor de base de datos incluye escrituras lógicas y físicas. Se produce una escritura lógica cuando se modifican los datos en una página de la caché del búfer. Una escritura física se produce cuando la página se escribe de la caché del búfer al disco.
Cuando se modifica una página en la caché del búfer, no se vuelve a escribir inmediatamente en el disco; en lugar de ello, la página se marca como desfasada. Significa que una página puede tener más de una escritura lógica antes de que se escriba físicamente en el disco. Para cada escritura lógica, se inserta una entrada del registro de transacciones en la caché del registro que registra la modificación. Las entradas del registro deben escribirse en el disco antes de que la página desfasada asociada se elimine de la caché del búfer y se escriba en el disco. SQL Server utiliza una técnica conocida como registro de escritura anticipada que evita escribir una página desfasada antes de que la entrada de registro asociada se escriba en el disco. Esto es fundamental para el funcionamiento correcto del administrador de recuperaciones. Para obtener más información, vea Registro de transacciones de escritura anticipada.
La siguiente ilustración muestra el proceso de escritura de una página de datos modificada.
Cuando el administrador del búfer escribe una página, busca páginas desfasadas adyacentes que puedan incluirse en una sola operación de escritura y recopilación. Las páginas adyacentes tienen Id. de página consecutivos y son del mismo archivo; las páginas no tienen que ser contiguas en la memoria. La búsqueda continúa hacia delante y hacia atrás hasta que se produce uno de los siguientes eventos:
Se encuentra una página limpia.
Se encuentran 32 páginas.
Se encuentra una página desfasada cuyo número de secuencia de registro (LSN) aún no se ha vaciado en el registro.
Se encuentra una página a la que no se le puede establecer un bloqueo temporal inmediatamente.
De este modo, todo el conjunto de páginas se puede escribir en el disco con una sola operación de escritura y recopilación.
Justo antes de que se escriba una página, la forma de protección de página especificada en la base de datos se agrega a la página. Si se agrega protección de página rasgada, debe establecerse un bloqueo temporal EX (exclusivo) para la E/S en la página. Esto se debe a que la protección de página rasgada modifica la página y hace que no se apropiada para su lectura por parte de ningún otro subproceso. Si se agrega protección de suma de comprobación de página o la base de datos no usa protección de página, se establece un bloqueo temporal UP (actualización) para la E/S en la página. Este bloqueo temporal evita que nadie modifique la página durante la escritura, pero permite a los lectores usarla. Para obtener más información acerca de las opciones de protección de página de E/S de disco, vea Administración de búfer.
Una página desfasada se escribe en el disco de una de estas tres maneras.
Escritura diferida
La escritura diferida es un proceso del sistema que mantiene tres búferes disponibles quitando las páginas usadas con poca frecuencia de la caché del búfer. Las páginas desfasadas se escriben en primer lugar en el disco.
Escritura ///diligente///
El proceso de escritura ///diligente/// escribe páginas diferidas de datos asociadas a operaciones sin registro, como BULK INSERT y SELECT INTO. Este proceso permite que la creación y escritura de nuevas páginas tenga lugar en paralelo. Es decir, la operación de llamada no tiene que esperar hasta que termine toda la operación antes de escribir las páginas en el disco.
Punto de comprobación
El proceso de punto de comprobación examina periódicamente la caché del búfer en busca de búferes con páginas de una base de datos especificada y escribe todas las páginas desfasadas en el disco. Los puntos de comprobación permiten ahorrar tiempo en una recuperación posterior al crear un punto en el que se garantiza que todas las páginas desfasadas se hayan escrito en el disco. El usuario puede solicitar una operación de punto de comprobación mediante el comando CHECKPOINT o Motor de base de datos puede generar puntos de comprobación automáticos que se basen en la cantidad de espacio de registro utilizado y el tiempo transcurrido desde el último punto de comprobación. Además, se genera un punto de comprobación cuando se producen determinadas actividades. Por ejemplo, cuando se agrega o quita un archivo de datos o de registro de una base de datos, o cuando se detiene la instancia de SQL Server. Para obtener más información, vea Puntos de comprobación y la parte activa del registro.
Los procesos de escritura diferida, escritura ///diligente/// y punto de comprobación no esperan a que se complete la operación de E/S. Siempre usan la operación de E/S asincrónica (o superpuesta) y continúan con otros trabajos; posteriormente, comprueban que la operación de E/S sea correcta. De este modo, SQL Server maximiza los recursos de la CPU y de E/S para las tareas apropiadas.