Physische Architektur des Transaktionsprotokolls

Das Transaktionsprotokoll wird verwendet, um die Integrität der Daten in einer Datenbank zu gewährleisten und um ggf. Daten wiederherzustellen. Die Themen in diesem Abschnitt informieren Sie über die physische Architektur des Transaktionsprotokolls. Eine gute Kenntnis dieser physischen Architektur kann Ihnen dabei helfen, Transaktionsprotokolle effizient zu verwalten.

Das Transaktionsprotokoll in einer Datenbank erstreckt sich über eine oder mehrere physische Dateien. Konzeptionell ist die Protokolldatei eine Folge von Protokolldatensätzen. Physisch wird die Folge von Protokolldatensätzen effizient in dem Satz physischer Dateien gespeichert, die das Transaktionsprotokoll implementieren.

SQL Server Database Engine (Datenbankmodul) teilt jede physische Protokolldatei intern in mehrere virtuelle Protokolldateien auf. Virtuelle Protokolldateien haben keine feste Größe, und es gibt keine feststehende Anzahl virtueller Protokolldateien für eine physische Protokolldatei. Database Engine (Datenbankmodul) wählt die Größe der virtuellen Protokolldateien dynamisch beim Erstellen oder Erweitern von Protokolldateien aus. Database Engine (Datenbankmodul) versucht, immer nur eine kleine Anzahl virtueller Dateien aufrechtzuerhalten. Welche Größe die virtuellen Dateien haben, nachdem eine Protokolldatei erweitert wurde, hängt von der zusammengenommenen Größe des vorhandenen Protokolls und dem Umfang der Dateierweiterung ab. Die Größe oder Anzahl der virtuellen Protokolldateien kann nicht von Administratoren konfiguriert oder festgelegt werden.

Virtuelle Protokolldateien beeinträchtigen die Systemleistung nur dann, wenn die Definition der Protokolldateien kleine Werte für size und growth_increment enthält. Wenn diese Protokolldateien durch viele kleine Schritte auf eine beträchtliche Größe anwachsen, enthalten sie eine große Anzahl virtueller Protokolldateien. Hierdurch werden möglicherweise das Starten der Datenbank sowie Protokollsicherungs- und -wiederherstellungsvorgänge verlangsamt. Es wird empfohlen, den Protokolldateien für size einen Wert zuzuweisen, der nahezu der endgültigen erforderlichen Größe entspricht, und auch einen relativ hohen Wert für growth_increment festzulegen.

Das Transaktionsprotokoll ist eine umbrechende Protokolldatei. Nehmen Sie beispielsweise an, eine Datenbank verfügt über eine physische Protokolldatei, die in vier virtuelle Protokolldateien unterteilt ist. Wenn die Datenbank erstellt wird, beginnt die logische Protokolldatei am Anfang der ersten physischen Protokolldatei. Neue Protokolldatensätze werden am Ende des logischen Protokolls hinzugefügt, das in Richtung des Endes des physischen Protokolls erweitert wird. Beim Abschneiden eines Protokolls werden alle virtuellen Protokolle freigegeben, deren Datensätze sich ohne Ausnahme vor der Mindestwiederherstellungs-Protokollfolgenummer (Minimum Recovery Log Sequence Number, MinLSN) befinden. Die MinLSN ist die Protokollfolgenummer des ältesten Protokolldatensatzes, der für einen erfolgreichen Rollback der gesamten Datenbank benötigt wird. Das Transaktionsprotokoll in der Beispieldatenbank würde in etwa so aussehen wie das Protokoll in der folgenden Abbildung.

Protokolldatei unterteilt in vier virtuelle Protokolldateien

Wenn das Ende des logischen Protokolls das Ende der physischen Protokolldatei erreicht, erfolgt ein Umbruch, und neue Protokolldatensätze werden nun wieder am Anfang der physischen Protokolldatei eingefügt.

Protokolleinträge werden wieder am Anfang der Protokolldatei eingefügt

Solange das Ende des logischen Protokolls nicht den Anfang des logischen Protokolls erreicht, wird dieser Kreislauf endlos wiederholt. Wenn die alten Protokolldatensätze häufig genug abgeschnitten werden, um ausreichend Platz für alle neuen Protokolldatensätze freizugeben, die bis zum nächsten Prüfpunkt erstellt werden, wird das Protokoll nie vollständig aufgefüllt. Wenn das Ende des logischen Protokolls jedoch den Anfang des logischen Protokolls erreicht, wird eine der beiden folgenden Aktionen eingeleitet:

  • Wenn die FILEGROWTH-Einstellung für das Protokoll aktiviert ist und auf dem Datenträger noch Speicherplatz verfügbar ist, wird die Datei um den Wert vergrößert, der in growth_increment angegeben ist, und neue Protokolldatensätze werden dieser Erweiterung hinzugefügt. Weitere Informationen zur FILEGROWTH-Einstellung finden Sie unter ALTER DATABASE (Transact-SQL).

  • Wenn die FILEGROWTH-Einstellung nicht aktiviert ist oder der Datenträger, auf dem sich die Protokolldatei befindet, über weniger freien Speicherplatz verfügt als in growth_increment angegeben, wird der Fehler 9002 generiert.

Wenn das Protokoll mehrere physische Protokolldateien enthält, durchläuft das logische Protokoll alle physischen Protokolldateien, bevor es umbricht und neue Einträge am Anfang der ersten physischen Protokolldatei einfügt.