MSSQLSERVER_9017
S’applique à : SQL Server
Détails
Attribut | Valeur |
---|---|
Nom du produit | SQL Server |
ID de l’événement | 9017 |
Source de l’événement | MSSQLSERVER |
Composant | SQLEngine |
Nom symbolique | LOG_MANY_VLFS |
Texte du message | La base de données %ls comporte plus de %d fichiers journaux virtuels qui sont excessifs. Trop de fichiers journaux virtuels peuvent entraîner des temps de démarrage et de sauvegarde longs. Envisagez de réduire le journal et d’utiliser un incrément de croissance différent pour réduire le nombre de fichiers journaux virtuels. |
Explication
Au démarrage d’une base de données, SQL Server détecte qu’une base de données a un grand nombre de fichiers journaux virtuels (VLF) et enregistre ce message d’erreur. Les situations où vous pouvez rencontrer l’erreur sont les suivantes :
- Quand vous démarrez une instance de SQL Server
- Restaurer une base de données
- Attacher une base de données
Le message d’information 9017 similaire à cet exemple est enregistré dans le journal des erreurs 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.
En outre, si vous utilisez des technologies réplication, mise en miroir de bases de données ou AlwaysOn dans votre environnement, vous pouvez remarquer des problèmes de performances avec ces technologies.
Effet de nombreux VLF sur la réplication
Trop de fichiers journaux peuvent affecter la réplication, car le processus de lecture du journal doit analyser chaque fichier journal virtuel pour les transactions marquées pour la réplication. Vous pouvez voir ce comportement en traçant les performances de la procédure stockée sp_replcmds. Le processus de lecture du journal utilise la procédure stockée sp_replcmds pour analyser les fichiers journaux virtuels et lire les transactions marquées pour la réplication.
Cause
Ce problème se produit lorsque vous spécifiez de petites valeurs pour le paramètre FILEGROWTH pour votre ou vos fichiers journaux de transactions.
SQL Server Moteur de base de données divise en interne chaque fichier journal physique en plusieurs fichiers journaux virtuels (VLF). SQL Server 2008 R2 Service Pack 2 a introduit un nouveau message (9017) enregistré lorsqu’une base de données démarre (soit en raison du démarrage d’une instance de SQL Server, soit du fait de l’attachement ou de la restauration de la base de données) et de plus de 1 000 VLF dans SQL Server 2008 R2 ou de plus de 10 000 VLFS dans SQL Server 2012 et versions ultérieures.
Remarque
Dans SQL Server 2012, bien que ce message soit enregistré lorsque la base de données a 10 000 VLF, le message réel signalé dans le journal des erreurs indique incorrectement « 1 000 VLF ». L’avertissement se produit après 10 000 VLF. Toutefois, le message signale 1 000 VLF. Ce problème est corrigé dans les versions ultérieures.
Action utilisateur
Pour résoudre ce problème, effectuez les opérations suivantes :
Vous pouvez afficher le nombre de VLF et la taille moyenne sur votre serveur SQL Server à l’aide de cette requête. Le résultat vous aidera à identifier les bases de données à concentrer sur :
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
Pour plus d’informations, consultez sys.dm_db_log_info.
Réduisez votre journal des transactions à l’aide de DBCC SHRINKDB/DBCC SHRINKFILE ou à l’aide de SQL Server Management Studio.
Effectuez une augmentation ponctuelle de la taille du fichier journal des transactions à une valeur importante. Cette augmentation ponctuelle est effectuée pour éviter les croissances automatiques fréquentes. Pour plus d’informations, consultez Gérer la taille du fichier journal des transactions.
Augmentez le paramètre FILEGROWTH à une valeur supérieure à celle actuellement configurée. Cela doit être basé sur l’activité de votre base de données et la fréquence de croissance de votre fichier journal.
En outre, vous pouvez consulter les articles de correctif suivants, en fonction de la version de SQL Server que vous exécutez actuellement :
Conseil
Pour déterminer la distribution optimale des fichiers journaux virtuels pour la taille actuelle du journal des transactions de toutes les bases de données dans une instance donnée, ainsi que les incréments de croissance pour atteindre la taille nécessaire, consultez ce script.