7.2 Commit-Behandlung

7.2.3 Hierarchische 2PC-Protokolle

Hierarchische Commit-Protokolle stellen eine Verallgemeinerung des Basisprotokolls für hierarchische Aufrufstrukturen dar, die durch Transaktionsbäume beschrieben werden können (Kap. 7.1). Dabei kommuniziert jeder Agent lediglich mit seinem direkten Vorgänger und den direkten Nachfolgern im Baum. Hierarchische Commit-Protokolle können daher auch in Umgebungen eingesetzt werden, in denen ein Agent nicht alle an einer globalen Transaktion beteiligten Knoten kennt, sondern nur die direkt mit ihm in Kontakt stehenden.

Wie Abb. 7-6 zeigt, kann das Basisprotokoll relativ einfach auf die hierarchische Struktur erweitert werden. Für den Wurzelknoten sowie die Blattknoten kommt das Basisprotokoll unverändert zur Anwendung. Eine neue Rolle nehmen dagegen die Zwischenknoten ein, da sie sowohl als Koordinator (gegenüber ihren Nachfolger-Agenten im Transaktionsbaum) als auch als untergeordneter Agent (gegenüber ihrem Vorgänger im Baum) fungieren. Wenn ein Zwischenknoten eine PREPARE-Nachricht erhält, wird diese Aufforderung an alle seine Nachfolger weiterpropagiert. Nach Eingang der lokalen Commit-Entscheidungen der Nachfolger, trifft der Zwischenknoten die Commit-Entscheidung für den gesamten Teilbaum, dessen Koordinator er ist, protokolliert sie in seine Log-Datei und gibt sie an seinen Vorgänger weiter. Im Fehler-Fall (Abort) kann der Zwischenknoten bereits zu diesem Zeitpunkt alle Nachfolger, die mit READY gestimmt haben, vom Scheitern der Transaktion informieren. In der zweiten Commit-Phase nehmen die Zwischenknoten das Commit-Ergebnis der gesamten Transaktion von ihrem Vorgänger entgegen und protokollieren es. Danach wird das Ergebnis an die Nachfolger weitergeleitet und der Erhalt des Ergebnisses an den Vorgänger quittiert. Zwischenknoten schreiben ebenfalls einen Ende-Satz, nachdem sie alle Quittierungen ihrer Nachfolger erhalten haben.

Abb. 7-6: Nachrichtenfluß bei hierarchischen 2PC-Protokollen

Die Allgemeinheit und Flexibilität hierarchischer Commit-Protokolle geht jedoch auf Kosten einer geringeren Leistungsfähigkeit. Denn es wird dieselbe Nachrichtenanzahl wie im Basisprotokoll benötigt, allerdings führt die geringere Parallelisierung zu einer längeren Bearbeitungsdauer, die proportional zur Höhe des Baumes zunimmt. Weiterhin fällt für Zwischenknoten im Vergleich zu Blattknoten ein zusätzlicher (asynchroner) Log-Vorgang für den Ende-Satz an.

Diese Nachteile gelten auch für optimierte hierachische Commit-Protokolle, wie dem Presumed-Commit- oder dem Presumed-Abort-Ansatz [MLO86]. Eine große Bedeutung hat dabei vor allem das Presumed-Abort-Protokoll erlangt, daß in mehreren Produkten und auch Standards (ISO/OSI TP, X/Open DTP) verwendet wird [SBCM93]. Der Name "Presumed Abort" rührt daher, daß wenn in der Log-Datei des Koordinators keine Log-Sätze bezüglich des Commit-Zustandes einer globalen Transaktion vorliegen, auf Abort entschieden wird (während der Crash-Recovery oder bei einer Anfrage zum Transaktionsausgang). Ein Vorteil dieser Festlegung ist, daß der Koordinator den Abort-Satz nicht mehr synchron schreiben muß, sondern lediglich asynchron. Weiterhin können für eine gescheiterte Transaktionen die ACK-Nachrichten eingespart werden, und das Schreiben von Ende-Sätzen beim Koordinator und in den Zwischenknoten entfällt ebenfalls. Für erfolgreiche globale Transaktionen ergeben sich allerdings keine Einsparungen. Besonders effektiv ist eine weitere Optimierung für lesende Sub-Transaktionen, die im Presumed-Abort-Protokoll vorgenommen wird. Da diese Optimierung jedoch für andere Commit-Protokolle auch nutzbar ist, beschreiben wir sie im folgenden Kapitel (Kap. 8 ).