MSSQLSERVER_9017
Se aplica a: SQL Server
Detalles
Attribute | Valor |
---|---|
Nombre del producto | SQL Server |
Id. de evento | 9017 |
Origen de eventos | MSSQLSERVER |
Componente | SQLEngine |
Nombre simbólico | LOG_MANY_VLFS |
Texto del mensaje | La base de datos %ls tiene más de %d archivos de registro virtual que son excesivos. Demasiados archivos de registro virtual pueden provocar tiempos de inicio y copia de seguridad largos. Considere la posibilidad de reducir el registro y usar un incremento de crecimiento diferente para reducir el número de archivos de registro virtual. |
Explicación
Durante el inicio de una base de datos, SQL Server detecta que una base de datos tiene un gran número de archivos de registro virtual (VLFs) y registra este mensaje de error. Las situaciones en las que se puede encontrar el error son:
- Al iniciar una instancia de SQL Server
- Restaurar una base de datos
- Adjuntar una base de datos
El mensaje informativo 9017 similar a este ejemplo se registra en el registro de errores de SQL Server:
Database dbName has more than n virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files. Too many virtual log files can adversely affect the recovery time of the database.
Además, si usa tecnologías de replicación, creación de reflejo de la base de datos o AlwaysOn en su entorno, puede observar problemas de rendimiento con estas tecnologías.
El efecto de muchos VFS en la replicación
Demasiados archivos de registro pueden afectar a la replicación porque el proceso de registro debe examinar cada archivo de registro virtual para las transacciones marcadas para la replicación. Puede ver este comportamiento mediante el seguimiento del rendimiento del procedimiento almacenado sp_replcmds. El proceso de registro de registro usa el procedimiento almacenado sp_replcmds para examinar los archivos de registro virtual y leer las transacciones marcadas para la replicación.
Causa
Este problema se produce cuando se especifican valores pequeños para el parámetro FILEGROWTH para los archivos de registro de transacciones.
SQL Server Motor de base de datos divide internamente cada archivo de registro físico en varios archivos de registro virtual (VLFs). SQL Server 2008 R2 Service Pack 2 introdujo un nuevo mensaje (9017) que se registra cuando se inicia una base de datos (ya sea debido al inicio de una instancia de SQL Server o debido a la asociación o restauración de la base de datos) y tiene más de 10 000 VLFs en SQL Server 2008 R2 o tiene más de 10 000 VLFS en SQL Server 2012 y versiones posteriores.
Nota:
En SQL Server 2012, aunque este mensaje se registra cuando la base de datos tiene 10 000 VLFs, el mensaje real que se notifica en el registro de errores indica incorrectamente "1000 VLF". La advertencia se produce después de 10 000 VLFs. Sin embargo, el mensaje informa de 1000 VLFs. Este problema se corrige en versiones posteriores.
Acción del usuario
Para solucionar este problema, siga estos pasos:
Puede ver el recuento de VLF y el tamaño medio en SQL Server mediante esta consulta. El resultado le ayudará a identificar las bases de datos en las que centrarse:
SELECT db.name, count(dbl.database_id) as Total_VLF_count, convert(decimal (10,2), avg(dbl.vlf_size_mb)) as Avg_VLF_Size_MB FROM sys.databases db CROSS APPLY sys.dm_db_log_info(db.database_id) dbl GROUP BY db.name ORDER BY Total_VLF_count DESC
Para obtener más información, consulte sys.dm_db_log_info.
Reduzca el registro de transacciones mediante DBCC SHRINKDB/DBCC SHRINKFILE o mediante SQL Server Management Studio.
Realice un aumento único del tamaño del archivo de registro de transacciones a un valor grande. Este aumento único se realiza para evitar crecimientos automáticos frecuentes. Para obtener más información, consulte Administración del tamaño del archivo de registro de transacciones.
Aumente el parámetro FILEGROWTH a un valor mayor que el que está configurado actualmente. Esto debe basarse en la actividad de la base de datos y la frecuencia con la que crece el archivo de registro.
Además, puede revisar los siguientes artículos de corrección, en función de la versión de SQL Server que esté ejecutando actualmente:
Sugerencia
Para determinar la distribución óptima de VLF para el tamaño de registro de transacciones actual de todas las bases de datos en una instancia determinada, así como los incrementos de tamaño necesarios para conseguir el tamaño requerido, consulte este script.