Wichtige Änderung bei der Anlage von VLFs

Durch Benjamin Hoch wurde ich auf eine wichtige Änderung für die Erzeugung von VLFs (Virtual Log Files) ab SQL Server 2014 aufmerksam gemacht, die mir bislang entgangen war.

Paul Randal beschreibt in seinem blog den Important change to VLF creation algorithm in SQL Server 2014.
Entsprechend habe ich meinen Artikel zu dem Thema angepasst und den folgenden Abschnitt eingefügt:

Der neue Algorithmus ab SQL Server 2014

  • Ist das Wachstum kleiner als 1/8 der aktuellen Log-File Größe?
  • Ja: lege nur noch 1 neues VLF an, welches die komplette Größe umfasst, die als Wachstum angegeben wurde.
  • Nein: Dann verwende weiterhin die Formel, die vorher angewendet wurde.

Damit wird also sichergestellt, dass neue VLFs ab einer gewissen Größe des Log-Files nur noch in großen Stücken angelegt werden. Das reduziert also die Anzahl der VLFs pro Log-File und den Overhead, der in den Messungen u. a. für Backup und den Serverneustart gemessen wurde.

Ab SQL Server 2014 läuft es also folgendermaßen ab, wenn man ein Log-File mit 1 GB angelegt hat (8 VLFs) und das Wachstum auf Stücke von 512 MB eingestellt hat:

  • Die ersten 8 VLFs werden bei der Erzeugung des Log-Files angelegt.
  • Die weiteren Schritte beim Wachstum für die Größen 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5 GB würden alle nach der alten Formel erfolgen und jeweils 8 VLFs erzeugen.
    Am Ende kommen hier also 7 * 8 VLFs = 56 VLFs zusammen.
  • Jedes weitere Wachstum über 4.5 GB erzeugt jetzt nur noch 1 VLF pro Vergrößerung. Falls das Ziel 200 GB sind, berechnen sich die hier erzeugten VLFs also wie folgt: (200 GB – 4.5 GB) * 2 VLFs pro GB = 391 VLFs
  • Insgesamt kommen wir auf 391 VLFs + 56 VLFs + 8 VLFs= 455 VLFs

Gegenüber der nach bisheriger Formel erzeugten 3.192 VLFs ist dies eine gewaltige Verbesserung. Diese neue Formel wird ab SQL Server 2014 unabhängig vom Datenbankkompatibilitätslevel angewendet.