So behalten Sie die Größe der SQL-Protokolldateien am besten bei

13

Ich bin ein bisschen wie ein neuer DBA und verwalte eine SQL Server 2012-Instanz, die ziemlich viel Aktivität aufweist. Ich arbeite im vollständigen Wiederherstellungsmodus, da wir eine Wiederherstellung zu einem bestimmten Zeitpunkt benötigen.

Im Moment mache ich jeden Tag um 5 Uhr morgens eine vollständige Sicherung der Datenbanken und Protokolle. Einige der Protokolldateien sind auf 300 GB angewachsen, und selbst nach dem Erstellen einer Sicherungskopie werden sie nicht kleiner. Ich kann sie dazu bringen, sich zu verkleinern, indem ich etwas Ähnliches wie:

BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);

Wenn ich die LSNs der Sicherungsdateien überprüfe, sehe ich Folgendes:

RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN:  15781000014686200001
SecondLSN: 15802000000665000001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN:  15802000000665000001
SecondLSN: 15805000000004100001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN:  15805000000004100001
SecondLSN: 15808000000004200001

Ich glaube nicht, dass ich meine Protokollkette durch Verkleinern der Protokolldateien unterbreche. Wenn ich das nachlese, glaube ich, dass ich meine Leistung beeinträchtige, weil diese geschrumpften Protokolldateien selbst neu wachsen müssen.

Fragen:

  1. Warum wird die Protokolldatei nach meinen Sicherungen nicht verkleinert? Liegt es daran, dass nicht festgeschriebene Transaktionen vorliegen?
  2. Zuerst dachte ich, ich sollte die Protokolldateien nach jeder Sicherung um 5:00 Uhr verkleinern. Nachdem ich gelesen habe, wie schlecht das für die Leistung ist, glaube ich jetzt, dass ich tagsüber alle paar Stunden regelmäßige Protokollsicherungen durchführen muss. Ist das korrekt?
  3. Meine normale vollständige Sicherung der Datenbank / Protokolle erfolgt täglich um 05:00 Uhr und dauert manchmal 3 Stunden. Wenn ich die Protokollsicherungen stündlich einplane, was passiert, wenn die Protokollsicherung mit der Sicherung um 05:00 Uhr kollidiert?
Elijah W. Gagne
quelle

Antworten:

10
  1. Warum wird die Protokolldatei nach meinen Sicherungen nicht verkleinert? Liegt es daran, dass nicht festgeschriebene Transaktionen vorliegen?

Die tatsächliche NTFS-Protokolldatei wird bei einer Transaktionsprotokollsicherung nicht "verkleinert", aber VLFs (Virtual Log Files) im Transaktionsprotokoll werden zur Wiederverwendung markiert (da sie jetzt gesichert und auf Datenträgern gespeichert werden), wodurch das Umgehen von ermöglicht wird Transaktionsprotokoll verwenden, um aufzutreten. Wenn Sie das Transaktionsprotokoll nicht oder nicht häufig genug sichern, sind keine VLFs verfügbar, und das Transaktionsprotokoll wächst (vorausgesetzt, das automatische Wachstum ist festgelegt), um zusätzliche Transaktionsprotokolleinträge aufzunehmen.

2. Zuerst dachte ich, ich sollte die Protokolldateien nach jeder Sicherung um 5:00 Uhr verkleinern. Nachdem ich nachgelesen habe, wie schlecht das für die Leistung ist, glaube ich jetzt, dass ich tagsüber alle paar Stunden regelmäßige Protokollsicherungen durchführen muss. Ist das korrekt?

Das routinemäßige und geplante Verkleinern von Dateien ist keine gute Idee. Nur wenn Sie dringend benötigten Speicherplatz zurückfordern müssen, sollten Sie eine DBCC SHINKFILE. Wenn Sie Ihr Transaktionsprotokoll kontinuierlich erweitern, können Sie auch andere Dinge wie die Wiederherstellung der Datenbank behindern. Bei zu vielen VLFs im Transaktionsprotokoll (ein häufiges Problem, wenn das Transaktionsprotokoll nur um ein kleines Speicherinkrement vergrößert wird) kann die Zeit für die Wiederherstellung der Datenbank länger als gewünscht sein.

3.Meine normale vollständige Sicherung der Datenbank / Protokolle erfolgt täglich um 05:00 Uhr und dauert manchmal 3 Stunden. Wenn ich die Protokollsicherungen stündlich einplane, was passiert, wenn die Protokollsicherung mit der Sicherung um 05:00 Uhr kollidiert?

Nichts wird passieren, das ist eine völlig legale Operation. Siehe die folgende Grafik von MSDN . Wenn ein schwarzer Punkt vorhanden ist, können diese beiden Vorgänge nicht gleichzeitig ausgeführt werden. Wie Sie sehen, sind eine Datenbanksicherung und ein Transaktionsprotokoll gleichzeitig zulässig.

Bildbeschreibung hier eingeben

Zum Mitnehmen sollten Sie Ihr Transaktionsprotokoll häufiger sichern. Das Wachstum von NTFS-Dateien ist nicht das einzige Problem, das auftreten kann, wenn Sie Ihr Transaktionsprotokoll nicht häufiger sichern. Wenn bei Ihnen ein Speicherfehler auftritt und Ihr Transaktionsprotokoll verloren geht, können Sie nur bis zum Zeitpunkt Ihrer letzten Transaktionsprotokollsicherung wiederherstellen. Wenn das Transaktionsprotokoll verloren geht, können Sie das Protokollende nicht sichern und bis zum Zeitpunkt des Fehlers wiederherstellen. In Ihrem Fall können möglicherweise Daten im Wert von 24 Stunden verloren gehen. Wenn Sie Ihre Transaktionsprotokolle jedoch alle 30 Minuten sichern, beträgt der maximale Datenverlust 30 Minuten. In diesem Fall können Sie, wenn Ihr Transaktionsprotokoll nicht mehr vorhanden ist und Sie über eine vollständige Sicherung und eine intakte Protokollkette verfügen, die letzte Protokollsicherung wiederherstellen.

TechNet-Dokumentation zum Abschneiden des Transaktionsprotokolls

Thomas Stringer
quelle
5

Das Hauptproblem besteht darin, dass Sie Ihre Protokolle einmal täglich sichern. Das Verhalten der Engine besteht darin, dass Protokolldatensätze (belegter Speicherplatz) in einer Protokolldatei erst nach einer erfolgreichen Protokollsicherung entfernt werden. Dieser Platz wird bei einem Checkpoint zurückgefordert auftritt. Befindet sich Ihre Datenbank jedoch in der vollständigen / massenprotokollierten Wiederherstellung, werden Protokolldatensätze nur dann entfernt, wenn sie erfolgreich gesichert wurden.

Protokollsicherungen sind für die Verwendung in Verbindung mit vollständigen Sicherungen vorgesehen und sollten in regelmäßigen Abständen zwischen vollständigen Sicherungen ausgeführt werden. Dieses Intervall kann ein beliebiger Zeitraum sein, obwohl ich normalerweise alle 15 Minuten Protokollsicherungen durchführe. Ihr Intervall ist abhängig von Ihrem Wiederherstellungsziel (Recovery Point Objective, RPO) und davon, wie viele Daten Sie im Falle einer Wiederherstellung verlieren können.

Wenn Sie regelmäßige Protokollsicherungen durchführen, sollten Sie keine regelmäßigen Dateiverkürzungen durchführen müssen, da Sie den Protokolldateibereich verwalten, bevor er vergrößert werden muss.

Mike Fal
quelle
-1

Ich habe das gleiche Problem wie Sie zuvor. Meine Protokolldatei wird immer größer, stattdessen verwende ich jede Nacht eine vollständige Datenbanksicherung. Also hier ist meine Lösung:

  1. Sichern Sie Ihre aktuelle Protokolldatei.

  2. Stellen Sie Ihre Datenbank auf Einfache Wiederherstellung ein

    • Bei vollständiger Wiederherstellung -> Protokolldatei löscht keine festgeschriebene Transaktion, es werden nur Ihre Daten neu angeordnet -> Shink-Datei hat keine großen Auswirkungen -> und umgekehrt bei einfacher Wiederherstellung.
  3. Verkleinere deine Logdatei auf 1 MB oder weniger (es liegt an dir)

  4. Setzen Sie Ihre Datenbank wieder auf Vollständige Wiederherstellung.

Hoffe es hilft

Phong Tran

Phong Tran
quelle