Verkleinert das Sichern einer Datenbank die Größe des Transaktionsprotokolls?

8

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:

  1. Schneidet das Transaktionsprotokoll ab und
  2. 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!

Anthony
quelle

Antworten:

20

Die Transaktionsprotokolldatei (LDF) besteht aus vielen virtuellen Protokolldateien (VLFs). Stellen Sie sich das wie einen Schrank mit mehreren ausziehbaren Schubladen vor. Sie können einen großen oder einen kleinen Schrank wählen - aber es wird immer noch eine feste Größe mit nur unterschiedlicher Anzahl von Schubladen sein.

Während SQL Server funktioniert, werden Ihre Transaktionen in Schubladen (VLFs) abgelegt. Es beginnt an einem Ende Ihres Schranks, füllt die erste Schublade und geht zur nächsten Schublade über, wenn der Platz in dieser Schublade knapp wird.

Wenn Sie das Transaktionsprotokoll sichern, tun Sie Folgendes:

  • Suchen der ersten Schublade mit Transaktionen, die noch nicht gesichert wurden
  • Kopieren Sie diese Transaktionen an eine andere Stelle
  • Wenn diese Schublade nicht mehr aktiv verwendet wird (weil SQL Server zur nächsten Schublade übergegangen ist), markieren Sie diese Schublade als zur Wiederverwendung verfügbar (stellen Sie sich vor, Sie werfen den gesamten Inhalt weg).

Backups ändern nicht die Größe Ihres Schranks (Protokolldatei).

Brent Ozar
quelle
Hallo Brent, danke, dass du das für mich geklärt hast, danke! Grundsätzlich können Sie die Größe des "Schranks" nicht reduzieren, sondern nur die Schubladen leeren. Jetzt habe ich viele Posts von Leuten gelesen, die davon gesprochen haben, die Protokollgröße zu ändern. Würde sich das auf das Verkleinern der Größe der VLFs (Inhalt der Schublade) und das tatsächliche Verkleinern der Größe der LDF-Datei auf der Festplatte beziehen? Soweit ich jetzt verstehen kann, kann man den "Schrank" nicht abschütteln. Vielen Dank!
Anthony
@ Anthony yep, Sie können die Größe des Schranks reduzieren, indem Sie die Größe der Protokolldatei verkleinern, aber im Allgemeinen ist das eine sehr schlechte Idee (aus den Gründen, über die Sie gelesen haben.)
Brent Ozar
Ich würde die Aussage ablehnen, dass das Verkleinern eines TLogs schlecht ist. Tlog-Zugriff ist ziemlich seq. in der Natur. Beim Verkleinern des Protokolls ist keine Datenreorganisation erforderlich (wie bei Datendateien. Sie können nur Speicherplatz nach dem letzten aktiven Zeiger freigeben). Dies verursacht also überhaupt keine Fragmentierung.
Heiko Hatzfeld
1
@HeikoHatzfeld, das es wieder herauswächst, ist eine Blockierungsoperation und nutzt die sofortige Dateiinitialisierung nicht, daher ist es furchtbar langsam. Veto außer Kraft gesetzt. ;-)
Brent Ozar
Es ist nichts, was Sie regelmäßig tun, aber nur einmal, nachdem Sie bemerkt haben, dass Sie keinen korrekten Sicherungsplan erstellt haben ... Und der Wachstumsfaktor sollte eine konstante, vernünftige Größe sein. Unter diesen Bedingungen ist es erträglich.
Heiko Hatzfeld
6

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

  • Schauen Sie sich die TLog-Datei an
  • Bestimmen Sie, wann die letzte Transaktionsprotokollsicherung durchgeführt wurde (LSN: Log Sequence Number; für weitere Untersuchungen).
  • Legen Sie einen Prüfpunkt in der TLog-Datei fest ( Database Checkpoints (SQL Server) ).
  • Speichern Sie eine Sicherungskopie der TLog-Datei auf Festplatte / Band, während Sie die vorherige LSN und die zuletzt festgeschriebene LSN unmittelbar vor Abschluss der Sicherung verfolgen
  • Übertragen Sie alle Änderungen in die "Datenbank"
  • Markieren Sie die VLFs als wiederverwendbar

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 :

Außer wenn dies aus irgendeinem Grund verzögert wird, erfolgt das Abschneiden des Protokolls automatisch wie folgt: - Nach dem einfachen Wiederherstellungsmodell nach einem Prüfpunkt.

  • Unter dem vollständigen Wiederherstellungsmodell oder dem massenprotokollierten Wiederherstellungsmodell nach einer Protokollsicherung, wenn seit der vorherigen Sicherung ein Prüfpunkt aufgetreten ist. Weitere Informationen finden Sie unter "Protokollkürzung unter den vollständigen und massenprotokollierten Wiederherstellungsmodellen" weiter unten in diesem Thema.

Es gibt einige Fälle, in denen dies nicht der Fall ist:

Obwohl automatisch, kann das Abschneiden des Protokolls durch eine Vielzahl von Faktoren verzögert werden. Informationen darüber, was das Abschneiden von Protokollen verzögern kann, finden Sie unter Faktoren, die das Abschneiden von Protokollen verzögern können .

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

Mein Verständnis war, dass das Sichern einer Datenbank:

  • Schneidet das Transaktionsprotokoll ab und

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.

  • Verkleinert die Größe

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.

Was macht das Abschneiden von Protokollen tatsächlich mit der Protokolldatei (LDF)? Dieser Vorgang soll verhindern, dass die Festplatten voll werden.

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.

John aka hot2use
quelle
4

Während Brent Ozar Ihnen bereits erklärt hat, wie die Transaktionsprotokolldatei aussieht, werde ich mich auf Ihre bestimmten Fragen konzentrieren

Mein Verständnis war, dass das Sichern einer Datenbank:

  • Schneidet das Transaktionsprotokoll ab und
  • Verkleinert die Größe

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 shrinkfileBefehl verwenden

Was macht das Abschneiden von Protokollen tatsächlich mit der Protokolldatei (LDF)? Dieser Vorgang soll verhindern, dass die Festplatten voll werden.

Es 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

Shanky
quelle
Danke Shanky, danke für deine Erklärungen! Wenn Backups Protokolle abschneiden, wird die Größe der LDF-Datei nicht verringert, sondern nur "Platz" für andere Transaktionen geschaffen, die in dieser Protokolldatei verarbeitet werden. Bin ich richtig darin anzunehmen? Vielen Dank!
Anthony
Sie sind absolut richtig.
Shanky