Sofortige Datenbankdateiinitialisierung

Gilt für: SQL Server (alle unterstützten Versionen)

In diesem Artikel erfahren Sie mehr über die schnelle Dateiinitialisierung und darüber, wie Sie diese aktivieren, um die Vergrößerung Ihrer SQL Server-Datenbankdateien zu beschleunigen.

Daten- und Protokolldateien werden standardmäßig initialisiert, um vorhandene Daten zu überschreiben, die von zuvor gelöschten Dateien auf dem Datenträger zurückgelassen wurden. Daten- und Protokolldateien werden erstmals durch Ausfüllen der Dateien mit Nullen initialisiert, wenn Sie einen der folgenden Vorgänge durchführen:

  • Erstellen einer Datenbank
  • Fügen Sie Dateien oder Protokolldateien zu einer vorhandenen Datenbank hinzu.
  • Vergrößern einer vorhanden Datei (einschließlich Vorgängen zur automatischen Vergrößerung).
  • Wiederherstellen einer Datenbank oder Dateigruppe

In SQL Server ermöglicht die sofortige Dateiinitialisierung (Instant File Initialization, IFI) nur für Datendateien eine schnellere Ausführung der zuvor erwähnten Dateivorgänge, da sie den verwendeten Speicherplatz zurückgibt, ohne diesen Speicherplatz mit Nullen zu füllen. Stattdessen wird Datenträgerinhalt überschrieben, wenn neue Daten an die Dateien geschrieben werden.

Transaktionsprotokolldateien können nicht sofort initialisiert werden, ab SQL Server 2022 (16.x) kann die sofortige Dateiinitialisierung jedoch Transaktionsprotokoll-Autogrowth-Ereignissen bis zu 64 MB zugute kommen. Das standardmäßige Inkrement der automatischen Vergrößerung für neue Datenbanken beträgt 64 MB. Ereignisse der automatischen Vergrößerung von Transaktionsprotokolldateien, die größer als 64 MB sind, können nicht von der sofortigen Dateiinitialisierung profitieren.

Aktivieren der schnellen Dateiinitialisierung

Die sofortige Dateiinitialisierung ist nur verfügbar, wenn dem SQL Server Dienststartkonto SE_MANAGE_VOLUME_NAME gewährt wurde. Mitglieder der Windows-Administratorengruppe verfügen über dieses Recht und können es anderen Benutzern erteilen, indem sie diese der Sicherheitsrichtlinie Durchführen von Volumewartungsaufgaben hinzufügen.

Wichtig

Die Verwendung bestimmter Features wie Transparent Data Encryption (TDE) kann die schnelle Dateiinitialisierung blockieren.

Hinweis

Ab SQL Server 2016 (13.x) kann diese Berechtigung dem Dienstkonto bei der Installation während des Setups erteilt werden.

Wenn Sie eine Installation über die Eingabeaufforderung durchführen, fügen Sie das Argument /SQLSVCINSTANTFILEINIT hinzu oder aktivieren im Installationsassistenten das Kontrollkästchen SQL Server-Datenbank-Engine-Dienst Berechtigung zum Ausführen von Volumewartungstasks gewähren.

So erteilen Sie einem Konto die Berechtigung Perform volume maintenance tasks :

  1. Öffnen Sie auf dem Computer, auf dem die Datendatei erstellt wird, die Anwendung für lokale Sicherheitsrichtlinien (secpol.msc).

  2. Erweitern Sie im linken Bereich Lokale Richtlinien, und klicken Sie dann auf Zuweisen von Benutzerrechten.

  3. Doppelklicken Sie im rechten Bereich auf Durchführen von Volumewartungsaufgaben.

  4. Klicken Sie auf Benutzer oder Gruppe hinzufügen, und fügen Sie das Konto hinzu, über das der SQL Server-Dienst ausgeführt wird.

  5. Klicken Sie auf Übernehmen, und schließen Sie dann alle Dialogfelder von Lokale Sicherheitsrichtlinie .

  6. Starten Sie den SQL Server-Dienst neu.

  7. Überprüfen Sie das SQL Server Fehlerprotokoll beim Start.

    Gilt für: SQL Server (ab SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 und SQL Server 2016 (13.x) und höher).

    1. Wenn dem SQL Server Dienststartkonto SE_MANAGE_VOLUME_NAME gewährt wird, wird eine Informationsmeldung protokolliert, die der folgenden ähnelt:

      Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    2. Wenn dem SQL Server Dienststartkonto nichtSE_MANAGE_VOLUME_NAME gewährt wurde, wird eine Informationsmeldung protokolliert, die der folgenden ähnelt:

      Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    Hinweis

    Sie können auch die Spalte instant_file_initialization_enabled in der DMV sys.dm_server_services verwenden, um festzustellen, ob die schnelle Dateiinitialisierung aktiviert ist.

Sicherheitshinweise

Es wird empfohlen, die schnelle Dateiinitialisierung zu aktivieren, da die Vorteile das Sicherheitsrisiko überwiegen können.

Bei Verwendung der schnellen Dateiinitialisierung wird der gelöschte Datenträgerinhalt nur überschrieben, wenn neue Daten in die Datei geschrieben werden. Aus diesem Grund kann ein nicht autorisierter Prinzipal möglicherweise so lange auf den gelöschten Inhalt zugreifen, bis andere Daten in diesen Bereich der Datendatei geschrieben werden.

Während die Datenbankdatei an die Instanz von SQL Server angefügt ist, wird diese Gefahr einer Offenlegung von Informationen durch die besitzerverwaltete Zugriffssteuerungsliste (Discretionary Access Control List, DACL) in der Datei verringert. Diese DACL gewährt den Dateizugriff nur für das SQL Server-Dienstkonto und den lokalen Administrator. Wenn die Datei jedoch getrennt wird, kann möglicherweise ein Benutzer oder Dienst darauf zugreifen, der nicht über SE_MANAGE_VOLUME_NAME verfügt.

Ähnliche Überlegungen existieren, wenn...:

  • ...die Datenbank gesichert wird. Der gelöschte Inhalt kann für einen nicht autorisierten Benutzer oder Dienst verfügbar werden, wenn die Sicherungsdatei nicht mit einer entsprechenden DACL geschützt wird.

  • ...eine Datei mit der IFI vergrößert wird. Ein SQL Server-Administrator könnte Zugriff auf die grundlegenden Inhalte der Seite und bereits gelöschte Inhalte erhalten.

  • ...die Datenbankdateien auf einem Storage Area Network gehostet werden. Es kann außerdem sein, dass das Storage Area Network neue Seiten immer als vorinitialisiert anzeigt. Die erneute Initialisierung der Seiten durch das Betriebssystem würde einen unnötigen Mehraufwand bedeuten.

Wenn Sie sich Gedanken über eine potenzielle Offenlegung von Informationen machen, sollten Sie eine oder beide der folgenden Maßnahmen treffen:

  • Stellen Sie immer sicher, dass alle angebundenen Daten- und Sicherungsdateien über restriktive DACLs verfügen.

  • Deaktivieren Sie die sofortige Dateiinitialisierung für die Instanz von SQL Server. Widerrufen Sie dazu SE_MANAGE_VOLUME_NAME aus dem SQL Server-Dienststartkonto.

    Hinweis

    Das Deaktivieren erhöht die Zuordnungszeiten für Datendateien und wirkt sich nur auf Dateien aus, die erstellt oder vergrößert werden, nachdem das Benutzerrecht widerrufen wurde.

Benutzerrecht SE_MANAGE_VOLUME_NAME

Die Benutzerberechtigung SE_MANAGE_VOLUME_NAME kann in Windows-Verwaltungsprogrammen im Applet Lokale Sicherheitsrichtlinie zugewiesen werden. Klicken Sie unter Lokale Richtlinien auf User Right Assignment (Zuweisung von Benutzerrechten), und ändern Sie die Eigenschaft Durchführen von Volumewartungsaufgaben.

Überlegungen zur Leistung

Beim Initialisierungsprozess der Datenbankdatei werden Nullen in die neuen Bereiche der initialisierten Datei geschrieben. Die Dauer dieses Prozesses hängt von der Größe des initialisierten Dateiteils sowie von der Antwortzeit und Kapazität des Speichersystems ab. Wenn die Initialisierung lange dauert, werden möglicherweise die folgenden Meldungen im SQL Server-Fehlerprotokoll und im Anwendungsprotokoll aufgezeichnet.

Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds.  Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds.  Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.

Eine lange automatische Vergrößerung einer Datenbank und/oder Transaktionsprotokolldatei kann zu Problemen hinsichtlich der Abfrageleistung führen. Dies liegt daran, dass ein Vorgang während der Dauer der Dateivergrößerung, bei dem die automatische Vergrößerung einer Datei erforderlich ist, für Ressourcen wie Sperren oder Latches durchgeführt wird. Möglicherweise werden für Latches für Zuordnungsseiten lange Wartezeiten angezeigt. Der Vorgang, der die lange automatische Vergrößerung erfordert, zeigt einen Wartetyp PREEMPTIVE_OS_WRITEFILEGATHER an.

Weitere Informationen

CREATE DATABASE (SQL Server Transact-SQL)