it-swarm.com.de

Warum verbessert das Hinzufügen eines SQL Server-Benutzers zu "Durchführen von Volume-Wartungsaufgaben" die Geschwindigkeit der Datenbankgröße so stark?

Wenn ich eine 5GB Datenbank mit erstellen möchte

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%)

es dauert 1 Minute auf meiner SSD.

Aber wenn ich SQL Server-Benutzer zu Perform volume maintenance tasks

enter image description here

es dauert nur 1-2 Sekunden.

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

17
Nikolay Kostov

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

Ohne das dem SQL Service-Konto gewährte Privileg "- Volume Maintenance Tasks ausführen" muss SQL Server bei der Datenbankerstellung "test.mdf" und "test.mdf" auf Null setzen "test_log.ldf".

Mit der Berechtigung "Volumenwartungsaufgaben ausführen" muss SQL Server nur "test_log.ldf" auf Null setzen. Ein deutlich geringerer Overhead, daher minimierte Dauer für die CREATE DATABASE in Ihren Tests.

Referenzen
Wie und warum die sofortige Dateiinitialisierung aktiviert wird
Sofortige Initialisierung - Was, Warum und Wie?

26
Thomas Stringer

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

Warum? Geschwindigkeit

Warum NICHT? Mögliches Sicherheitsrisiko. Jemand könnte sich in Ihre Box hacken und möglicherweise die Speicherplätze ungleich Null 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 die sofortige Dateiinitialisierung aktiviert wird

1
Robert Lee