3
Lokales 2-Phasen- Festschreibe-Protokoll Segment-Verwalter führt commit(T i ) 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(T i ,x,v). Störungen in dieser Phase bewirken Abbruch und Rücksetzen der Transaktion. Protokolliere Eintrag eot(T i ). 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.

Lokales 2-Phasen-Festschreibe- Protokoll Segment-Verwalter führt commit(T i ) in zwei Phasen aus: Phase 1: Sicherstellung der Wiederholbarkeit. –Für jedes

Embed Size (px)

Citation preview

Page 1: Lokales 2-Phasen-Festschreibe- Protokoll Segment-Verwalter führt commit(T i ) in zwei Phasen aus: Phase 1: Sicherstellung der Wiederholbarkeit. –Für jedes

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.

Page 2: Lokales 2-Phasen-Festschreibe- Protokoll Segment-Verwalter führt commit(T i ) in zwei Phasen aus: Phase 1: Sicherstellung der Wiederholbarkeit. –Für jedes

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).

Page 3: Lokales 2-Phasen-Festschreibe- Protokoll Segment-Verwalter führt commit(T i ) in zwei Phasen aus: Phase 1: Sicherstellung der Wiederholbarkeit. –Für jedes

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.