🏠 » Lexikon » Z » Zwei-Phasen-Sperrprotokoll

Zwei-Phasen-Sperrprotokoll

Das 2-Phasen-Sperrprotokoll ist das gängigste Sperrverfahren und wird in zwei Varianten unterschieden. Die Gemeinsamkeit besteht darin, dass eine Transaktion nach bestimmten Regeln, sogenannten Protokollen abgearbeitet wird.

Die zwei Phasen des Protokolls bestehen aus einer Sperrphase, in der alle benötigten Objekte für die Transaktion gesperrt werden. In der zweiten Phase werden die Sperren wieder freigegeben, sodass die Objekte von anderen Transaktionen genutzt werden können.

Mit einer Sperre werden Teile einer Datenbank (z. B. Datensatz, Tabelle) für eine Transaktion „reserviert“, diese hat dadurch ggf. ein exklusives Schreib- und Leserecht. Bei einer exklusiven Schreibsperre  ist es anderen Transaktionen nicht erlaubt das Objekt zu nutzen (auch nicht lesend). Besteht eine Transaktion nur aus einer Lesesperre, dürfen andere Transaktionen ebenfalls lesend auf die Datenbankobjekte zugreifen.

2-Phasen-Sperrprotokoll | Datenbank Lexikon

Da es auch hier zu Konflikten geben kann, wenn eine Sperre zu früh freigegeben wird und die Transaktion noch nicht erfolgreich abgeschlossen wurde, kann es zur Situation in der unten gezeigten Abbildung kommen. Hier haben weitere Transaktionen auf bereits veränderte Objekte von T1 zugegriffen.

Da T1 abbricht, werden alle Änderungen zurückgenommen. Zusätzlich müssen auch T2 und T3 rückgängig gemacht werden. Hier besteht bei T3 das zusätzliche Problem, dass die Transaktion bereits abgeschlossen ist. Es entsteht ein sogenannter fortgepflanzter Rollback.

Fortgepflanzter Rollback | Datenbank Lexikon

Um dies zu verhindern, kann das Zwei-Phasen-Sperrprotokoll noch verschärft werden.

Strikte Zweiphasigkeit                                            

Durch eine strikte Zweiphasigkeit werden alle Sperren erst am Ende einer Transaktion freigegeben. Dadurch kann eine Transaktion ohne Auswirkungen auf andere Transaktionen abgebrochen werden. Ein fortgepflanzter Rollback kann nicht eintreten.

Preclaiming

Mit dem Preclaiming werden zu Beginn einer Transaktion alle Objekte gesperrt. Dadurch werden Deadlocks oder Abbrüche durch andere Transaktionen verhindert. Die Schwierigkeit besteht jedoch darin, dass es sehr aufwändig ist, bereits vor einer Transaktion alle benötigten Objekte zu kennen und zu sperren. Preclaiming ist daher für die Praxis nicht relevant.