MSSQLSERVER_9017
Si applica a: SQL Server
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 9017 |
Origine evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbolico | LOG_MANY_VLFS |
Testo del messaggio | Il database %ls contiene più di %d file di log virtuali che sono eccessivi. Troppi file di log virtuali possono causare tempi di avvio e backup lunghi. Prendere in considerazione la compattazione del log e l'uso di un incremento di crescita diverso per ridurre il numero di file di log virtuali. |
Spiegazione
Durante l'avvio di un database, SQL Server rileva che un database ha un numero elevato di file di log virtuali e registra questo messaggio di errore. Le situazioni in cui è possibile riscontrare l'errore sono:
- Quando si avvia un'istanza di SQL Server
- Ripristinare un database
- Collegare un database
Il messaggio informativo 9017 simile a questo esempio viene registrato nel log degli errori di 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.
Inoltre, se si usano tecnologie Replication, Database Mirroring o AlwaysOn nell'ambiente in uso, è possibile notare problemi di prestazioni con queste tecnologie.
L'effetto di molte funzioni VLF nella replica
Troppi file di log possono influire sulla replica perché il processo di lettura log deve analizzare ogni file di log virtuale per le transazioni contrassegnate per la replica. È possibile visualizzare questo comportamento tracciando le prestazioni della stored procedure sp_replcmds. Il processo di lettura log usa la stored procedure sp_replcmds per analizzare i file di log virtuali e leggere le transazioni contrassegnate per la replica.
Causa
Questo problema si verifica quando si specificano valori di piccole dimensioni per il parametro FILEGROWTH per i file di log delle transazioni.
SQL Server motore di database divide internamente ogni file di log fisico in diversi file di log virtuali . SQL Server 2008 R2 Service Pack 2 ha introdotto un nuovo messaggio (9017) registrato all'avvio di un database (a causa dell'avvio di un'istanza di SQL Server o a causa del collegamento o del ripristino del database) e ha più di 1.000 VLF in SQL Server 2008 R2 o ha più di 10.000 VLFS in SQL Server 2012 e versioni successive.
Nota
In SQL Server 2012, anche se questo messaggio viene registrato quando il database ha 10.000 VLF, il messaggio effettivo segnalato nel log degli errori indica erroneamente "1000 VLF". L'avviso si verifica dopo 10.000 VVL. Tuttavia, il messaggio segnala 1.000 VVL. Questo problema è stato risolto nelle versioni successive.
Azione utente
Per risolvere il problema, seguire questa procedura:
È possibile visualizzare il numero di VLF e le dimensioni medie in SQL Server usando questa query. Il risultato consentirà di identificare i database su cui concentrarsi:
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
Per altre informazioni, vedere sys.dm_db_log_info.
Ridurre il log delle transazioni usando DBCC SHRINKDB/DBCC SHRINKFILE o SQL Server Management Studio.
Eseguire un aumento una tantum delle dimensioni del file di log delle transazioni a un valore elevato. Questo aumento una tantum viene fatto per evitare frequenti aumenti automatici. Per altre informazioni, vedere Gestire le dimensioni del file di log delle transazioni.
Aumentare il parametro FILEGROWTH a un valore maggiore rispetto a quello attualmente configurato. Questa operazione deve essere basata sull'attività del database e sulla frequenza di crescita del file di log.
È anche possibile esaminare gli articoli di correzione seguenti, a seconda della versione di SQL Server attualmente in esecuzione:
Suggerimento
Per determinare la distribuzione dei file di log virtuali ottimale per le dimensioni correnti del log delle transazioni di tutti i database in un'istanza specifica e gli incrementi della crescita necessari per ottenere le dimensioni richieste, vedere questo script.