¿Qué importancia tienen los VLF de registro de transacciones para el rendimiento?

12

¿Qué tan importantes son los VLF cuando se considera el rendimiento de la base de datos? ¿Qué describiría una situación óptima para los VLF?

the_good_pony
fuente
Para leer más, vea mi pregunta en dba.stackexchange.com/questions/25408/…
Max Vernon
Genial: puedo ver que esto es útil para informar sobre el rendimiento
the_good_pony
1
@DBAWaffle Consulte: Experimentos con VLF de SQL Server, Parte 1 de Glenn Berry -> sqlskills.com/blogs/glenn/…
Kin Shah

Respuestas:

17

¿Qué es un archivo de registro virtual?

SQL Server divide el archivo de registro de transacciones para cada base de datos en fragmentos más pequeños, llamados 'archivos de registro virtuales' (o VLF para abreviar). Su función principal es como marcadores de truncamiento en una copia de seguridad de registro, es decir, el Servidor SQL solo borrará (y marcará disponible para reutilizar) los VLF que están completamente vacíos. MSDN tiene una pieza en el Registro de transacciones - Arquitectura física .

¿Qué determina el número de VLF?

Cada vez que crece un archivo de registro (ya sea mediante crecimiento automático o crecimiento manual), la nueva sección del archivo de registro se divide en una serie de VLF, basándose únicamente en el tamaño de la nueva sección (el registro de transacciones existente se deja solo). Por lo tanto, una configuración pequeña de crecimiento automático (es decir, el crecimiento automático del 10% que es el predeterminado) hará que se cree una gran cantidad de VLF.

¿Cuáles son las implicaciones de una gran cantidad de VLF?

El problema principal que causa una gran cantidad de VLF son:

  • Recuperación lenta (la recuperación es una fase durante la restauración de la base de datos donde las transacciones completadas se escriben en las páginas de datos y las transacciones incompletas se revierten).
  • Lento rendimiento del lector de registro en una configuración de reflejo de la base de datos.
  • Rendimiento lento durante la creación de instantáneas de la base de datos (tenga en cuenta que esto también incluye ciertas funciones, DBCCya que utilizan instantáneas de la base de datos en segundo plano para facilitar las comprobaciones de coherencia sin bloqueo).

¿Cómo puedo saber cuántos VLF tiene mi base de datos?

DBCC LOGINFOdevolverá 1 fila por cada VLF en el registro de transacciones de su base de datos. Esta pregunta tiene un par de scripts útiles para aplicar eso en todas las bases de datos en un servidor.

¿Cuántos VLF son demasiados?

Esa es una decisión que tendrás que hacer por ti mismo. Mi regla general es que no vale la pena jugar con menos de 50 años, y más de 100 (más o menos) y reparo la configuración de crecimiento automático y hago una nota mental para (en la siguiente ventana de mantenimiento) reducir y volver a crecer el registro (como se muestra a continuación) .

¡Ayuda! Tengo once mil millones de VLF y la recuperación de mi base de datos lleva todo el día.

Breve resumen ( del blog de Kimberly Tripp ):

  • Asegúrate de ser la única conexión activa en la base de datos (así que hazlo durante una ventana de mantenimiento)
  • Copia de seguridad del registro de transacciones en el disco (usando BACKUP LOG)
  • Ejecute DBCC SHRINKFILEcon TRUNCATEONLYpara reducir el archivo de registro al tamaño más pequeño posible.
  • Ejecute ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizepara cambiar el tamaño de su registro de transacciones en un solo paso **.

** Nota: si tiene un archivo de registro muy grande (decenas de GB o más), es posible que desee cambiar el tamaño en varios pasos para obtener un número apropiado de VLF con un tamaño adecuado para evitar copias de seguridad de registro excesivamente 'gruesas'. Como los VLF son la unidad de truncamiento, también determinan los tamaños de las copias de seguridad del registro, como se detalla en el blog de Kim .

Simon Righarts
fuente
Gracias, ¿cree que múltiples VLF obstaculizarían más obviamente el rendimiento en un entorno OLTP alto donde los datos se cambian regularmente, una gran cantidad de confirmaciones por realizar?
the_good_pony
Un gran número de VLF solo es realmente notable en las situaciones que describí anteriormente (recuperación, instantáneas, duplicación). Pueden obstaculizar un poco el rendimiento en un entorno OLTP, pero solo marginalmente.
Simon Righarts
1
Para mí, la recuperación de más de 20 horas fue lo que me convenció de la importancia de mantener un recuento bajo (menos de 1,000) de VLF.
Max Vernon
@SimonRigharts Tengo curiosidad. ¿Una gran cantidad de VLF impacta el rendimiento de las transacciones regulares? ¿O solo afecta las copias de seguridad y las restauraciones?
Chris Aldrich
@ChrisAldrich Puede haber un pequeño nivel de sobrecarga en una transacción si abarca un límite VLF (pero si es que no he oído hablar de él), pero como se detalla en la pregunta, la única vez que realmente notará el impacto de una gran cantidad de VLF se realiza durante la recuperación, la duplicación o las instantáneas.
Simon Righarts