CHECKPOINT oder COMMIT schreibt auf Platte?

12

Angenommen, SQLServer2008R2 und höher mit Datenbanken im vollständigen Wiederherstellungsmodus.

Ich dachte immer :

  1. Wenn eine Transaktion festgeschrieben wird (COMMIT), wird die Transaktion in das Transaktionsprotokoll im RAM geschrieben.

  2. Wenn ein CHECKPOINT auftritt (nach einiger Zeit und / oder einigen Transaktionen und anderen Kriterien), werden die Transaktionen zwischen dem letzten CHECKPOINT und dem aktuellen auf die Festplatte geschrieben.

  3. Wenn ein Sicherungsprotokoll erstellt wird, werden die Daten in die MDF-Datei geschrieben.

Hab ich recht? Einige meiner Kollegen sagen, ich liege falsch und es ist schwierig, die richtige Antwort zu finden, selbst mit der BOL.

Vielen Dank!

madoxav
quelle

Antworten:

20

Leider gibt es in den Antworten eine Reihe von Fehlern in Bezug auf die Funktionsweise von COMMIT. Ich werde daher einen weiteren hinzufügen. Weitere Informationen und Grundlagen zu SQL Server 2000-E / A finden Sie unter Funktionsweise: Bob Dorrs SQL Server-E / A-Präsentation . So funktioniert es:

  • Alle Schreibvorgänge (Änderungen) für vollständig protokollierte Daten erfolgen in genau der folgenden Reihenfolge (siehe Grundlegendes zur Ausführung einer Abfrage durch SQL Server: Daten schreiben ):

    • Die Datenseite wird ausschließlich zwischengespeichert
    • Ein Protokolldatensatz, der die Änderung beschreibt, wird zur Protokollierung im Speicher hinzugefügt. Ein neuer Protokolldatensatz generiert eine neue LSN (siehe Was ist eine LSN: Protokollfolgenummer) .
    • Die Datenseite wird geändert (sowohl Datensatz als auch last_update_lsn auf der Seite). Diese Seite wurde geändert ('dirty').
    • Die Datenseitenverriegelung wird freigegeben
    • Durch das Update wird nichts direkt auf die Festplatte geschrieben
  • Ein COMMIT führt Folgendes aus

    • Fügt dem Protokoll im Speicher einen neuen Protokolldatensatz hinzu, der das COMMIT beschreibt
    • Alle Protokolldatensätze, die nicht auf die Festplatte geschrieben wurden (bis einschließlich der oben erzeugten), werden gelöscht (auf die Festplatte geschrieben).
    • Thread-Blöcke warten, bis das Betriebssystem den obigen Schreibvorgang als dauerhaft meldet (E / A abgeschlossen)
    • Die COMMIT-Anweisung (oder DML-Anweisung mit implizitem Commit) wird abgeschlossen
  • Ein CHECKPOINT hat die folgende (vereinfacht), siehe Wie Checkpoints Arbeit tun und was protokolliert wird :

    • Alle schmutzigen Seiten im Speicher werden auf die Festplatte geschrieben
      • Bevor Sie mit dem Schreiben auf die Festplatte beginnen, wird für jede fehlerhafte Seite das Protokoll bis einschließlich der LSN, die das letzte_Update_LSN auf dieser Seite ist, gelöscht (auf die Festplatte geschrieben). Beachten Sie, dass das Leeren von LSNs impliziert, dass alle vorherigen LSNs ebenfalls geleert werden. Für die meisten schmutzigen Seiten ist dies ein No-Op, da das eigene last_update wahrscheinlich bereits geleert wurde.
    • Der Protokolldatensatz, der den Prüfpunkt beschreibt, wird in das Protokoll geschrieben und gelöscht
    • Die Datenbank-Boot-Seite wird mit der LSN des oben generierten Datensatzes aktualisiert

Writes funktionieren anders für minimal protokollierte Operationen finden Operationen , die minimal protokolliert werden können . Die minimal protokollierten Operationen verhalten sich ungefähr wie folgt (vereinfacht):

  • Vor dem Einfügen von Zeilen in eine Seite als Teil eines minimal protokollierten Vorgangs wird ein Protokolldatensatz erstellt, der beschreibt, dass die Seite an minimal protokollierten Vorgängen beteiligt ist, und an das Protokoll angehängt (im Speicher).
  • Die minimal protokollierte Seite wird aktualisiert, da viele Beilagen darauf geschrieben werden, sofern sie passt. Es wird nichts protokolliert, nothign wird auf die Festplatte geschrieben.
  • Wenn ein minimal protokollierter Vorgang festgeschrieben wird, müssen vor dem Festschreiben alle Seiten, die an minimal protokollierten Vorgängen in dieser Transaktion teilgenommen haben, auf die Festplatte geschrieben werden. Erst wenn das Schreiben abgeschlossen ist, kann der COMMIT-Protokolldatensatz an das Protokoll (im Speicher) angehängt werden, und das Protokoll bis einschließlich dieses neu hinzugefügten Commit-Protokolldatensatzes wird auf die Festplatte geschrieben.
Remus Rusanu
quelle
8

Wenn eine Transaktion festgeschrieben wird (COMMIT), wird die Transaktion in das Transaktionsprotokoll im RAM geschrieben.

Eine Transaktion wird in das Transaktionsprotokoll geschrieben, bevor sogar die Seite oder die Daten geändert werden, wie durch die Abfrage angefordert. Dies wird als Write Ahead Logging (WAL) bezeichnet. Wenn SQL Server abstürzt, während eine Seite im Speicher aktualisiert wird, stellt WAL sicher, dass das DB-Modul das Transaktionsprotokoll lesen und die Transaktion zurücksetzen kann. Dies ist eine ACID-Eigenschaft eines RDBMS.

Wenn ein CHECKPOINT auftritt (nach einiger Zeit und / oder einigen Transaktionen und anderen Kriterien), werden die Transaktionen zwischen dem letzten CHECKPOINT und dem aktuellen auf die Festplatte geschrieben.

Ein Prüfpunkt löscht verschmutzte Seiten aus dem Puffer auf die Festplatte. Bei Tempdb verhält es sich etwas anders . Eine schmutzige Seite hat sich geändert, seit sie von der Festplatte gelesen wurde. Dieser Prüfpunktprozess erstellt eine Markierung im Transaktionsprotokoll bis zu dem Punkt, an dem die Transaktionen festgeschrieben wurden. Nach einem Fehler weiß die Wiederherstellung, dass alle Transaktionen bis zu dieser Marke festgeschrieben wurden. Sie können Checkpoint manuell mit einem TSQL-Befehl ausgeben.

Wenn ein Sicherungsprotokoll erstellt wird, werden die Daten in die MDF-Datei geschrieben.

Nein, wenn das Sicherungsprotokoll erstellt wird, kopiert SQL Server die Transaktionsprotokollinformationen aus der Datenbankprotokolldatei auf den Datenträger, auf dem Sie die Sicherung erstellen. Eine Sicherungsoperation liest Daten von der Festplatte und schreibt Daten auf die Festplatte.

Ich möchte, dass Sie unten Links lesen

Grundlegendes zu Protokollierung und Wiederherstellung in SQL Server Mark hat bereits darauf hingewiesen

SQL Server 2008-Handbuch für Interna und Fehlerbehebung

Transaktionsprotokollarchitektur und -verwaltung

Shanky
quelle
Ok, scheint klar zu sein. Nur um sicherzugehen: Wenn ein COMMIT auftritt, wird es in das Transaktionsprotokoll geschrieben. Meinen Sie Buffer oder Disk (LDF)?
Madoxav
Es wurde immer zuerst in den Protokollcache geschrieben und dann später in das Transaktionsprotokoll auf der Festplatte geschrieben. Ich habe einen Link zur Verwaltung des Transaktionsprotokolls hinzugefügt. Informationen zur Funktionsweise von WAL
Shanky
"Wenn SQL Server abstürzt, während eine Seite im Speicher aktualisiert wird, stellt WAL sicher, dass das DB-Modul das Transaktionsprotokoll lesen und die Transaktion zurücksetzen kann." Dies gilt nur, wenn die Transaktion nicht festgeschrieben ist. Wenn es bereits festgeschrieben ist, kann nichts zurückgesetzt werden. Die Informationen im Transaktionsprotokoll werden zum Aktualisieren der Datendateien verwendet. Auch wenn der Puffer vor dem Absturz nicht in die Datendatei geschrieben wurde.
miracle173
@Miracle: Ich denke, wenn eine Seite aktualisiert wird, die sich auf eine bestimmte Transaktion bezieht, wäre die Transaktion natürlich nicht festgeschrieben worden.
Shanky
4

Im Folgenden werden die Dinge für Sie geklärt:

Wenn eine Transaktion festgeschrieben wird (COMMIT), wird die Transaktion in das Transaktionsprotokoll im RAM geschrieben.

  • COMMIT (oder BEGIN) hat nichts mit dem Wiederherstellungsmodell zu tun. Es ist auf der Transaktionsebene. Eine Transaktion muss entweder vollständig abgeschlossen sein oder fehlschlagen ( ACID-Eigenschaften merken ). Im Wesentlichen markiert ein COMMIT das Ende einer erfolgreichen Transaktion (entweder implizit oder explizit). Eine COMMIT-Anweisung garantiert, dass alle Änderungen der Transaktion dauerhaft in der Datenbank gespeichert werden.
  • Um Änderungen vornehmen zu können, verwendet SQL Server WAL (Write-Ahead-Protokollierung). Dabei wird zunächst jede Änderung, die vorgenommen werden soll, im Protokoll beschrieben, bevor die Daten geändert werden.

Wenn ein CHECKPOINT auftritt (nach einiger Zeit und / oder einigen Transaktionen und anderen Kriterien), werden die Transaktionen zwischen dem letzten CHECKPOINT und dem aktuellen auf die Festplatte geschrieben.

Wenn ein Sicherungsprotokoll erstellt wird, werden die Daten in die MDF-Datei geschrieben.

Beziehen auf :

Kin Shah
quelle