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
Es dauert nur 1-2 Sekunden .
Warum das? Kann mir jemand erklären, was die Gründe dafür sind?
sql-server
performance
Nikolay Kostov
quelle
quelle
Antworten:
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 DATABASE
in Ihrem Test.Referenzen
Wie und warum wird die sofortige Initialisierung von
Dateien aktiviert? Sofortige Initialisierung - Was, warum und wie?
quelle
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?
quelle