Warum verbessert das Hinzufügen eines SQL Server-Benutzers zu "Durchführen von Volume-Wartungsaufgaben" die Geschwindigkeit der Größenänderung der Datenbank so sehr?

17

Wenn ich mit 5GB Datenbank erstellen will

CREATE DATABASE [test]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

Auf meiner SSD dauert es 1 Minute .

Aber wenn ich SQL Server-Benutzer hinzufügen Perform volume maintenance tasks

Bildbeschreibung hier eingeben

Es dauert nur 1-2 Sekunden .

Warum das? Kann mir jemand erklären, was die Gründe dafür sind?

Nikolay Kostov
quelle
4
Können die Downvoter erklären, warum die Downvotes? Das scheint mir eine gute Frage zu sein.
Thomas Stringer

Antworten:

26

Das liegt an der Instant File Initialisierung . Kurz gesagt, SQL Server kann dieses Recht für Datenbankdatendateien (nicht für Transaktionsprotokolldateien) nutzen. Dies bedeutet, dass SQL Server die Datendatei (en) bei der Initialisierung nicht auf Null setzen muss.

Ohne die Berechtigung "Volume-Wartungsaufgaben ausführen", die dem SQL-Dienstkonto gewährt wurde, muss SQL Server bei der Datenbankerstellung "test.mdf" und "test_log.ldf" auf Null setzen.

Mit dem Berechtigungssatz "Durchführen von Volume-Wartungsaufgaben" muss SQL Server nur "test_log.ldf" auf Null setzen. Ein deutlich geringerer Overhead, daher minimierte Dauer für die CREATE DATABASEin Ihrem Test.

Referenzen
Wie und warum wird die sofortige Initialisierung von
Dateien aktiviert? Sofortige Initialisierung - Was, warum und wie?

Thomas Stringer
quelle
Diese Naht ist großartig, aber warum ist sie standardmäßig deaktiviert?
Ahmed Abdelqader
1

Dies hat keine Auswirkungen auf .ldf-Dateien (Protokolldateien), zumindest nicht gemäß dem MS-Artikel

Warum machen wir das? Geschwindigkeit

Warum NICHT? Mögliches Sicherheitsrisiko. Jemand könnte sich in Ihre Box hacken und möglicherweise die von Null verschiedenen Speicherbereiche lesen und diese Daten abrufen. Kleines Risiko, aber immer noch ein Risiko. Aus diesem Grund ist es standardmäßig nicht aktiviert.

Detaillierte Erklärung: Wie und warum wird die Instant File-Initialisierung aktiviert?

Robert Lee
quelle
Hinweis für den Leser: Wenn Sie Bedenken haben, dass sich Benutzer in Ihren Server einhacken und alte Daten aus gelöschten Dateien lesen, kann es hilfreich sein, IFI auszuschalten, aber ich würde es kaum für ausreichend halten. Und wenn Sie Software haben, die bereits gelöschte Dateien überschreibt, können Sie IFI wahrscheinlich aktivieren, da diese Software den Speicherplatz bereits auf Null gesetzt haben sollte.
RDFozz
Es gibt jetzt ein Kontrollkästchen während der Installation (ab SQL 2016), mit dem Sie dem SQL Server-Dienstkonto dieses Recht erteilen können, sodass MS auch im Sicherheitsbereich etwas entspannter ist.
Gareth Lyons