Write-Ahead-Log und Wiederherstellung
Kurz: Beim Write-Ahead-Log (WAL) wird jede Änderung zuerst in ein Protokoll auf der Platte geschrieben, bevor die eigentlichen Daten geändert werden. Nach einem Absturz lässt sich der Zustand daraus wiederherstellen.
Genauer: Das Protokoll wird nur angehängt (sequentiell, schnell). Ein Commit gilt als dauerhaft, sobald der Log-Eintrag sicher (fsync) geschrieben ist. Die Datenseiten dürfen später und gesammelt auf die Platte, denn im Notfall spielt die Wiederherstellung das Protokoll erneut ab.
Im Detail
- Prinzip: Erst Log, dann Daten. Das stellt Atomarität und Dauerhaftigkeit (ACID) sicher.
- Checkpoint: Markiert, bis wohin alles auf der Platte steht, damit der Log gekürzt werden kann.
- Recovery (ARIES): Analyse, Redo (fehlende Änderungen nachholen), Undo (nicht abgeschlossene zurücknehmen).
- Replikation: Der WAL wird auch an Replikate gestreamt (z. B. PostgreSQL).
- Point-in-Time-Recovery: Zurück zu einem beliebigen Zeitpunkt durch Abspielen bis dorthin.
- Kosten:
fsyncist teuer. Gruppen-Commit bündelt mehrere Transaktionen.
Siehe auch: Datenbank-Transaktionen und ACID, LSM-Tree und Sorted String Tables