7 Transaktionsverwaltung in Verteilten Datenbanksystemen
Zur Wahrung der Transaktions-Atomarität in Verteilten DBS müssen sich alle an einer globalen Transaktion T beteiligten Knoten auf ein gemeinsames Commit-Ergebnis einigen. T muß also entweder an allen Knoten abgebrochen werden (Abort) oder an allen Knoten erfolgreich zu Ende kommen (Commit). Um dies zu erreichen, ist ein verteiltes Commit-Protokoll erforderlich. Eine Grundforderung an ein geeignetes Protokoll ist die Korrektheit, d.h., es muß die Alles-oder-Nichts-Eigenschaft sowie die Dauerhaftigkeit von Transaktionen auch im Fehlerfall gewährleisten. Unter Leistungsgesichtspunkten sollten dabei möglichst wenige Nachrichten und Schreibvorgänge auf die Log-Datei benötigt werden, da beide Faktoren die Antwortzeiten verlängern und Overhead einführen. Eine weitere Forderung ist eine hohe Robustheit des Protokolls gegenüber Fehlern, um z.B. die Wahrscheinlichkeit einer "Blockierung" (s.u.) möglichst gering zu halten. Damit im Zusammenhang steht die Forderung, daß jeder der beteiligten Rechner möglichst lange das Recht haben sollte, eine globale Transaktion von sich aus abzubrechen ("unilateral abort"). Die Unterstützung einer hohen Robustheit erfordert jedoch i.d.R. zusätzliche Nachrichten und E/A-Vorgänge und geht damit auf Kosten der Leistungsfähigkeit. Da der Fehlerfall (hoffentlich) selten eintrifft, sollte daher der Optimierung des Leistungsverhaltens im Normalbetrieb Vorrang eingeräumt werden.
Bei den vorzustellenden Commit-Protokollen nehmen wir generell an, daß an jedem Knoten ein Transaktions-Manager (TM) existiert, der für die Transaktionsverwaltung der lokal ausgeführten (Teil-)Transaktionen verantwortlich ist und der mit den Transaktions-Managern der anderen Knoten im Rahmen des Commit-Protokolls kooperiert. Insbesondere verwaltet jeder TM eine lokale Log-Datei, in der sämtliche Commit-Entscheidungen protokolliert werden. Für Verteilte Datenbanksysteme kann der Transaktions-Manager als Teil der an jedem Knoten laufenden DBVS-Instanz aufgefaßt werden, so daß für Commit-Entscheidungen sowie DB-Änderungen dieselbe Log-Datei verwendet werden kann[25].
In verteilten Commit-Protokollen kommt dem Transaktions-Manager des Heimatknotens einer Transaktion die Sonderrolle des Commit-Koordinators zu. Aufgabe des Koordinators ist die Ermittlung des globalen Commit-Ergebnisses (Commit oder Abort) und dessen Mitteilung an die an der Transaktionsausführung beteiligten Rechner. Die Transaktions-Manager der Rechner, an denen eine Sub-Transaktion ausgeführt wurde, wollen wir als Agenten bezeichnen.
Wir stellen im folgenden zunächst als Basismodell ein Zwei-Phasen-Commit-(2PC)-Protokoll vor, das die beiden eingangs erwähnten Phasen der Commit-Behandlung verteilt realisiert und auf der zentralisierten Kommunikationsstruktur basiert. Danach werden lineare und hierarchische 2PC-Protokolle erläutert. In Kap. 7.2.4 werden dann verschiedene Optimierungen verteilter Commit-Protokolle zur Reduzierung der Nachrichtenanzahl präsentiert. Abschließend behandeln wir noch ein 3-Phasen-Commit-Protokoll, welches vor allem eine höhere Robustheit im Vergleich zu 2PC-Verfahren anstrebt.