Initialisierung von Datenbank-Sofortdateien

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel erfahren Sie mehr über die Sofortige Initialisierung von Dateien (IFI) und wie Sie es ermöglichen, das Wachstum 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 die schnellere Ausführung der zuvor Erwähnung dateivorgänge, da sie speicherplatzfrei verwendet wird, ohne diesen Speicherplatz 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 verwaltete Instanz instant file initialization is available for transaction log files only.

Sofortige Dateiinitialisierung und das Transaktionsprotokoll

Gilt für: SQL Server 2022 (16.x) und höhere Versionen sowie Azure SQL-Datenbank und Azure SQL verwaltete Instanz.

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 verwaltete Instanz kann die sofortige Dateiinitialisierung jedoch von automatischen Vergrößerungsereignissen im Transaktionsprotokoll bis zu 64 MB profitieren. Der Standardschritt bei der automatischen Vergrößerung für neue Datenbanken beträgt 64 MB. Automatische Vergrößerung der Transaktionsprotokolldateiereignisse, die größer als 64 MB sind, können von der sofortigen Dateiinitialisierung nicht profitieren.

Die sofortige Initialisierung von Dateien ist für Transaktionsprotokollwachstum 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 verwaltete Instanz verwendet, um das Wachstum von Transaktionsprotokolldateien zu nutzen.
  • Die Sofortige Dateiinitialisierung ist in Azure SQL-Datenbank und Azure SQL verwaltete Instanz nicht konfigurierbar.

Aktivieren der schnellen Dateiinitialisierung

Die sofortige Initialisierung von Datendateien ist nur verfügbar, wenn das STARTkonto des SQL Server-Diensts gewährt SE_MANAGE_VOLUME_NAMEwird. 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 Wachstumsereignissen bis zu 64 MB im Transaktionsprotokoll durchzuführen, das mit der Version von SQL Server 2022 (16.x) eingeführt wurde.

Wichtig

Einige Featureverwendungen, z . B. die transparente Datenverschlüsselung (TDE), können die sofortige Initialisierung von Dateien verhindern. Ab SQL Server 2022 (16.x) und in Azure SQL-Datenbank und Azure SQL verwaltete Instanz ist IFI im Transaktionsprotokoll zulässig. Weitere Informationen finden Sie unter "Sofortige Dateiinitialisierung" und im Transaktionsprotokoll .

Hinweis

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

Wenn Sie die Eingabeaufforderung installieren, fügen Sie das /SQLSVCINSTANTFILEINIT Argument hinzu, oder aktivieren Sie das Kontrollkästchen "Volumenwartungsaufgabe erteilen" sql Server Datenbank-Engine Dienst im Installations-Assistenten.

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 wählen Sie dann "Benutzerrechtezuweisung" aus.

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

  4. Wählen Sie "Benutzer oder Gruppe hinzufügen" aus, und fügen Sie das Konto hinzu, das den SQL Server-Dienst ausführt.

  5. Wählen Sie "Übernehmen" aus, und schließen Sie dann alle Dialogfelder für lokale Sicherheitsrichtlinien.

  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 das STARTkonto des SQL Server-Diensts gewährt SE_MANAGE_VOLUME_NAMEwird, wird eine Informationsmeldung protokolliert, die dem folgenden Beispiel ä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 das STARTkonto des SQL Server-Diensts nicht gewährt SE_MANAGE_VOLUME_NAMEwurde, wird eine Informationsmeldung protokolliert, die dem folgenden Beispiel ä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

    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.

Wenn Sie die Sofortige Dateiinitialisierung verwenden, wird der gelöschte Datenträgerinhalt nur überschrieben, wenn neue Daten in die Dateien 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 ist, kann auf sie von einem Benutzer oder Dienst zugegriffen werden, der nicht vorhanden SE_MANAGE_VOLUME_NAMEist.

Ähnliche Überlegungen existieren, wenn...:

  • ...die Datenbank gesichert wird. Wenn die Sicherungsdatei nicht durch eine entsprechende DACL geschützt ist, kann der gelöschte Inhalt für einen nicht autorisierten Benutzer oder Dienst verfügbar werden.

  • ...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 ist auch möglich, dass das Speicherbereichsnetzwerk immer neue Seiten als vorinitialisiert darstellt, und dass das Betriebssystem die Seiten erneut initialisiert, kann unnötigen Aufwand verursachen.

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 SE_MANAGE_VOLUME_NAME Sie dazu das Startkonto des SQL Server-Diensts.

    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 SE_MANAGE_VOLUME_NAME Benutzerberechtigungen können im Applet "Lokale Sicherheitsrichtlinie" unter Windows-Verwaltungstools 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 sehr 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 mit der Abfrageleistung führen. Dies liegt daran, dass ein Vorgang, der die automatische Vergrößerung einer Datei an Ressourcen erfordert, z. B. Sperren oder Verriegelungen während der Dauer des Dateivergrößerungsvorgangs. Möglicherweise werden lange Wartezeiten auf Verriegelungen für Zuordnungsseiten angezeigt. Der Vorgang, für den die lange automatische Vergrößerung erforderlich ist, zeigt einen Wartetyp an PREEMPTIVE_OS_WRITEFILEGATHER.