Recovery

Transaktionsverwaltung

Transaktion und ACID Eigenschaften

Folge von Datenbank-Operationen mit den Eigenschaften

Atomicity

Atomare Ausführung (ohne logische Unterbrechung)

Consistency

Datenbank davor und danach in einem konsistenten Zustand sein muss (während der Operation aber nicht zwingend)

Isolation

Parallel laufende Transaktionen dürfen sich nicht gegenseitig beeinflussen.

Durability

Persistenz, auch nach Systemfehler oder Stromausfall (dann verliert man alles im Arbeitsspeicher)


Atomicity, Durability durch Recovery in DBMS.

Isolation durch Concurrency / Mehrbenutzersynchronisation in DBMS.

Operation

read(A,a)\small \tt read(A, a)a:=A\small \tt a := A → wobei a\small \tt a eine lokale Variable ist

write(A,a)\small \tt write(A, a)A:=a\small \tt A := a

Transaktionskontrolle

BOT\small \tt BOT Begin of transaction

commit\small \tt commit Von Arbeitsspeicher zu Festspeicher

abort/rollback\small \tt abort \color{grey}/ rollback Operationen aus Transaktion zurücksetzen aus Arbeitsspeicher

definesavepoint\small \tt define ~savepoint ermöglicht rollback bis savepoint (zusätzlich zu vollständigem)

rollbacktosavepoint\small \tt rollback~to~savepoint


Mögliche Abschlüsse einer Transaktion

  1. commit
  1. abort Aufruf
  1. Fehler → abort durch DBMS

Speicherverwaltung

Zweistufige Speicherhierarchie

Hauptspeicher / RAM schnell, aber flüchtig

Festplatte / Storage langsam, aber persistent, billiger

Speicherorganisation mit PagesPP

Einheit zum Verschieben von Datensätzen zwischen Speichern.

Auslagern RAM \small \rarr Storage

Einlagern RAM \small \larr Storage

Datensatz kann mehrere pages umfassen.

Annahme: nur ein Datensatz per Seite APA\small A \in P_A

Fixierung von pages

Während page access sind sie fixiert mit fixed-bit und dürfen nicht ausgelagert werden.

Auslagerungs-Strategie

Auslagern von Pages: RAM

Auslagern vor commit\small \tt commit

steal\small \text{steal} alle nicht fixierte pages dürfen ausgelagert werden.

¬steal\small \neg\text{steal} zusätzlich dürfen sie in keiner aktiven Transaktion verändert worden sein.

ansonsten muss man sie bei einem rollback auch in der storage überschreiben.

Auslagern nach commit\small \tt commit

force\small \text{force} erzwungenes Auslagern am Ende jeder Transaktion.

teuer, vor allem bei "hot-spots"

¬force\small \neg\text{force} pages am Transaktionsende mit dirty-bit markieren - auslagern optional.

bessere performance, wenn page beliebt - nicht immer neu einlagern.

Bei¬steal + force\small \neg\text{steal + force}muss Transaktion gesamte page sperren und nicht einzelne Datensätze.

Auslagern von Pages: Storage

Update-in-Place (direkte Strategie)

Jede page hat einen eindeutigen Platz im storage die überschrieben wird

Twin-block-verfahren (indirekte Strategie)

Jede page hat 2 Kopien im storage + bit dass sagt welche aktuell ist

aktuelle kopie wird überschrieben

Schattenspeicherkonzept (indirekte Strategie)

nur jede mindestens 1x veränderte hat 2 Kopien im storage

Auslagerungs-Strategie \small \Rarr Recovery-Art

Fehlerkategorien

  1. Fehler mit Verlust von Storage

    Nur mit backup / archiv wiederherstellbar

  1. Fehler mit Verlust von RAM

    Abgeschlossene Transaktionen (Winner) müssen rekonstruiert werden (globales redo)

    Abgebrochene Transaktionen (Loser) müssen zurückgesetzt werden (globales undo)

  1. Lokale Fehler in einer Transaktion

    Eigentlich ein Spezialfall vom oberen Fehler (lokales undo)

Es gilt:

forcekein redo\small \text{force} \rarr \text{kein redo}

¬forceredo\small \neg\text{force} \rarr \text{redo}

stealundo\small \text{steal} \rarr \text{undo}

¬stealkein undo\small \neg\text{steal} \rarr \text{kein undo}

Angenommene Systemkonfiguration:

Auslagerungsstrategie

stealundo\small \text{steal} \rarr \text{undo}

¬forceredo\small \neg\text{force} \rarr \text{redo}

Update-In-Place

Write-ahead-log WAL

Wird durch obere Konfiguration erfordert.

Alle Log-Einträge müssen vor commit\small \tt commit + Auslagerung der page ausgeschrieben werden.

Chronologische Reihenfolge der Logs muss erhalten bleiben.

Kleine Sperrgranulate

Zugriffsmatrix erweitert mit mehr Locks

Logging

LSN Logs

[LSN,TransaktionsID,PageID,Redo,Undo,PrevLSN]\tt [LSN,~TransaktionsID,~PageID, ~Redo,~Undo,~PrevLSN]

LSN Log Sequence Number: ID von log

TransaktionsID ID von Transaktion

PageID ID von page die von operation betroffen ist -ein log pro page

Redo

Undo

PrevLSN Pointer zur vorherigen Log-ID vondieserTransaktion

Logging in pages

Jede page erhält auch die LSN vom Log der jüngsten Operation die auf sie ausgeführt wurde.

Physische Protokollierung vs. Logische Protokollierung

Physisch

In der Praxis verwendet

Redo und Undo enthalten ganze Zustände "images": "after image", "before image"

Dienen auch als zusätzliche Redundanz.

Logisch

Operationen

Implementierung

Logs in Hauptspeicher als Ringbuffer (getrennt vom restlichen Speicherbereich).

Kontinuierliches Ausschreiben für gleichmäßige Lastverteilung.

Log-storage kann zusätzlich auch ein backup haben.

CLR Logs

Compensation log record

hLSN,TransaktionsID,PageID,Redo,PrevLSN,UndoNxtLSNi \tt \lang hLSN, ~TransaktionsID, ~PageID, ~Redo, ~PrevLSN, ~UndoNxtLSNi \rang 

LSN

TransaktionsID

PageID

Redo Hat keine undo Information

PrevLSN Älteste LSN von Transaktion welche hiermit rückgängig gemacht wurde

UndoNxtLSN LSN welche als nächstes rückgängig gemacht werden soll (bisBOT\small \tt BOT)

Recovery-Algorithmus

Winner müssen rekonstruiert werden

Loser müssen rückgängig gemacht werden

Ablauf

  1. Analyse

    Aus der Log Datei Loser (ohne commit\small \tt commit ) finden.

    Älteste LSN für alle Transaktionen finden.

  1. Redo: aller Transaktionen

    alle logs werden von Anfang an inkl. CLRs durchgegangen:

    rekonstruiert wenn log-LSN > page-LSN in storage

    In der Praxis hat man mit physischen logs die after-images vom ältesten log.

  1. Undo: aller Loser-Transaktionen

    zusätzlich CLR-logs machen (sollte System währenddessen nochmals abstürzen)

    Ablauf:

    In umgekehrter Reihenfolge alle Logs durchgehen.

    1. Älteste LSN der Transaktion zurücksetzen

      Bzw aus der Liste entfernen wenn die Operation BOT\small \tt BOT war.

    1. CLR erstellen mit

      CLR-PrevLSN := älteste LSN der Transaktion welche gerade zurückgesetzt wird (kann auch von einer CLR sein)

      CLR-UndoNxtLSN := entnommene Log-PrevLSN aus dem zurückgesetzten Log-Eintrag

    1. page-LSN auf CLR-LSN setzen

Lokales Zurücksetzen

localundo\small \tt local~undo , undountilsavepoint\small \tt undo~until~savepoint

Erhöhte Effizienz, indem Log-Einträge die noch im RAM sind benutzt werden können

Ablauf:

  1. Älteste LSN bestimmen von Transaktion
  1. Lokale Änderungen rückgängig machen

Checkpoints

checkpointsavepoint\tt checkpoint \neq savepoint

Savepoint

Zeitpunkt bis zu der man lokal zurücksetzt

Checkpoint / Sicherungspunkt

Zeitpunkt bei der man alle Transaktionen commited (damit die Analyse vom aller ersten log anfangen muss)

Checkpoint-Arten

bestimmt die älteste benötigte LSN

Transaktions-Konsistente checkpoints

Blockiert gesamtes System.

Kein redo/undo ab checkpoint notwendig.

Ablauf:

  1. Checkpoint anmelden
  1. Neue Transaktionen blockieren und warten lassen, alle anderen Transaktionen commiten

Aktions-Konsistente checkpoints

Es werden nur alle Schreiboperationen blockiert - Leseoperationen werden zugelassen.

Undo nötig bis zur kleinsten LSN MinLSN von allen Transaktionen die während checkpoint aktiv waren.

Ablauf:

  1. Checkpoint anmelden (strichlierte Linie)
  1. Neue Änderungsoperationen blockieren und warten lassen, alle pages ausschreiben.

Fuzzy checkpoints

Es gibt gleichmäßig verteilte checkpoints.

Alle pages mit dirty-bit=1 werden kontinuiertlich ausgeschrieben.

Gleichmäßige Lastverteilung.

Redo ab MinDirtyPageLSN

Wird immer mitgespeichert: älteste LSN an dirty-pages die noch nicht ausgeschrieben wurden.

Undo nötig bis zur kleinsten LSN MinLSN von allen Transaktionen die während checkpoint aktiv waren.

Hot-Spot s können lange nicht ausgeschrieben werden da sie fixiert sind → Deshalb wird ein counter geführt um pages die mehrmals bearbeitet wurden zum Ausschreiben zu zwingen.