Freigeben über


Schnelle Datenbankdateiinitialisierung

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

In diesem Artikel erfahren Sie mehr über die schnelle Dateiinitialisierung (IFI) 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 schnelle Dateiinitialisierung eine schnellere Ausführung der zuvor erwähnten Dateivorgänge, da sie verwendeten Speicherplatz freigibt, ohne diesen mit Nullen zu füllen. Stattdessen wird Datenträgerinhalt überschrieben, wenn neue Daten an die Dateien geschrieben werden.

In Azure SQL-Datenbank und Azure SQL Managed Instance ist die sofortige Dateiinitialisierung nur für Transaktionsprotokolldateien verfügbar.

Sofortige Dateiinitialisierung und das Transaktionsprotokoll

Gilt für: SQL Server 2022 (16.x) und höher, sowie Azure SQL-Datenbank und Azure SQL Managed Instance

In der Vergangenheit konnten Transaktionsprotokolldateien nicht sofort initialisiert werden. Ab SQL Server 2022 (16.x) (alle Editionen) und in Azure SQL-Datenbank und Azure SQL Managed Instance jedoch kann die sofortige Dateiinitialisierung jedoch Vorteile bei Ereignissen durch automatische Vergrößerung von Transaktionsprotokollen auf bis zu 64 MB bieten. Der Standardschritt bei der automatischen Vergrößerung für neue Datenbanken beträgt 64 MB. Ereignisse bei einer automatischen Zunahme bei Transaktionsprotokolldateien von mehr als 64 MB profitieren nicht von der sofortigen Dateiinitialisierung.

Die sofortige Initialisierung von Dateien ist für die Vergrößerung von Transaktionsprotokollen in Datenbanken zulässig, die eine transparente Datenverschlüsselung (TDE) aktiviert haben, aufgrund der Art der Erweiterung der Transaktionsprotokolldatei und der Tatsache, dass das Transaktionsprotokoll in serieller Weise geschrieben wird.

  • Die Sofortige Dateiinitialisierung wird nur für die Ebenen „Allgemeiner Zweck“ und „Unternehmenskritisch“ von Azure SQL-Datenbank und Azure SQL Managed Instance verwendet, um die Vergrößerung von Transaktionsprotokolldateien zu optimieren.
  • Die Sofortige Dateiinitialisierung ist in Azure SQL-Datenbank und Azure SQL Managed Instance nicht konfigurierbar.

Aktivieren der schnellen Dateiinitialisierung

Die sofortige Dateiinitialisierung von Datendateien ist nur verfügbar, wenn dem Startkonto des SQL Server-Dienstes SE_MANAGE_VOLUME_NAME erteilt 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. Das SE_MANAGE_VOLUME_NAME Recht ist nicht erforderlich, um die sofortige Dateiinitialisierung von Vergrößerungsereignissen bis zu 64 MB im Transaktionsprotokoll durchzuführen, das mit der Version von SQL Server 2022 (16.x) eingeführt wurde.

Wichtig

Die Verwendung bestimmter Features wie Transparent Data Encryption (TDE) kann die schnelle Dateiinitialisierung blockieren. Ab SQL Server 2022 (16.x) und in Azure SQL-Datenbank und Azure SQL Managed Instance ist IFI im Transaktionsprotokoll zulässig. Weitere Informationen finden Sie unter Sofortige Dateiinitialisierung und im Transaktionsprotokoll.

Ab SQL Server 2016 (13.x) kann diese Berechtigung dem Dienstkonto beim Setup im Rahmen einer Installation erteilt werden.

Wenn Sie die Eingabeaufforderung Installieren verwenden, fügen Sie das Argument /SQLSVCINSTANTFILEINIT hinzu oder aktivieren im Installations-Assistent 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 SQL Server-Dienst-Konto hinzu.

  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 beim Start das SQL Server-Fehlerprotokoll.

    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 Startkonto des SQL Server-Dienstes SE_MANAGE_VOLUME_NAME erteilt wurde, wird eine Meldung ähnlich der folgenden protokolliert:

      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 Startkonto des SQL Server-Dienstes nicht SE_MANAGE_VOLUME_NAME erteilt wurde, wird eine Meldung ähnlich der folgenden protokolliert:

      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

    Verwenden Sie in SQL Server den Wert instant_file_initialization_enabled in der sys.dm_server_services dynamischen Verwaltungsansicht, um zu ermitteln, ob die Sofortige Dateiinitialisierung für Ihre Instanz 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 schnelle Dateiinitialisierung für die Instanz von SQL Server. Hierzu rufen Sie SE_MANAGE_VOLUME_NAME über das SQL Server-Dienststartkonto auf.

    Hinweis

    Durch das Deaktivieren verlängert sich die Belegungszeit für Datendateien. Es wirkt sich nur auf Dateien aus, die nach dem Widerrufen des Benutzerrechts erstellt oder vergrößert werden.

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 Vorgangs hängt von der Größe des zu initialisierenden Dateiteils und der Antwortzeit und der 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 den Wartetyp PREEMPTIVE_OS_WRITEFILEGATHER an.