Wie wichtig sind VLFs im Hinblick auf die Datenbankleistung? Was würde eine optimale Situation für VLFs beschreiben?
sql-server
performance
transaction-log
the_good_pony
quelle
quelle
Antworten:
Was ist eine virtuelle Protokolldatei?
SQL Server unterteilt die Transaktionsprotokolldatei für jede Datenbank in kleinere Abschnitte, die als "virtuelle Protokolldateien" (kurz VLFs) bezeichnet werden. Ihre Hauptfunktion ist das Abschneiden von Markierungen bei einer Protokollsicherung, dh der SQL Server löscht nur VLFs, die vollständig leer sind (und markiert sie zur Wiederverwendung). MSDN hat einen Beitrag zum Transaktionsprotokoll - Physikalische Architektur .
Was bestimmt die Anzahl der VLFs?
Jedes Mal, wenn eine Protokolldatei wächst (ob durch automatisches oder manuelles Wachstum), wird der neue Abschnitt der Protokolldatei in eine Reihe von VLFs unterteilt, die lediglich auf der Größe des neuen Abschnitts basieren (das vorhandene Transaktionsprotokoll bleibt unberührt). Bei kleinen Einstellungen für das automatische Wachstum (dh dem voreingestellten automatischen Wachstum von 10%) wird daher eine große Anzahl von VLFs erstellt.
Was sind die Auswirkungen einer großen Anzahl von VLFs?
Das Hauptproblem, das eine große Anzahl von VLFs verursacht, sind:
DBCC
da sie Datenbank-Snapshots im Hintergrund verwenden, um Konsistenzprüfungen ohne Blockierung zu ermöglichen).Wie kann ich herausfinden, wie viele VLFs meine Datenbank enthält?
DBCC LOGINFO
gibt 1 Zeile für jede VLF im Transaktionsprotokoll Ihrer Datenbank zurück. Diese Frage enthält einige nützliche Skripts, mit denen Sie diese auf alle Datenbanken auf einem Server anwenden können.Wie viele VLFs sind zu viele?
Das ist eine Entscheidung, die Sie für sich selbst treffen müssen. Meine persönliche Faustregel ist, dass es sich nicht lohnt, mit unter 50 zu spielen, und über 100 (oder so), und ich korrigiere die Einstellungen für das automatische Wachstum und mache mir eine mentale Notiz (im nächsten Wartungsfenster), das Protokoll zu verkleinern und erneut zu wachsen (siehe unten). .
Hilfe! Ich habe elf Milliarden VLFs und meine Datenbankwiederherstellung dauert den ganzen Tag!
Kurzer Abriss (aus Kimberly Tripps Blog ):
BACKUP LOG
)DBCC SHRINKFILE
mit ausTRUNCATEONLY
, um die Protokolldatei auf die kleinstmögliche Größe zu verkleinern.ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsize
um die Größe Ihres Transaktionsprotokolls in einem einzigen Schritt zu ändern **.** Hinweis - Wenn Sie über eine sehr große Protokolldatei (mehrere zehn GB oder mehr) verfügen, möchten Sie möglicherweise die Größe in mehreren Schritten ändern, um eine angemessene Anzahl von VLFs mit einer angemessenen Größe zu erhalten, um übermäßig umfangreiche Protokollsicherungen zu vermeiden. Da VLFs die Kürzungseinheit sind, bestimmen sie auch die Protokollsicherungsgrößen, wie in Kims Blog beschrieben .
quelle