Die SQL Server-Datenbanksicherungsdatei hat die doppelte endgültige Größe, bis die Sicherung abgeschlossen ist

7

Ich habe gerade eine Sicherungsanweisung für eine relativ große Datenbank (1,3 TB) geschrieben und sie mit einer viel kleineren Datenbank (10 GB + 10 GB Protokolldatei) getestet. Das Backup schreibt an drei Ziele. Während des Tests habe ich festgestellt, dass jede Sicherungsdatei während der Ausführung der Sicherung etwa 1,2 GB groß ist. Nach Abschluss des Sicherungsvorgangs werden die Dateien jedoch auf weniger als 600 MB verkleinert.

Ich bin interessiert zu wissen:

  • Warum sind die Dateien während des Sicherungsvorgangs größer und werden dann verkleinert?
  • ob es einen Weg gibt, dies zu verhindern,
  • Wie groß die Dateien wahrscheinlich sind, wenn ich diese 1,3-TB-Datenbank sichern möchte - wenn die Dateien wieder doppelt so groß sein sollen, muss ich möglicherweise nach mehr Speicherplatz fragen!

Hier ist die Sicherungsanweisung, die ich verwende:

BACKUP DATABASE @DatabaseName
TO  DISK = @backupMedia1,
    DISK = @backupMedia2,
    DISK = @backupMedia3
WITH COMPRESSION, RETAINDAYS = 0, NOFORMAT, INIT, NOSKIP, NAME = @DatabaseName
paulH
quelle

Antworten:

8

Dies ist ein bekanntes Problem und erwartetes Verhalten (beabsichtigt). Im Wesentlichen reserviert das Backup die Gesamtmenge an Speicherplatz, die es für erforderlich hält, und wird dann als letzter Schritt verkleinert. Um das Verhalten zu ändern, können Sie mit dem Ablaufverfolgungsflag 3042 experimentieren. Von http://msdn.microsoft.com/en-us/library/bb964719.aspx#Allocation :

Bei komprimierten Sicherungen hängt die Größe der endgültigen Sicherungsdatei davon ab, wie komprimierbar die Daten sind. Dies ist vor Abschluss des Sicherungsvorgangs nicht bekannt. Daher verwendet das Datenbankmodul beim Sichern einer Datenbank mithilfe der Komprimierung standardmäßig einen Vorzuweisungsalgorithmus für die Sicherungsdatei. Dieser Algorithmus weist der Sicherungsdatei einen vordefinierten Prozentsatz der Datenbankgröße zu. Wenn während des Sicherungsvorgangs mehr Speicherplatz benötigt wird, vergrößert das Datenbankmodul die Datei. Wenn die endgültige Größe kleiner als der zugewiesene Speicherplatz ist, verkleinert das Datenbankmodul die Datei am Ende des Sicherungsvorgangs auf die tatsächliche endgültige Größe der Sicherung.

Verwenden Sie das Ablaufverfolgungsflag 3042, damit die Sicherungsdatei nur nach Bedarf wächst, um ihre endgültige Größe zu erreichen. Das Ablaufverfolgungsflag 3042 bewirkt, dass der Sicherungsvorgang den Standardalgorithmus für die Sicherungskomprimierung vor der Zuweisung umgeht. Dieses Ablaufverfolgungsflag ist nützlich, wenn Sie Speicherplatz sparen müssen, indem Sie nur die tatsächliche Größe zuweisen, die für die komprimierte Sicherung erforderlich ist. Die Verwendung dieses Ablaufverfolgungsflags kann jedoch zu einer leichten Leistungsminderung führen (eine mögliche Verlängerung der Dauer des Sicherungsvorgangs).

Aaron Bertrand
quelle