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 contient plus de %d fichiers journaux virtuels, ce qui est excessif. Un trop grand nombre de fichiers journaux virtuels peut 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

Lors du démarrage d’une base de données, SQL Server détecte qu’une base de données contient un grand nombre de fichiers journaux virtuels 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 de réplication, de mise en miroir de bases de données ou d’AlwaysOn dans votre environnement, vous pouvez remarquer des problèmes de performances avec ces technologies.

L’effet de nombreux fichiers journaux virtuels sur la réplication

Un trop grand nombre de fichiers journaux peut affecter la réplication, car le processus de lecture de journal doit analyser chaque fichier journal virtuel à la recherche de 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 de 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 vos fichiers journaux de transactions.

Le moteur de base de données SQL Server divise en interne chaque fichier journal physique en plusieurs fichiers journaux virtuels (VDF). SQL Server 2008 R2 Service Pack 2 a introduit un nouveau message (9017) journalisé au démarrage d’une base de données (soit en raison du démarrage d’une instance de SQL Server, soit en raison de l’attachement ou de la restauration du database) et a plus de 1 000 VDF dans SQL Server 2008 R2 ou plus de 10 000 VLFS dans SQL Server 2012 et versions ultérieures.

Notes

Dans SQL Server 2012, bien que ce message soit journalisé lorsque la base de données a 10 000 VDF, le message réel signalé dans le journal des erreurs indique incorrectement « 1 000 VLF ». L’avertissement se produit après 10 000 VDF. Toutefois, le message signale 1 000 VDF. Ce problème est corrigé dans les versions ultérieures.

Action requise

Pour résoudre ce problème, effectuez les opérations suivantes :

  1. Vous pouvez afficher le nombre de VLF et la taille moyenne sur votre SQL Server à l’aide de cette requête. Le résultat vous aidera à identifier les bases de données sur lesquelles vous devez vous concentrer :

    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.

  2. Réduisez votre journal des transactions à l’aide de DBCC SHRINKDB/DBCC SHRINKFILE ou de SQL Server Management Studio.

  3. Effectuez une augmentation ponctuelle de la taille du fichier journal des transactions à une valeur élevée. 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.

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

  5. En outre, vous pouvez consulter les articles de correctif suivants, en fonction de la version de SQL Server que vous exécutez actuellement :

    CORRECTIF : la restauration d’une base de données dans SQL Server 2008 R2, SQL Server 2008 ou SQL Server 2012 prend beaucoup de temps

    CORRECTIF : Ralentissement des performances lorsque vous récupérez une base de données s’il existe de nombreux fichiers journaux virtuels dans le journal des transactions dans SQL Server 2005, SQL Server 2008 ou SQL Server 2008 R2

    CORRECTIF : La récupération prend plus de temps que prévu pour une base de données dans un environnement SQL Server 2008 ou SQL Server 2008 R2

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.