Prüfpunkte und der aktive Teil des Protokolls

Prüfpunkte leeren modifizierte Datenseiten aus dem Puffercache der aktuellen Datenbank auf dem Datenträger. Auf diese Weise wird der aktive Teil des Protokolls minimiert, der im Rahmen einer vollständigen Wiederherstellung einer Datenbank verarbeitet werden muss. Während einer vollständigen Wiederherstellung werden die folgenden Arten von Aktionen ausgeführt:

  • Für die Protokolldatensätze zu den Änderungen, die vor dem Systemausfall nicht auf den Datenträger geleert wurden, wird ein Rollforward durchgeführt.

  • Für alle Änderungen, die mit unvollständigen Transaktionen verbunden sind, z B. Transaktionen, für die kein COMMIT- oder ROLLBACK-Protokolldatensatz vorliegt, wird ein Rollback ausgeführt.

Prüfpunktvorgang

Ein Prüfpunkt führt die folgenden Vorgänge in der Datenbank aus:

  • Schreiben eines Datensatzes in die Protokolldatei, mit dem der Beginn des Prüfpunktes markiert wird.

  • Speichern der aufgezeichneten Informationen für den Prüfpunkt in einer Kette von Prüfpunkt-Protokolldatensätzen.

    Ein Teil der im Prüfpunkt aufgezeichneten Informationen besteht aus der LSN (Log Sequence Number oder Protokollfolgenummer) des ersten Protokolldatensatzes, der für eine erfolgreiche Durchführung eines datenbankweiten Rollbacks vorhanden sein muss. Diese LSN wird als Mindestwiederherstellungs-LSN (MinLSN) bezeichnet. Die MinLSN gibt den Mindestwert für Folgendes an:

    • LSN des Beginns des Prüfpunktes.

    • LSN des Beginns der ältesten aktiven Transaktion.

    • LSN des Beginns der ältesten Replikationstransaktion, die noch nicht an die Verteilungsdatenbank übermittelt wurde.

    Die Prüfpunktdatensätze enthalten auch eine Liste aller aktiven Transaktionen, die die Datenbank geändert haben.

  • Markieren des Speicherplatzes vor der MinLSN für die Wiederverwendung, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet.

  • Schreiben aller modifizierten Protokoll- und Datenseiten auf den Datenträger.

  • Schreiben eines Datensatzes in die Protokolldatei, mit dem das Ende des Prüfpunktes markiert wird.

  • Schreiben der LSN des Anfangs dieser Kette auf die Datenbank-Startseite.

Aktivitäten, die einen Prüfpunkt auslösen

Prüfpunkte treten in den folgenden Situationen auf:

  • Eine CHECKPOINT-Anweisung wird explizit ausgeführt. Ein Prüfpunkt tritt in der aktuellen Datenbank für die Verbindung auf.

  • Ein minimal protokollierter Vorgang wird in der Datenbank ausgeführt, z. B. wird ein Massenkopiervorgang mit einer Datenbank ausgeführt, die das massenprotokollierte Wiederherstellungsmodell verwendet.

  • Datenbankdateien wurden mit ALTER DATABASE hinzugefügt oder entfernt.

  • Eine Instanz von SQL Server wurde durch eine SHUTDOWN-Anweisung oder Beenden des Dienstes SQL Server (MSSQLSERVER) beendet. Aufgrund aller Aktionen wird ein Prüfpunkt in jede Datenbank der Instanz von SQL Server eingefügt.

  • Eine Instanz von SQL Server erzeugt regelmäßig automatische Prüfpunkte in jeder Datenbank, um die Zeitspanne zu verkürzen, die die Instanz zum Wiederherstellen der Datenbank benötigen würde.

  • Eine vollständige Datenbanksicherung wird ausgeführt.

  • Eine Aktivität wird ausgeführt, für die das Herunterfahren einer Datenbank erforderlich ist. Beispielsweise besitzt AUTO_CLOSE den Status ON, und die letzte Benutzerverbindung mit der Datenbank wird geschlossen, oder eine Änderung einer Datenbankoption wird vorgenommen, für die ein Neustart der Datenbank erforderlich wird.

Automatische Prüfpunkte

SQL Server Database Engine (Datenbankmodul) generiert automatische Prüfpunkte. Das Intervall zwischen automatischen Prüfpunkten wird anhand des belegten Speicherplatzes des Protokolls und der seit dem letzten Prüfpunkt verstrichenen Zeitspanne festgelegt. Werden nur wenige Änderungen in der Datenbank vorgenommen, kann das Zeitintervall zwischen den automatischen Prüfpunkten sehr unterschiedlich bzw. lang sein. Wenn eine Vielzahl von Daten geändert werden, können automatische Prüfpunkte ebenfalls häufig auftreten.

Verwenden Sie die Serverkonfigurationsoption recovery interval, um das Intervall zwischen automatischen Prüfpunkten für alle Datenbanken in einer Serverinstanz zu berechnen. Durch diese Option wird angegeben, wie viel Zeit Database Engine (Datenbankmodul) höchstens benötigen sollte, um eine Datenbank während des Systemstarts wiederherzustellen. Database Engine (Datenbankmodul) schätzt, wie viele Protokolldatensätze während einer Datenbankwiederherstellung in dem durch recovery interval festgelegten Intervall verarbeitet werden können.

Das Intervall zwischen automatischen Prüfpunkten hängt außerdem vom Wiederherstellungsmodell ab:

  • Wenn die Datenbank entweder das vollständige oder das massenprotokollierte Wiederherstellungsmodell verwendet, wird ein automatischer Prüfpunkt generiert, sobald die Anzahl der Protokolldatensätze die von Database Engine (Datenbankmodul) geschätzte Anzahl an Einträgen erreicht, die im durch die Option recovery interval angegebenen Zeitraum verarbeitet werden können.

  • Wenn die Datenbank das einfache Wiederherstellungsmodell verwendet, wird ein automatischer Prüfpunkt erzeugt, sobald die Anzahl der Protokolldatensätze dem jeweils kleineren der beiden folgenden Werte entspricht:

    • Das Protokoll ist zu 70 % gefüllt.

    • Die Anzahl der tatsächlichen Protokolldatensätze erreicht die von Database Engine (Datenbankmodul) geschätzte Anzahl an Einträgen, die im durch die Option recovery interval angegebenen Zeitraum verarbeitet werden können.

Inormationen zum Festlegen des Wiederherstellungsintervalls finden Sie unter Vorgehensweise: Festlegen des Wiederherstellungsintervalls (SQL Server Management Studio).

Automatische Prüfpunkte schneiden den ungenutzten Teil des Transaktionsprotokolls ab, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet. Das Protokoll wird jedoch nicht durch automatische Prüfpunkte abgeschnitten, wenn die Datenbank das Modell der vollständigen oder massenprotokollierten Wiederherstellung verwendet. Weitere Informationen finden Sie unter Abschneiden des Transaktionsprotokolls.

Die CHECKPOINT-Anweisung bietet jetzt ein optionales checkpoint_duration-Argument, das die gewünschte Zeitdauer (in Sekunden) bis zum Beenden des Prüfpunkts angibt. Weitere Informationen finden Sie unter CHECKPOINT (Transact-SQL).

Aktives Protokoll

Der Teil der Protokolldatei von der MinLSN bis zu dem zuletzt geschriebenen Protokolldatensatz wird aktiver Teil des Protokolls oder aktives Protokoll genannt. Dies ist der Teil des Protokolls, der für eine vollständige Wiederherstellung der Datenbank erforderlich ist. Vom aktiven Teil des Protokolls kann niemals ein Teil abgeschnitten werden. Alle Protokolldatensätze müssen aus den Teilen des Protokolls abgeschnitten werden, die vor der MinLSN liegen.

Bei der folgenden Abbildung handelt es sich um die vereinfachte Version des Endes eines Transaktionsprotokolls mit zwei aktiven Transaktionen. Die Prüfpunkteinträge wurden zu einem einzigen Eintrag zusammengefasst.

Ende eines Transaktionsprotokolls mit aktiven Transaktionen

LSN 148 ist der letzte Eintrag im Transaktionsprotokoll. Zum Zeitpunkt der Verarbeitung des Prüfpunktes, der bei LSN 147 aufgezeichnet wurde, wurde für Tran 1 ein Commit ausgeführt, und Tran 2 war die einzige aktive Transaktion. Hierdurch wird der erste Protokolldatensatz für Tran 2 zum ältesten Protokolleintrag für eine Transaktion, die zum Zeitpunkt des letzten Prüfpunktes aktiviert war. LSN 142, der Eintrag für den Transaktionsbeginn von Tran 2, wird somit zur MinLSN.

Lang andauernde Transaktionen

Das aktive Protokoll muss jeden Teil aller Transaktionen umfassen, für die noch kein Commit ausgeführt wurde. Eine Anwendung, die eine Transaktion startet und für diese Transaktion keinen Commit oder Rollback ausführt, verhindert, dass Database Engine (Datenbankmodul) die MinLSN heraufsetzt. Dies kann zu zwei Arten von Problemen führen:

  • Wenn das System heruntergefahren wird, nachdem die Transaktion zahlreiche Änderungen vorgenommen hat, für die kein Commit ausgeführt wurde, kann die Wiederherstellungsphase beim nachfolgenden Neustart erheblich länger dauern, als durch die Option recovery interval festgelegt wurde.

  • Das Protokoll kann sehr umfangreich werden, da das Protokoll nicht hinter der MinLSN abgeschnitten werden kann. Dies tritt auch dann auf, wenn die Datenbank das einfache Wiederherstellungsmodell verwendet, bei dem das Transaktionsprotokoll in der Regel bei jedem automatischen Prüfpunkt abgeschnitten wird.

Replikationstransaktionen

Der Protokolllese-Agent überwacht das Transaktionsprotokoll jeder für die Transaktionsreplikation konfigurierten Datenbank und kopiert die für die Replikation markierten Transaktionen aus dem Transaktionsprotokoll in die Verteilungsdatenbank. Das aktive Protokoll muss alle Transaktionen enthalten, die für die Replikation markiert wurden, die jedoch noch nicht an die Verteilungsdatenbank übermittelt wurden. Wenn diese Transaktionen nicht rechtzeitig repliziert werden, können sie die Kürzung des Protokolls verhindern. Weitere Informationen finden Sie unter Funktionsweise der Transaktionsreplikation.