Euch ist sicher bereits schon aufgefallen, dass wenn eine Datenbank vergrößert wird, für einen Moment die Datenbank einfriert. Die dauer des Moments hängt von der Einstellung der Vergrößerung ab.

USE [master]
GO
ALTER DATABASE [<<Datenbankname>>] MODIFY FILE ( NAME = N'<<Logischername>>', SIZE = 10240MB, MAXSIZE = 20480MB, FILEGROWTH = 0 )
GO

Hier wird eine Datenbank mit einer Größe von 5 MB auf 10 GB vergrößert. Der SQL-Server benötigt für diese Operation 7:34 Minuten. Das ist ganz schön lang. In dieser Zeit ist die Datenbank nicht ansprechbar.

Was wird in der Zeitspanne gemacht?

Bei einer Vergrößerung der Datenbankdatei ( MDF, NDF undLDF) reserviert der SQL-Server den frischen Speicherplatz. Nach der Reservierung schreibt der SQL-Server in den frischen Speicherplatz eine Null (Zeroing out) nach der anderen rein. Damit sorgt der SQL-Server dafür, dass keine Fragmente von alten Daten auf dem für Ihn reservierten Speicherplatz liegen. Das Nullen (Zeroing out) wird grundsätzlich immer ausgeführt wenn die Dateien (MDF, NDF, LDF) verändert werden:

  • CREATE DATABASE
  • ALTER DATABASE
  • RESTORE DATABASE
  • AUTOGROWTH

Deaktivieren des Nullen (Zeroing out) mit Instant File Initialization

Aktiviert man die Instant File Initialization wird der reservierte Speicherplatz nicht genullt.

Die Aktivierung von Instant File Initialization hat Auswirkungen auf:

  • MDF-Dateien
  • NDF-Dateien

Die LDF-Dateien können hier keinen Nutzen ziehen.

Achtung: Wird Instant File Initialization aktiviert können Fragmente auf dem reservierten Plattenplatz wieder hergestellt werden. Dieses Risiko muss vor der Aktivierung genau geprüft und beachtet werden!

Die Konfiguration zur Aktivierung Instant File Initialization wird nicht wie viele jetzt vermuten im SQL-Server vorgenommen sondern in den lokale Sicherheitsrichtlinie.

Hierbei handelt es sich tatsächlich um administratives Sicherheitsrecht. Dieses Recht ist daher nur mit sehr viel Sorgfalt zu vergeben, da es sich nicht nur auf den SQl-Server bezieht sonder auf den ganzen Server!

Die Aktivierung :

  1. öffnen der Lokale Sicherheitsrichtlinie
    1. Start ausführen secpol.msc
  2. navigieren zu
    1. Lokale Richtline ==> Zuweisen von Benutzerrechten ==> Durchführen von Vollumenwartungsaufgaben
  3. hinzufügen des Benutzerkontos unter dem der SQL-Server-Dienst ausgeführt wird.
Lokale Sicherheitsrichtlinie
Lokale Sicherheitsrichtlinie

Nach dieser Änderung ist Instant File Initialization aktiviert. Führt man nun das obige Beispiel erneut aus, dauert die Erweiterung 0 Sekunden.

Von Michael