Compartir vía


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
  • Restauración de 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:

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

  2. Reduzca el registro de transacciones mediante DBCC SHRINKDB/DBCC SHRINKFILE o mediante SQL Server Management Studio.

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

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

  5. 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:

    CORRECCIÓN: Se tarda mucho tiempo en restaurar una base de datos en SQL Server 2008 R2, SQL Server 2008 o SQL Server 2012

    CORRECCIÓN: Rendimiento lento al recuperar una base de datos si hay muchos VFS dentro del registro de transacciones en SQL Server 2005, SQL Server 2008 o SQL Server 2008 R2

    CORRECCIÓN: La recuperación tarda más de lo esperado para una base de datos en un entorno de SQL Server 2008 o SQL Server 2008 R2

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.