web-dev-qa-db-fra.com

Quelle est l'importance de la transaction journal VLFS pour la performance?

Quelle est l'importance des VLFS lorsqu'ils envisagent des performances de la base de données? Qu'est-ce qui décrirait une situation optimale pour les VLFS?

12
the_good_pony

Qu'est-ce qu'un fichier journal virtuel?

SQL Server divise le fichier journal des transactions pour chaque base de données en morceaux plus petits, appelé "Fichiers journaux virtuels" (ou VLFS pour bref). Leur fonction principale est comme des marqueurs de troncature à une sauvegarde de journal, c'est-à-dire que le serveur SQL n'expliquera que (et marquer des marques à réutilisation) VLFS complètement vides. MSDN a une pièce sur Journal de transaction - Architecture physique .

Qu'est-ce qui détermine le nombre de VLFS?

Chaque fois qu'un fichier journal augmente (via une croissance automatique ou une croissance manuelle), la nouvelle section du fichier journal est divisée en un certain nombre de VLFS, uniquement sur la taille de la taille de la nouvelle section (le journal de transaction existant est laissé seul). Ainsi, les petits paramètres d'autogrotth (c'est-à-dire l'autogrotthe de 10% qui correspond à la valeur par défaut) entraînera la création d'un grand nombre de VLF.

Quelles sont les implications d'un grand nombre de VLFS?

Le principal problème qu'un grand nombre de causes VLFS sont:

  • Récupération lente (la récupération est une phase lors de la restauration de la base de données où les transactions remplies sont écrites dans les pages de données et les transactions incomplètes sont renvoyées).
  • Performances de lecteur de journal lentes dans une configuration de miroir de la base de données.
  • Performances lentes Lors de la création d'instantané de base de données (notez que cela inclut également certaines fonctions de DBCC car ils utilisent des instantanés de base de données en arrière-plan pour faciliter les contrôles de cohérence sans blocage).

Comment puis-je savoir combien de VLFS ma base de données a?

DBCC LOGINFO retournera 1 rangée pour chaque VLF dans le journal de transaction de votre base de données. Cette question a quelques scripts utiles pour l'application de toutes les bases de données sur un serveur .

Combien de VLFS est trop nombreux?

C'est un appel de jugement que vous devrez faire vous-même. Ma règle de base personnelle est que moins de 50 ans ne vaut pas la peine de jouer avec et plus de 100 (environ) et je corrige des paramètres de autogrotthe et faire une note mentale à (dans la prochaine fenêtre de maintenance), rétrécissez et reprochez le journal (comme ci-dessous). .

aide! J'ai de onze milliards de VLFS et ma récupération de base de données prend toute la journée!

Contour court (de Blog de Kimberly Tripp ):

  • Assurez-vous que vous êtes la seule connexion active dans la base de données (ainsi, faites-la pendant une fenêtre de maintenance)
  • Sauvegardez le journal de transaction sur le disque (en utilisant BACKUP LOG)
  • Cours DBCC SHRINKFILE avec TRUNCATEONLY pour réduire le fichier journal à la taille la plus petite possible.
  • Cours ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsize Pour redimensionner votre décharge de transaction en une seule étape **.

** Remarque - Si vous avez un fichier journal très volumineux (dizaines de gbs ou plus), vous souhaiterez peut-être redimensionner plusieurs étapes pour obtenir un nombre approprié de VLFS avec une taille appropriée pour éviter des sauvegardes de journalisation excessivement "chunky". Étant donné que les VLFS sont l'unité de troncature, ils déterminent également les tailles de sauvegarde du journal, comme indiqué sur Blog de Kim .

17
Simon Righarts