Write-Ahead-Transaktionsprotokoll

In diesem Thema wird die Rolle des Write-Ahead-Transaktionsprotokolls beim Aufzeichnen von Datenänderungen auf den Datenträger beschrieben. Grundlegende Informationen zu Transaktionsprotokollen finden Sie unter Einführung in Transaktionsprotokolle.

SQL Server verwendet ein Write-Ahead-Protokoll, durch das sichergestellt wird, dass Datenänderungen erst dann auf den Datenträger geschrieben werden, nachdem der entsprechende Protokolldatensatz auf den Datenträger geschrieben wurde. Dies schützt die ACID-Eigenschaften einer Transaktion. Weitere Informationen zu den Transaktionen und ACID-Eigenschaften finden Sie unter Transaktionen (Datenbankmodul).

Um die Funktionsweise des Write-Ahead-Protokolls zu verstehen, müssen Sie zunächst verstehen, wie geänderte Daten auf den Datenträger geschrieben werden. SQL Server verwaltet einen Puffercache, in den Datenseiten gelesen werden, wenn Daten abgerufen werden müssen. Datenänderungen werden nicht direkt auf dem Datenträger vorgenommen; stattdessen erfolgt die Änderung an der Kopie der Seite im Puffercache. Die Änderungen werden erst dann auf den Datenträger geschrieben, wenn in der Datenbank ein Prüfpunkt auftritt, oder die Änderung muss auf den Datenträger geschrieben werden, damit der Puffer eine neue Seite aufnehmen kann. Wird eine geänderte Datenseite aus dem Puffercache auf den Datenträger geschrieben, wird dies als Leeren der Seite bezeichnet. Eine Seite, die im Cache geändert wurde, jedoch noch nicht auf den Datenträger geschrieben wurde, wird als modifizierte Seite bezeichnet.

Sobald eine Änderung an einer Seite im Puffer vorgenommen wird, wird ein Protokolldatensatz im Protokollcache erstellt, in dem die Änderung aufgezeichnet wird. Dieser Protokolldatensatz muss auf den Datenträger geschrieben werden, bevor die zugehörige modifizierte Seite vom Puffercache auf den Datenträger geleert wird. Wenn die modifizierte Seite vor dem Schreiben des Protokolldatensatzes geleert wird, führt dies zu einer Änderung auf dem Datenträger, für die kein Rollback ausgeführt werden kann, wenn der Server ausfällt, bevor der Protokolleintrag auf den Datenträger geschrieben wird. Durch die Programmlogik von SQL Server wird verhindert, dass eine modifizierte Seite geleert wird, bevor der zugehörige Protokolldatensatz geschrieben wurde. Protokolldatensätze werden auf den Datenträger geschrieben, wenn ein Commit für die Transaktionen ausgeführt wird.