Ich versuche, etwas Wissen über SQL-Datenbanken zu sammeln, und habe einige Fragen zur Transaktionsprotokolldatei (LDF).
Zunächst müssen Sie beim Erstellen einer Datenbank eine anfängliche Dateigröße sowohl für die Datenbank als auch für die Protokolldatei definieren. Soweit ich sehen kann, haben die Dateien nach dem Erstellen auf der Festplatte die angegebene Größe, unabhängig davon, ob sich tatsächliche Daten in der Datenbank befinden oder ob Transaktionen (Protokolle) stattgefunden haben.
Mein Verständnis war, dass das Sichern einer Datenbank:
- Schneidet das Transaktionsprotokoll ab und
- Verkleinert die Größe
der LDF-Datei auf der Festplatte durch "Leeren" der darin enthaltenen Protokolle.
Jetzt scheint es, dass ich das nicht richtig verstanden habe, weil die Protokolldatei eine feste Größe zu haben scheint. Meine eigentliche Frage lautet wie folgt:
Was macht das Abschneiden von Protokollen tatsächlich mit der Protokolldatei (LDF)? Dieser Vorgang soll verhindern, dass die Festplatten voll werden.
Bitte korrigieren Sie mich, wenn ich einige Konzepte nicht richtig verstehe.
Vielen Dank!
quelle
Matching und Mischen
Das Sichern des Transaktionsprotokolls ist nicht dasselbe wie das Abschneiden der Transaktionsprotokolldatei, und das Abschneiden der Transaktionsprotokolldatei ist nicht dasselbe wie das Verkleinern der Transaktionsprotokolldatei. Oh ja, und das Sichern der Transaktionsprotokolldatei muss keine Kürzung auslösen. Abhängig von der aktuellen Auslastung kann das Datenbankmodul entscheiden, einen Prüfpunkt festzulegen, aber mit dem Abschneiden etwas zu warten.
Erklären
In der Transaktionsprotokolldatei speichert das Datenbankmodul Änderungen an den Daten in einer Datenbank, unabhängig davon, ob sich die Datenbank im SIMPLE-Wiederherstellungsmodell oder im FULL-Wiederherstellungsmodell befindet. (Wichtig)
Jetzt ist die Transaktionsprotokolldatei der Datenbank nicht nur ein fortlaufender Speichercontainer, sondern eine Sammlung von virtuellen Protokolldateien (VLFs), die in einer sequentiellen Reihenfolge in der Transaktionsprotokolldatei (TLog) erstellt werden. Die Größe der VLFs hängt davon ab, welche Version von SQL Server Sie gerade verwenden und welche Anfangsgröße Sie beim Erstellen der TLog-Datei ausgewählt haben und welche Größe Sie (falls vorhanden) für die Einstellung für das automatische Wachstum von ausgewählt haben TLog-Datei.
Referenzen:
- Wichtige Änderung des VLF-Erstellungsalgorithmus in SQL Server 2014 (SQLSkills.com)
- Anfängliche VLF-Sequenznummern und Standardgröße der Protokolldatei (SQLSkills.com)
- Innerhalb der Storage Engine: Weitere Informationen zur Zirkularität des Protokolls (SQLSkills). com)
... und vielleicht in umgekehrter Reihenfolge
Wenn Daten in der Datenbank geändert werden, schreibt das Datenbankmodul diese Änderungen in das TLog der entsprechenden Datenbank, um die Transaktionskonsistenz aufrechtzuerhalten. Dies wird auch als ACID bezeichnet - Atomizität, Konsistenz, Isolierung, Haltbarkeit . Die tatsächlichen Übergänge dieser Änderungen werden in den VLFs des TLog (Datei) gespeichert. Wenn eine VLF voll ist, werden die neuesten Transaktionen in der nächsten verfügbaren VLF in sequentieller Reihenfolge gespeichert.
Ausnahmen
Wenn jedoch das Ende der TLog-Datei erreicht ist, werden die Änderungen in der ersten VLF am Anfang der TLog-Datei gespeichert. (erklärt in Inside the Storage Engine: Mehr zur Zirkularität des Protokolls )
Wenn keine verfügbaren VLFs zum Speichern neuer Transaktionen frei sind und die Einstellung für das automatische Wachstum konfiguriert ist, vergrößert das Datenbankmodul die TLog-Datei um den definierten Betrag und erstellt abhängig von der in den Einstellungen für das automatische Wachstum und der Formel definierten Größe zusätzliche VLFs Erläuterungen unter Wichtige Änderung des VLF-Erstellungsalgorithmus in SQL Server 2014 . Weitere Transaktionen können dann in der nächsten VLF in der TLog-Datei gespeichert werden.
Sichern der TLog-Datei
Wenn Sie eine Sicherung der TLog-Datei auslösen, teilen Sie dies dem Datenbankmodul lediglich mit
Bisher wurde in der TLog-Datei kein Speicherplatz freigegeben, den die Datenbank-Engine wiederverwenden kann ...
Automatisches Abschneiden der TLog-Datei
... aber wenn das Datenbankmodul einige Zyklen übrig hat und nicht unter starkem Druck steht, wird es gelegentlich die TLog-Datei überprüfen, den Checkpoint beachten und die VLFs zur Wiederverwendung freigeben. Der Speicherplatz in der TLog-Datei wird weiterhin von den VLFs verwendet (gleiche Größe, gleicher Speicherort), sie können jedoch wiederverwendet werden.
Dies ist in Transaktionsprotokollabschneidung dokumentiert :
Es gibt einige Fälle, in denen dies nicht der Fall ist:
Visualisieren der Protokollkürzung
Das Abschneiden von Protokollen kann beobachtet werden, wenn Sie die TLog-Größe mithilfe von SQL-Anweisungen oder des Datenbankbereichsberichts in der SSMS-Benutzeroberfläche abfragen. Möglicherweise stellen Sie fest, dass der verwendete Speicherplatz in der TLog-Datei möglicherweise nur 1% der verfügbaren TLog-Dateigröße beträgt.
Schrumpfen oder nicht schrumpfen
Die allgemeine Empfehlung lautet , die TLog-Datei nicht zu verkleinern, da sie aus einem bestimmten Grund gewachsen ist und möglicherweise wieder auf die Größe anwächst, die sie einmal hatte. Aber das ist eine Geschichte für einen anderen Beitrag. Es gibt einige gute Gründe, zum Beispiel, wenn Sie die Größe der VLFs in Ihrer TLog-Datei neu erstellen.
Beantwortung Ihrer Fragen
Inline direkt unter Ihren Annahmen und Fragen
Dies ist eine falsche Annahme. Das Sichern Ihrer Datenbank (FULL, DIFFERENTIAL) hat nichts mit den TLog-Dateien zu tun. Eine vollständige Sicherung erstellt einen konsistenten Status Ihrer Datenbank zusammen mit den festgeschriebenen Transaktionen aus der TLog-Datei. Eine DIFF-Sicherung erstellt einen konsistenten Status aller früheren TLog-Sicherungen seit der letzten vollständigen Sicherung Ihrer Datenbank.
Bei einer TLOG-Sicherung wird jedoch eine Sicherung der festgeschriebenen Transaktionen aus der TLog-Datei erstellt, ein Prüfpunkt festgelegt und möglicherweise (wenn nicht unter hoher Last) die VLFs zur Wiederverwendung freigegeben.
Nein, wenn man die FULL- und DIFF-Backups berücksichtigt. Nein, wenn Sie die TLOG-Sicherungen in Betracht ziehen, aber die VLFs in der TLog-Datei werden freigegeben, wenn das Datenbankmodul etwas Zeit hat.
Durch das Abschneiden der Protokolle können die VLFs wiederverwendet werden. Das ist alles.
Dieser Prozess kann den Vorteil haben , dass die TLOG - Datei von wachsenden verhindern IF Auto-Wachstum Einstellungen festgelegt wurden.
Wenn keine Einstellungen für das automatische Wachstum festgelegt wurden , weil Ihr Anforderungs-Engineering-Prozess festgestellt hat, dass die TLog-Datei eine feste Größe hat, wird der TLog im schlimmsten Fall voll, da keine TLog-Sicherung erfolgt und daher keine VLFs freigegeben werden. Der TLog kann nicht wachsen und die VLFs werden nicht freigegeben, damit weitere Transaktionen in die TLog-Datei (oder intern in VLFs) geschrieben werden können.
quelle
Während Brent Ozar Ihnen bereits erklärt hat, wie die Transaktionsprotokolldatei aussieht, werde ich mich auf Ihre bestimmten Fragen konzentrieren
Die vollständige Sicherung bewirkt nichts mit Transaktionsprotokollen in einem Wiederherstellungsmodell. Wenn Sie im vollständigen Wiederherstellungsmodell eine Transaktionsprotokollsicherung durchführen, wird das Protokoll abgeschnitten. Bitte beachten Sie, dass, wenn eine lange laufende Transaktion noch vorhanden ist, die die VLFs enthält, oder gemäß der Erklärung von Brent die Schubladen noch benötigt werden. Andere Transaktionen können die Schublade nicht wiederverwenden oder werden technisch nicht abgeschnitten, damit sie wiederverwendet werden können.
Außerdem wird das Transaktionsprotokoll nicht verkleinert. Zum Verkleinern der Protokolle müssen Sie den
dbcc shrinkfile
Befehl verwendenEs macht die Protokolldatei wiederverwendbar, so dass andere Transaktionen sie verwenden können, oder gemäß Brents Analogie kann jemand anderes die Schubladen verwenden, um dort Sachen aufzubewahren.
Nachdem Sie die Antwort durchgearbeitet haben, empfehle ich Ihnen dringend, das Transaktionsprotokoll auf SQLSKILLS.com zu lesen
quelle