Theoretische Konzepte zur Abarbeitung parallel arbeitender Transaktionen Definition: (Ablaufplan, Schedule) Ein Ablaufplan S ist die verschränkte Anordnung bzw. Ausführung der Einzeloperationen einer Menge gegebener Transaktionen mit folgenden Einschränkungen: - Alle Operationen jeder beteiligten Transaktion sind genau einmal enthalten; - Die relative Reihenfolge der Einzeloperationen jeder Transaktion wird beibehalten. Definition: (vollständiger Schedule) Ein Ablaufplan S heißt vollständig, falls jede beteiligte Transaktion T nach der letzten Operation entweder ein commit (c) oder ein rollback oder abort (a) enthält. 1 T1 := r1(x); w1(x); T2 := r2(x); r2(y); w2(y); Ein Ablaufplan S: S : r1(x); r2(x); w1(x); r2(y); w2(y); Ein vollständiger Ablaufplan S: S : r1(x); r2(x); w1(x); c1; r2(y); w2(y); c2; 2
Definition: (serieller Schedule) Seien T1,, Tn Transaktionen, dann ist ein serieller Schedule ein vollständiger Schedule, der aus der Hintereinanderausführung der Transaktionen besteht: S: Tς(1),, Tς(n); wobei ς eine Permutation von { 1,, n } bezeichnet. also T1 := r1(x); w1(x); T2 := r2(x); r2(y); w2(y); S: r2(x); r2(y); w2(y); c2; r1(x); w1(x); c1; S: T2;T1 Definition: (serialisierbarer Schedule) Ein Schedule S heißt serialisierbar S ist äquivalent zu einem seriellen Schedule S! Wann sind zwei Schedules äquivalent? 3 Hier: äquivalent im Sinne von konflikt-äquivalent! Dazu: Definition: (Konflikt) Zwei Operationen p, q in einem Schedule S stehen in Konflikt <=> i) sie gehören zu verschiedenen Transaktionen ii) sie greifen auf das gleiche Datenobjekt x zu iii)p, q { r, w } und mindestens eine Operation ist eine write-operation Definition: (Konfliktrelation bzw. Konfliktmenge) conf(s) := { (p, q) p, q stehen im Konflikt und p kommt in S vor q } - { (p, q) p T oder q T und T abgebrochen } heißt Konfliktmenge bzw. Konfliktrelation des Schedule S 4
Beispiel1: S = r1(x); w1(x); c1; r2(x); r2(y); w2(x); r3(y); w2(y); w3(y); c2; conf(s) = { (r1(x), w2(x)), (w1(x), r2(x)), (w1(x), w2(x)), (r2(y), w3(y)), (r3(y), w2(y)), (w2(y), w3(y)) } Beispiel2: S = r1(x); w1(x); c1; r2(x); r2(y); w2(x); r3(y); w2(y); w3(y); a3; c2; conf(s) = { (r1(x), w2(x)), (w1(x), r2(x)), (w1(x), w2(x)) } 5 Definition: (konfliktäquivalent) Zwei Schedules S und S heißen konfliktäquivalent (im Zeichen: S c S ) i) S und S enthalten die gleichen Operationen inklusive c und a ii) conf(s) = conf(s ) S1 = r1(x); r2(x); w1(x); c1; r2(y); w2(y); w2(x); c2; S2 = r2(x); r1(x); r2(y); w1(x); c1; w2(y); w2(x); c2; S1 und S2 sind konfliktäquivalent, denn: S1 und S2 enthalten die gleichen Operationen und conf(s1) = conf(s2) = { (r1(x), w2(x)), (r2(x), w1(x)), (w1(x), w2(x)) } 6
Definition: (Konfliktserialisierbarkeit) Ein Schedule S heißt konfliktserialisierbar S ist konfliktäquivalent zu einem seriellen Schedule S. Ziel eines Transaktionsmanagers ist also, konfliktserialisierbare Ablaufpläne zu erstellen, soweit das möglich ist. Damit wäre das Isolation-Problem gelöst, denn das Ergebnis eines konfliktserialisierbaren Schedules ist dasselbe wie das eines seriellen Schedules, dessen Transaktionen alle hintereinander ausgeführt werden, so dass keine der klassischen Probleme auftreten können Wie kann überprüft werden, ob ein Schedule konfliktserialisierbar ist??? 7 Überprüfung auf Konfliktserialisierbarkeit mittels Konfliktgraphen: Definition: (Konfliktgraph) Sei S ein Ablaufplan. Der Konfliktgraph G(S) zu S ist wie folgt definiert: Die Knoten von G(S) sind die Transaktionen in S Zwischen 2 Knoten T i und T j wird eine gerichtete Kante T i -> T j gezogen genau dann, wenn es p T i und q T j gibt mit (p, q) conf(s) Gegeben sei der folgende Schedule: conf(s) ={ (r3(x), w1(x)), (r3(x), w2(x)), (r2(y), w1(y)), (r1(x), w2(x)), (r1(x), w3(x)), (w1(x), r2(x)), (w1(x), w2(x)), (w1(x), w3(x)), (r2(x), w3(x)), (w2(x), w3(x)) } 8
also: conf(s) ={ (r3(x), w1(x)), (r3(x), w2(x)), (r2(y), w1(y)), (r1(x), w2(x)), (r1(x), w3(x)), (w1(x), r2(x)), (w1(x), w2(x)), (w1(x), w3(x)), (r2(x), w3(x)), (w2(x), w3(x)) } Zugehöriger Konfliktgraph: T1 T2 T3 9 Noch einmal: conf(s) ={ (r3(x), w1(x)), (r3(x), w2(x)), (r2(y), w1(y)), (r1(x), w2(x)), (r1(x), w3(x)), (w1(x), r2(x)), (w1(x), w2(x)), (w1(x), w3(x)), (r2(x), w3(x)), (w2(x), w3(x)) } Zugehöriger Konfliktgraph (vereinfacht): T1 T2 T3 10
Zusammenhang zwischen Konfliktgraph und Serialisierbarkeit: Satz: a) Ist S serieller Schedule, dann enthält der zugehörige Konfliktgraph G(S) keinen Zykel! b) Zu jedem zykelfreien Konfliktgraphen G(S) kann ein serieller Schedule S konstruiert werden, s.d. S c S (hierzu existieren effiziente Algorithmen) c) Enthält ein Konfliktgraph Zyklen, ist der zugehörige Schedule nicht konfliktserialisierbar! Zur Überprüfung eines Schedules auf Konfliktserialisierbarkeit ist also die Aussage c) des Satzes sehr nützlich! 11 Noch einmal das Zugehöriger Konfliktgraph: T1 T2 T3 Der Konfliktgraph enthält Zykel, d.h. der Schedule S ist nicht konfliktserialisierbar!! 12
Anmerkung: Die Konflikte, die einen Zykel verursachen, müssen sich nicht auf das gleiche Datenelement (x oder y oder z) beziehen, d.h. an einem Zykel können mehrere Datenelemente beteiligt sein!! Den Zusammenhang zwischen Konfliktserialisierbarkeit und Sperren bzw. Sperrprotokollen liefert der folgende Satz: Satz: Das 2-Phasen-Sperrprotokoll ist eine hinreichende Bedingung für Konfliktserialisierbarkeit! Folgerungen: 1) Ein Ablaufplan S, der dem 2-Phasen-Sperrprotokoll genügt, ist konfliktserialisierbar! 2) Es kann auch Ablaufpläne geben, die nicht dem 2-Phasen-Sperrprotokoll genügen, und trotzdem konfliktserialisierbar sind! 13 Fazit: Es ist möglich, Schedules zu erstellen, die die Isolation-Bedingung der ACID-Bedingungen erfüllen, ohne Sperren anzuwenden (das sind die konfliktserialisierbaren Schedules!). Die Überprüfung, ob ein gegebener Schedule die Isolation-Bedingung erfüllt, d.h. konfliktserialisierbar ist, erfolgt über den Konfliktgraphen zu diesem Schedule: Enthält der Graph keine Zykel, ist die Isolation-Bedingung erfüllt! Der Zusammenhang zwischen Sperren und Serialisierbarkeit ist: Erfüllt S das 2-Phasen-Sperrprotokoll, dann ist S serialisierbar 14