Lokales 2-Phasen-Festschreibe- Protokoll Segment-Verwalter führt commit(T i ) in zwei Phasen aus:...

Preview:

Citation preview

Lokales 2-Phasen-Festschreibe-Protokoll

• Segment-Verwalter führt commit(Ti) in zwei Phasen aus:• Phase 1: Sicherstellung der Wiederholbarkeit.

– Für jedes geänderte Datenelement x:• Bei Force-Auslagerungsstrategie: Rufe flush(x) auf.• Bei Noforce-Auslagerungsstrategie: Protokolliere Eintrag redo(Ti,x,v).

– Störungen in dieser Phase bewirken Abbruch und Rücksetzen der Transaktion.

– Protokolliere Eintrag eot(Ti). Ab diesem Zeitpunkt gilt die Transaktion als erfolgreich abgeschlossen und wird ggf. wiederholt.

• Phase 2: Abschluss der Transaktion.– Melde an Scheduler, dass commit erfolgreich war und Sperren

somit freigegeben werden können.

Rücksetzen bei abort (1)• Triviale Fälle:– Rücksetzen einer Lesetransaktion (nichts zu tun),– Rücksetzen einer Schreibtransaktion bei Nosteal-

Verdrängungsstrategie (da geänderte Seiten bislang nur im Puffer vorhanden sind, genügt es, sie aus dem Puffer zu entfernen).

– Rücksetzen einer Schreibtransaktion bei indirekter Einbringstrategie (da Verweise in der DB erst bei commit auf die geänderten Werte umgesetzt werden, müssen lediglich die eingebrachten geänderten Werte entfernt werden).

Rücksetzen bei abort (2)

• Rücksetzen einer Schreibtransaktion Ti bei Steal+Direkt-Strategie:– Für jeden Eintrag undo(Ti,x,v) im Protokoll:

• Lese x via fetch(x) in Puffer ein.

• Setze x auf v (möglich, da Ti noch exclusive-Sperre auf x hält).

• Bei Force-Auslagerungsstrategie: Rufe flush(x) auf.• Bei Noforce-Auslagerungsstrategie: Schreibe Eintrag redo(Ti,x,v) ins Protokoll.

– Schreibe Eintrag eot(Ti) ins Protokoll.

– Gebe alle Sperren von Ti frei.

Recommended