MSSQLSERVER_9017

S’applique à : SQL Server (toutes les versions prises en charge)

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 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 (VLFs) 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 connecté 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 Replication, Database Mirroring 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 lecteur 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 votre ou vos fichiers journaux de transactions.

Le SQL Server moteur de base de données divise en interne chaque fichier journal physique en plusieurs fichiers journaux virtuels (VLFs). SQL Server 2008 R2 Service Pack 2 a introduit un nouveau message (9017) journalisé lorsqu’une base de données démarre (soit en raison du démarrage d’une instance de SQL Server, soit en raison de l’attachement ou de la restauration du fichier base de données) et a plus de 1 000 VLFs 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 VLFs, le message réel signalé dans le journal des erreurs indique incorrectement « 1 000 VLF ». L’avertissement se produit après 10 000 VLFs. Toutefois, le message signale 1 000 VLFs. 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 VLF et la taille moyenne de votre 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.

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

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

  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 sur la fréquence de croissance de votre fichier journal.

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

    CORRECTIF : Il faut beaucoup de temps pour restaurer une base de données dans SQL Server 2008 R2, SQL Server 2008 ou SQL Server 2012

    CORRECTIF : Performances lentes lorsque vous récupérez une base de données s’il existe de nombreux VLF 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.