Organisatorisches Termine • 2. März: letzte Vorlesung • 8. März: Klausurvorbereitung (Durchgehen Klausurähnlicher Aufgaben, Fragestunde) • 9. März: Besprechungstermin Übungsblatt 6 (Punkte bisher: siehe Aushang) HiWi Job / Werkvertrag • Aufsetzen einer MS Access DB für das Qatna-Projekt (Archäologie) • Projekt mit hoher Sichtbarkeit, siehe z.B. http://www.spiegel.de/spiegel/0,1518,650267,00.html Bachelor- / Master- / Studien- / Diplomarbeiten • Diverse Themen im DB-Bereich an unserem Lehrstuhl Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 2 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 3 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Überblick Architektur eines DBMS Figure inspired by Ramakrishnan/Gehrke: “Database Management Systems”, McGraw-Hill 2003. Web Forms Applications SQL Interface SQL Commands Executor Operator Evaluator Transaction Manager Lock Manager Parser ! Optimizer File and Access Methods Buffer Manager Disk Space Manager ! data, files, indices, ... ! ! ! ! Recovery Manager DBMS Database Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 4 Einführung Das “Hello World” des Transaktionsmanagement • Meine Bank hat mir eine EC-Karte ausgestellt. • Mit dieser Karte kann ich z.B. an Bankautomaten Bargeld abheben. • Der Geldautomat führt eine Transaktion durch, die sicherstellt, dass mein Kontostand korrekt aktualisiert wird. kontostand := leseKontostand(kontonum); kontostand := Kontostand - 100; schreibeKontostand(kontonum, kontostand) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 5 Einführung Nebenläufiger Zugriff (Concurrent Access) • Das Problem ist: mein Mann hat ebenfalls eine EC-Karte für das selbe Konto. • Es könnte sein, dass wir zur gleichen Zeit von verschiedenen Geldautomaten aus Geld abheben möchten. Dies bezeichnen wir als nebenläufigen Zugriff. ich (Transaktion 1) mein Mann (Transaktion 2) kontostand := leseKontostand(num) Kontostand (DB Status) 1200 kontostand := leseKontostand(num) kontostand := kontostand - 100 1200 1200 kontostand := kontostand - 200 schreibeKontostand (num, kontostand) 1200 1100 schreibeKontostand (num, kontostand) 1000 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 6 Einführung Unterbrochene Transaktionen • Nehmen wir nun an, dass ich Geld von einem Konto auf ein anderes Konto überweisen möchte. giroKontostand := leseKontostand(giro); giroKontostand := kontostand - 500; schreibeKontostand(giro, giroKontostand) sparKontostand := leseKontostand(spar); sparKontostand := sparKontostand + 500; Übertragung abgebrochen • Durch die unterbrochene Transaktion (Stromausfall, Platten-Crash, SoftwareBug, ...) wurde mein Geld verloren. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 7 Einführung Die ACID Eigenschaften Um diese (und andere) Effekte zu vermeiden muss ein DBMS folgende Transaktionseigenschaften gewährleisten: 1.Atomicity (A) Entweder alle oder keine der Updates, die eine Transaktion durchführt werden auf der Datenbank angewandt. 2.Consistency (C) Jede Transaktion bringt die Datenbank von einem konsistenten Zustand in einen anderen konsistenten Zustan (während der Ausführung der Transaktion kann die Datenbank zeitweise inkonsistent sein). 3.Isolation (I) Eine Transaktion darf keine Effekte nebenläufiger Transaktionen beobachten. Aus Sicht der Transaktion greift sie alleine auf die Datenbank zu. 4.Durability (D) Die Effekte einer erfolgreichen Transaktion werden persistent gespeichert und können nicht durch Systemprobleme rückgängig gemacht werden. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 8 Einführung Transaktionen • Aus Sicht des DBMS ist eine Transaktion eine Sequenz von Aktionen. • Eine Aktion wird über ein Datenbankobjekt O durchgeführt. Ein Objekt entspricht z.B. einem Attribut, einem Tupel, oder einer gesamten Tabelle. In unserer Diskussion beschränken wir uns auf Objekte, die Attributen entsprechen. • Mögliche Aktionen einer Transaktion T über ein Datenbankobjekt O: • Lesen " RT(O) • Schreiben " WT(O) • Eine Transaktion muss mit einer der folgenden Aktionen beendet werden: • Die Transaktion wurde “erfolgreich” durchgeführt " CommitT • Die Transaktion wurde “nicht erfolgreich” durchgeführt " AbortT • Zwei wichtige Anahmen: • Transaktionen interagieren ausschließlich über Lese- und Schreiboperationen auf der Datenbank miteinander (keine direkten Nachrichten zwischen Transaktionen) • Eine Datenbank ist eine statische Menge von Datenbankobjekten. Werden Objekte eingefügt oder gelöscht entstehen weitere Probleme die wir hier nicht betrachten. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 9 Einführung Schedules • Ein Schedule ist eine Liste von Aktionen aus einer Menge von Transaktionen. • Die Reihenfolge von Aktionen einer bestimmten Zeitachse Transaktion T innerhalb des Schedules stimmt mit der Reihenfolge dieser Aktionen in T überein. • Ein Schedule beschreibt eine Ausführungssequenz von Aktionen. • Enthält ein Schedule alle Aktionen (und nichts anderes) einer Menge von Transaktionen, so sprechen wir von einem vollständigen Schedule. • Sind alle Aktionen jeder Transaktion im Schedule zusammenhängend, so sprechen wir von einem seriellen Schedule. Transaktion T1 Transaktion T2 R(A) W(A) R(B) R(C) W(C) W(B) Commit Commit vollständiger Schedule (Annahme: keine weiteren Aktionen Teil von T1 und T2) Transaktion T1 Transaktion T2 R(A) W(A) R(C) W(C) R(B) W(B) serieller Schedule Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 10 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 11 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Anomalien • Annahmen: • 2 Transaktionen, die die Konsistenz (consistency) der Datenbank gewährleisten. • Ein vollständiger Schedule, der diese beiden Transaktionen beinhaltet. • Eine Datenbank, die vor Ausführung des Schedules in einem konsistenten Zustand ist. • Führen wir nun den Schedule aus, so beobachten wir eine Anomalie, wenn die Datenbank nach der Durchführung aller Aktionen des Schedules einen inkonsistenen Zustand aufweist. konsistenter DB Zustand Transaktion T1 konsistenter DB Zustand konsistenter DB Zustand Transaktion T2 konsistenter DB Zustand konsistenter DB Zustand vollständiger Schedule mit T1 und T2 inkonsistenter DB Zustand Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen Anomalie 12 Anomalien • Ein Konflikt tritt zwischen zwei Transaktionen T1 und T2 innerhalb eines Schedules S auf, wenn • beide auf das gleiche Datenbankobjekt O zugreigen und • mindestens einer dieser Zugriffe eine Schreiboperation W(O) durchführt. • 3 Konflikttypen, die zu Anomalien führen: 1.Write-Write (WW) Konflikt (T1, W, O) ≺S (T2, W, O): • Der Schedule enthält [..., WT1(O), ..., WT2(O), ...] " Lost-Update Anomalie 2.Write-Read (WR) Konflikt (T1, W, O) ≺S (T2, R, O): • Der Schedule enthält [..., WT1(O), ..., RT2(O), ...] " Dirty-Read Anomalie 3.Read-Write (RW) Konflikt (T1, R, O) ≺S (T2, W, O): • Der Schedule enthält [..., RT1(O), ..., WT2(O), ...] " Unrepeatable-Read Anomalie Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 13 Anomalien Lost-Update Anomalie • Wir haben bereits ein Beispiel für eine Lost-Update Anomlie auf Folie 4 gesehen (Schedule unten nochmals wiederholt). • Der Effekt einer Transaktion geht verloren, weil die zweite Transaktion die Änderung unkontrolliert überschreibt. ich (Transaktion 1) mein Mann (Transaktion 2) kontostand := leseKontostand(num) Kontostand (DB Status) 1200 kontostand := leseKontostand(num) kontostand := kontostand - 100 1200 1200 kontostand := kontostand - 200 schreibeKontostand (num, kontostand) 1200 1100 schreibeKontostand (num, kontostand) 1000 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 14 Anomalien Dirty-Read Anomalie • Eine Transaktion liest Daten, die von der anderen Transaktion geschrieben, aber noch nicht committed wurden. • Nehmen wir z.B. an, dass mein Mann und ich fast zeitgleich Geld von unserem Konto abheben, meine Transaktion aber abgebrochen wird. ich (Transaktion 1) mein Mann (Transaktion 2) kontostand := leseKontostand(num); kontostand := kontostand - 100; schreibeKontostand (num, kontostand); 1200 1200 1100 kontostand := leseKontostand(num); kontostand := kontostand - 200; schreibeKontostand (num, kontostand); abort; Kontostand (DB Status) 1100 1100 900 900 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 15 Anomalien Unrepeatable-Read Anomalie • Eine Transaktion liest einen temporären, nicht konsistenten Zustand der Datenbank, da die andere Transaktion die für einen konsistenten Zustand nötigen Schreiboperationen noch nicht durchgeführt und committed hat. • Betrachten wir nochmals das Überweisungsbeispiel von Folie 5 und nehmen wir eine zweite Transaktion an, die das Gesamtguthaben über alle Konten abfragt. Gesamtguthaben (Transaktion 1) Überweisung (Transaktion 2) giroKontostand := leseKontostand(giro); giroKontostand := kontostand - 500; schreibeKontostand(giro, giroKontostand) giroGuthaben := leseKontostand(giro); sparGuthaben := leseKontostand(spar); guthaben := giroGuthaben + sparGuthaben; sparKontostand := leseKontostand(spar); sparKontostand := sparKontostand + 500; schreibeKontostand(spar, sparKontostand) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 16 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 17 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Serialisierbarkeit Scheduler • Der Scheduler entscheidet über die nebenläufige Ausführung von Transaktionen. • Dazu legt er einen Schedule für diese Transaktionen an. Client 1 Client 2 3 Client 3 3 2 2 1 1 2 1 Scheduler ... 1 2 1 1 Acces & Storage Layer Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 18 Serialisierbarkeit Keine Anomalien bei seriellen Schedules Client 1 • Ein serieller Schedule (siehe Folie 8) entspricht einer sequentiellen Ausführung der 3 Transaktionen. • Dadurch wird die Nebenläufigkeit von Transaktionen vermieden. • Anomalien treten nur bei nebenläufigen Transaktionen auf. • Somit garantiert ein serieller Schedule, dass keine Anomalien auftreten und damit ist die Ausführung eines seriellen Schedules immer korrekt. Client 2 Client 3 2 2 1 1 1 2 3 Scheduler 3 2 1 2 1 3 2 1 Acces & Storage Layer Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 19 Serialisierbarkeit Definition • Keine Nebenläufigkeit zuzulassen (und somit Anomalien zu vermeiden) ist nicht praktikabel. " Wir erlauben Nebenläufigkeit, wenn garantiert werden kann, dass der Effekt der Anwendung des nicht-seriellen Schedules, für jeden möglichen konsistenten Datenbankzustand, mit dem Effekt eines beliebigen seriellen Schedules der selben Transaktionen übereinstimmt. • Es ist möglich, Aktionen in einem Schedule S umzusortieren. • Die Reihenfolge von Aktionen der selben Transaktion muss dabei beibehalten werden. • Das Ergebnis des umsortierten Schedules muss dem Ergebnis des initialen Schedules S entsprechen. • Existieren Konflikte (siehe Folie 11) zwischen Aktionen verschiedener Transaktionen, so ist deren relative Reihenfolge wichtig und diese darf demnach nicht geändert werden. • Kann ein Schedule S mit obigen Regeln in einen Schedule S’ umgewandelt werden, so sagen wir, dass S konfliktäquivalent zu S’ ist. • Ein Schedule S ist genau dann konfliktserialisierbar, im folgenden auch nur serialisierbar genannt, wenn S konfliktäquivalent zu einem beliebigen seriellen Schedule S’ ist. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 20 Serialisierbarkeit Beispiel Drei Schedules über Transaktionen T1 und T2 (S2 entspricht seriellem Schedule) Konfliktrelationen in S1 (T1, R, A) ≺S1 (T2, W, A), (T1, R, B) ≺S1 (T2, W, B), (T1, W, A) ≺S1 (T2, R, A), (T1, W, B) ≺S1 (T2, R, B), (T1, W, A) ≺S1 (T2, W, A), (T1, W, B) ≺S1 (T2, W, B) Konfliktrelationen in S2 (serieller Schedule) identisch mit Konfliktrelationen von S1 Schedule S1 T1 T2 Schedule S2 T1 T2 Schedule S3 T1 R(A) R(A) R(A) W(A) W(A) W(A) T2 R(A) R(B) R(A) W(A) W(B) W(A) R(B) R(A) R(B) W(B) W(A) W(B) R(B) R(B) R(B) W(B) W(B) W(B) Konfliktrelationen in S3 (T1, R, A) ≺S3 (T2, W, A), (T2, R, B) ≺S3 (T1, W, B), (T1, W, A) ≺S3 (T2, R, A), (T2, W, B) ≺S3 (T1, R, B), (T1, W, A) ≺S3 (T2, W, A), (T2, W, B) ≺S3 (T1, W, B) " S1 ist serialisierbar Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 21 Serialisierbarkeit Der Konfliktgraph • Indem wir einen Konfliktgraph G(S) (auch serialization graph genannt) verwenden, können wir die Korrektheit einer Schedules S überprüfen. • Ein Knoten von G(S) entspricht einer committeten Transaktion in S. • Eine gerichtete Kante zwischen zwei Transaktionsknoten Ti ⟶ Tj existiert genau dann wenn S zwei Aktionen A und A’auf einem Objekt O enthält, so dass (Ti, A, O) ≺S (Tj, A’, O) (mindestens eine Aktion entspricht einer Schreiboperation). • S ist genau dann konfliktserialisierbar, wenn G(S) azyklisch ist. • Ein äquivalenter serieller Schedule kann in diesem Fall direkt durch eine topologische Sortierung von G(S) identifiziert werden. Konfliktgraph für S1 und S3 (siehe Folie 19) Konfliktgraph für S1 T1 T2 azyklischer Graph " serialisierbar Konfliktgraph für S3 T1 T2 Graph enthält einen Zyklus " nicht serialisierbar Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 22 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 23 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Locking • Ideal wäre es, wenn der Scheduler stets serialisierbare Schedules produzieren würde. • Die Idee, um diese Eigenschaft zu gewährleisten basiert auf der Verwendung von Sperren (Locks). • Jede Transaktion muss ein Lock zugewiesen bekommen, bevor es auf ein Objekt O zugreift. • Ein solches Lock garantiert exklusiven Zugriff auf ein Objekt. • Erst wenn die Transaktion das Objekt wieder freigibt können andere Transaktionen wieder auf das Objekt zugreifen. lock(O); .... Zugriff auf O...; unlock(O); • Auf diese Weise wird nebenläufiger Zugriff auf O vermieden. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 24 Locking • Kann ein Lock nicht an eine Transaktion T vergeben werden (z.B. weil eine andere Transaktion T’ schon ein Lock auf das gewünschte Objekt hat) so wird T blockiert. • Der Scheduler suspendiert die weitere Ausführung der blockierten Transaktion T. • Wird der Lock durch T’ wieder freigegeben so kann es T zugewiesen werden. In diesem Fall wird die Ausführung von T fortgesetzt. • Da andere Transaktionen fortgesetzt werden können während T pausiert können Locks dazu verwendet werden, die relative Reihenfolge von Aktionen zu kontrollieren. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 25 Locking Beispiel für Locking und Scheduling Zwei Transaktionen Zwei Schedules, die Lock- und Unlock-Aufrufe berücksichtigen Schedule S1 Schedule S2 T1 T1 T2 T1 Lock(A) Lock(A) Lock(A) Lock(A) W(A) W(A) Lock(B) Lock(B) Unlock(A) W(B) W(A) Lock(B) Unlock(A) W(B) W(A) Unlock(B) Unlock(A) W(A) Lock(B) W(B) W(A) Unlock(A) Write(B) Unlock(B) T2 Lock(A) W(A) W(B) Unlock(B) T2 Lock(A) W(A) Lock(B) W(B) W(A) Unlock(A) Write(B) Unlock(B) Write(B) Unlock(B) Lock(B) Unlock(A) W(B) Unlock(B) In diesem Beispiel sind sowohl S1 also auch S2 serlialisierbar. Ist das verallgemeinerbar? Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 26 Locking Beispiel, das zeigt, dass Locking noch keine Serialisierbarkeit garantiert. Selbst wenn wir dem lock/unlock Schema folgen, sehen wir an folgendem Schedule, dass wir immer noch nicht-serialisierbare Schedules erhalten können: T1 T2 Lock(A) Lock(C) W(A) W(C) Wie sieht der Konfliktgraph in diesem Bsp. aus? Unlock(A) Lock(A) W(A) Lock(B) Unlock(A) W(B) Unlock(B) Unlock(C) Lock(B) W(B) Unlock(B) Lock(C) W(C) Unlock(C) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 27 Locking Beispiel, das zeigt, dass Locking noch keine Serialisierbarkeit garantiert (Fortsetzung Bsp. Folie 12). Transaktion 1 Transaktion 2 Lock(num) DB Status 1200 R(num) Unlock(num) Lock(num) R(num) Unlock(num) Lock(num) W(num) 1100 Unlock(num) Lock(num) W(num) Unlock(num) 1000 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 28 Zwei-Phasen-Sperr-Protokoll Auch Two-Phase Locking, 2PL genannt • Das Zwei-Phasen-Sperr-Protokoll führt eine weitere Beschränkung auf die allgemeine Struktur einer Transaktion ein: Wenn eine Transaktion erstmal ein Lock freigegeben hat (d.h., hat sie das erste Unlock aufgerufen), so kann sie keine weiteren Locks mehr bekommen (d.h. kein Lock-Aufruf mehr danach). # of locks held time lock phase release phase lock point • Das Zwei-Phasen-Sperr-Protokoll ist das Protokoll für die Kontrolle nebenläufiger Transaktionen, das in Datenbanksystemen heutzutage verwendet wird. • Intuitiv werden Aktionen, zwischen denen Konflikte auftreten in serieller Reihenfolge ausgeführt. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 29 Zwei-Phasen-Sperr-Protokoll Auch Two-Phase Locking, 2PL genannt Ein Schedule, der 2PL nicht einhält. Transaktion 1 Transaktion 2 Lock(num) Erster UnlockAufruf von T1 DB Status 1200 R(num) Unlock(num) Lock(num) R(num) Erneute LockAnforderung von T1 Lock(num) W(num) # Erster UnlockAufruf von T2 Unlock(num) 1100 Unlock(num) Lock(num) W(num) Unlock(num) Erneute LockAnforderung von T2 # 1000 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 30 Zwei-Phasen-Sperr-Protokoll Auch Two-Phase Locking, 2PL genannt Ein Schedule, der 2PL einhält. Transaktion 1 Transaktion 2 Lock(num) DB Status 1200 R(num) Lock(num) W(num) Unlock(num) 1100 T2 blockiert Lock(num) R(num) W(num) 900 Unlock(num) In diesem Beispiel entspricht der Schedule dem seriellen Schedule. Dies ist im Allgemeinen allerdings nicht zwangsläufig der Fall (siehe nächste Folie). Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 31 Zwei-Phasen-Sperr-Protokoll Auch Two-Phase Locking, 2PL genannt Ein Schedule, der 2PL einhält und keinem seriellen Schedule entspricht Transaktion 1 Transaktion 2 Lock(A) R(A) Lock(B) W(B) Unlock(B) Lock(B) W(B) Unlock(A) Unlock(B) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 32 Zwei-Phasen-Sperr-Protokoll Auch Two-Phase Locking, 2PL genannt • Das Zwei-Phasen-Sperr-Protokoll gibt nicht genau vor, wann Locks gesetzt und wieder freigegeben werden. locks held time • 2 mögliche Varianten: “lock phase” Preclaiming 2PL • Preclaiming 2PL: alle Locks werden zu Anfang der Transaktion gesetzt und nach und nach wieder freigegeben. • Strict 2PL: Locks werden nach und nach von Transaktion T gesetzt und erst bei Beendigung von T wieder freigegeben. Bei Strict PL kann zudem eine andere Transaktion T’ erst wieder auf von T gesperrte Objekte zugreifen, wenn T committed bzw. abgebrochen wurde (duch commit bzw. abort Aktion). release phase locks held time lock phase “release phase” Strict 2PL Motivation für die ein oder andere Variante? Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 33 Zwei-Phasen-Sperr-Protokoll Cascading Rollbacks • Betrachten wir drei Transaktionen, von denen T1 abbricht. T1 w(x) r(x) T2 T3 r(x) t1 t2 abort ; � time • Wenn T1 abbricht, haben T2 und T3 bereits von T1 geschriebene Daten gelesen (siehe dirty read, Folie 13). • In diesem Fall muss nicht nur T1 mittles eines Rollback rückgängig gemacht werden, sonder auch T2 und T3 (cascading rollback). • Das bedeutet letztendlich, dass T2 und T3 nicht committed werden können, bevor T1 nicht committed wurde. • Durch die Anwendung von Strict PL wird cascading rollback komplett vermieden, da Locks (insb. Lock auf X) erst bei Commit von T1 (bzw. nach Abort + Rollback) wieder freigegeben werden. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 34 Lock-Typen • Ein Konflikt tritt nur dann auf, wenn eine Schreiboperation involviert ist. • Solange Daten nur gelesen werden, muss ein Datenbankobjekt nicht exklusiv durch eine Transaktion gelockt sein. " DBMS verwenden üblicherweise verschiedene Lock-Typen (lock modes) um nebenläufige Leseoperationen zu erlauben. • Read-Locks oder Shared-Locks: Lock_S(O) • Write-Locks oder Exclusive-Locks: Lock_X(O) • Während des 2PL kann versucht werden, einen Shared-Lock in einen Exclusive-Lock umzuwandeln (lock upgrade). Dies ermöglicht eine stärkere Nebenläufigkeit. • Locks sind nur dann zueinander im Konflikt wenn mindestens ein Lock ein Exclusive-Lock ist und somit das Objekt für alle Transaktionen sperrt (siehe Kompatibilitätsmatrix). Locks in T2 Locks in T1 shared exclusive shared exclusive ! # # # Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 35 Lock-Typen Verwendung von Shared-Locks und Exclusive-Locks Transaktion 1 Transaktion 2 Lock_S(A) R(A) Lock_S(A) R(A) Lock_X(B) R(B) W(B) Unlock(A) Unlock(B) Commit Lock_X(C) R(C) W(C) Unlock(A) Unlock(B) Commit Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 36 Deadlocks • Wie bei vielen lock-basierten Protokollen kann es unter Verwendung des 2PL zu Deadlocks kommen. • Im Fall eines Deadlocks würden Transaktionen unbegrenzt lange aufeinander warten. Verwendung von Shared-Locks und Exclusive-Locks Transaktion 1 Transaktion 2 Lock_X(A) R(A) Lock_X(B) W(B) Lock_X(B) Lock_X(A) ... ... Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 37 Deadlocks Erkennen von Deadlocks Basierend auf Abhängigkeitsgraphen • Lock Manager speichert einen Wartet-Auf-Graphen. • Knoten entsprechen Transaktionen. • Eine gerichtete Kante von Ti $ Tj existiert genau dann, wenn Ti durch einen Lock, den Tj hält, blockiert ist. • Dieser Graph wird regelmäßig auf Zyklen untersucht, da ein Zyklus einem Deadlock entspricht. • Wird ein Zyklus entdeckt, so wird der Deadlock aufgelöst, indem eine oder mehrere Transaktionen abgebrochen werden. • Wahl der abzubrechenden Transaktion(en) ist komplex: • Junge Transaktionen bevorzugt zu beenden kann dazu führen, dass diese stets neu gestartet und wieder abgebrochen werden. • Alte Transaktionen abzubrechen kann dazu führen, dass tendentiell komplexere, und daher langwierige Berechnungen verworfen werden (was die Kosten der Undo-Operation, die die bisherigen Schritte rückgängig macht teuer machen kann). Basierend auf Timeouts • Eine Transaktion T wir nur solange blockiert, weil sie auf ein Lock wartet, bis ein Timeout stattfindet (wenn maximale Wartezeit überschritten). • In Fall eines Timeouts wird die Transaktion T abgebrochen. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 38 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 39 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Spezialisierte Locking Techniken Dynamische Datenbanken und das Phantom Problem • Bisher haben wir angenommen, dass keine Daten hinzugefügt bzw. gelöscht werden. • Lassen wir diese Operationen zu, müssen wir mit sogenannten Phantom-Objekten umgehen. • Phantom-Objekte entstehen, wenn eine Transaktion T1 eine Menge von Daten sperrt und annimmt, diese sei vollständig und unveränderbar. • Währenddessen verändert eine Transaktion T2 die Menge relevanter Daten von T1, indem Sie Objekte hinzufügt oder löscht, die zur gesperrten Menge von Daten gehören sollten. Nebenläufiger Zugriff auf B+ Bäume • Wenden wir 2PL auf B+ und ISAM Bäume an, so haben wir das Problem, dass der Wurzelknoten, der den Einstiegspunkt in den Baum darstellt, einen Engpass bildet. • Spezialisierte Locking-Protokolle, die die hierarchische Struktur betrachten erlauben effizientere Lösungen. Locking verschiedener Granularität • Bisher haben wir die Diskussion auf das Locking von Attributen beschränkt. • Hier betrachten wir nun den Fall, wo weitere Objekte gesperrt werden können. Sperrbare Objekte bilden dabei eine Teilmengenrelation (z.B. Attribut Teil eines Tupels, Tupel Teil einer Relation, Relation Teil eines Schemas, usw. ) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 40 Dynamische Datenbanken Das Phantom-Problem Beispiel von Phantom-Tupeln Transaktion T1 SELECT rating, max(age) AS MaxAge FROM Sailors GROUP BY rating HAVING rating = 1 OR rating = 2 Transaktion T2 INSERT INTO Sailors VALUES(..., 1, ..., 96); DELETE FROM Sailors WHERE Rating = 2 AND Age > 70; Transaktion T1 Transaktion T2 Sperre alle Tupel mit Rating = 1; Scan der Menge gesperrter Tupel, um max(age) zu bestimmen; Sperre freien Speicher, um neues Tupel zu speichern; Schreibe neues Tupel mit Rating = 1 und Age = 96; Sperre alle Tupel mit Rating = 2 UND Age > 70; Entferne gesperrte Tupel (beinhaltet ältesten Sailor mit Rating=2); Gebe alle Sperren wieder frei; Sperre alle Tupel mit Rating = 2; Scan der Menge gesperrter Tupel, um max(age) zu bestimmen; Gebe alle Sperren wieder frei; Ergebnis des obigen Schedules Ergebnis des seriellen Schedules {T1, T2} Ergebnis des seriellen Schedules {T2, T1} Rating MaxAge Rating MaxAge Rating MaxAge 1 2 80 63 1 2 80 75 1 2 96 63 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 41 Dynamische Datenbanken Das Phantom-Problem • Ist eine Datenbank nicht statisch, so ist Konfliktserialisierbarkeit keine Garantie mehr für Serialisierbarkeit! • Dieses Problem entsteht dadurch, dass T1 annimmt, stets über die korrekte Menge von Tupeln, die relevant sind zu verfügen. • Die Menge von Tupeln, die für T1 relevant sind kann sich nun jedoch über die Zeit durch Einfügen bzw. Löschen sogenannter Phantom-Tupel durch T2 ändern. " Die Annahme von T1 ist obsolet. • Die Lösung des Problems besteht darin, die Annahme von T1 sicherzustellen. Zwei Alternativen: • Bereichs-Locking • Ohne Index: Die ganze Datei wird von T1 gesperrt, so dass keine Daten in dieser Datei durch eine andere Transaktion hinzugefügt bzw. entfernt werden können. • Mit Index über einschänkendes Attribut: Alle Seiten, die Dateneinträge aus dem relevanten Bereich enthalten können (z.B. Rating = 1) werden im Index gesperrt. Wenn T1 versucht, die Menge der Tupel dieses Bereichs zu ändern, so muss T2 auch den Index modifizieren, was durch gezieltes Sperren der Indexseiten verhindert wird. • Predikat-Locking • Es ist möglich, implizit alle Records zu sperren, die einem beliebigen Prädikat entsprechen. • Dieser allgemeiner Ansatz ist allerdings aufwendig in der Implementierung und wird daher nur selten verwendet. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 42 Nebenläufiger Zugriff auf Baum-Indizes Beispiel • Eine Transaktion Tw fügt Daten auf der Blatt-Ebene eines B+ Baums ein, was zu einem Split führt. 1. Das Einfügen führt zu einem Split von Knoten 2 " Knoten 2’ wird hinzugefügt. • Der Split wird zu Knoten 9 propagiert. Das bedeutet, dass wir einen neuen Separator in Knoten 9 einfügen. • Wir nehmen an, dass Knoten 9 noch nicht voll ist und somit den Separator aufnehmen kann. 2. Bevor wir den Separator in Knoten 9 einfügen, versucht eine Transaktion TR Daten des ehemaligen Knoten 2 zu finden, die durch den Split auf 2’ wiederverteilt wurden. 3. Der “alte” Knoten 9 leitet die Anfrage auf Knoten 2 um, obwohl die gesuchten Daten dort nicht mehr existieren. 4. TR glaubt somit fälschlicherweise, dass es keine der Suche entsprechenden Daten mehr gibt. 14 TR 2 " Nebenläufigkeit in B+ Bäumen muss unterstützt werden. TW 12 13 8 9 1 11 # 3 1 10 2 2’ 3 4 5 6 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 7 43 Nebenläufiger Zugriff auf Baum-Indizes Verwendung des 2PL Suche in B+ Bäumen • • Wir traversieren den Baum von oben nach unten (top-down) entlang eines Pfads P. Basierend auf dem Inhalt eines Knoten entscheiden wir, welchen Kind-Knoten wir im nächsten Schritt besuchen. Einfügen in B+ Bäumen • • • Führe Suche aus. Füge Daten in den richtigen Blattknoten ein (und in die Daten-Datei, hier nicht betrachtet). Abhängig vom Füllgrad der Knoten auf dem Pfad P werden dort Splits von unten nach oben (bottom-up) propagiert. Nebenläufigkeit mittels 2PL • • • Shared Read-Locks auf alle Seiten auf Pfad P. Exclusive Write-Locks beim Einfügen von Daten auf alle Seiten auf Pfad P. Alle Locks werden erst wieder freigegeben, wenn die Transaktion beendet ist. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 44 Nebenläufiger Zugriff auf Baum-Indizes Verwendung des 2PL • Durch die naive Strategie, einfach 2PL zu verwenden, wird die Nebenläufigkeit stark reduziert: • Alle Transaktionen müssen den Wurzelknoten sperren, der somit zum Flaschenhals wird. • Effektiv wird duch Locks auf dem Wurzelknoten eine serielle Ausführung aller (Schreib-) Transaktionen durchgeführt. "2PL ist keine praktikable Locking-Strategie für B+ Bäume. • Verbesserung durch zwei wesentliche Beobachtungen: 1. Die inneren Knoten des Baumes werden bei der Suche nur zum Weiterleiten der Suche an das nächste Kind verwendet. Die Suche wandert niemals aufwärts, sondern immer nur abwärts. 2. Ein Lock auf einen Knoten n ist bei einer Schreiboperation nur dann nötig, wenn ein Split bis zu diesem Knoten hochpropagiert werden kann. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 45 Nebenläufiger Zugriff auf Baum-Indizes Locking-Strategie bei Suchoperationen • Suchoperationen benötigen nur Shared-Locks auf Seiten des Suchpfads P. • Da garantiert ist, dass ein Knoten nie wieder angefasst wird, sobald sein Kindknoten betrachtet wird, können wir folgende Locking-Strategie einsetzen: • Ein Lock auf Knoten n kann freigegeben werden, sobald ein Lock auf Kindknoten n’ gesetzt wurde " lock coupling. Transaktion TR 14 TR Lock_S(14) Lock_S(12) 12 Unlock(14) 13 Lock_S(9) 8 Unlock(12) 9 10 11 Lock_S(2) Unlock(9) Unlock(2) 1 2 3 4 5 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 6 7 46 Nebenläufiger Zugriff auf Baum-Indizes Locking-Strategie bei Schreiboperationen • Auch bei Schreiboperationen folgen wir im Baum genau einem Pfad P. • Ein Insert kann zu einem Split auf der Blattebene führen, der sich entlang P von unten nach oben fortsetzen kann. • Daher benötigen wir Exclusive-Locks im Fall einer Schreiboperation. • Ein Knoten n wird nur dann gesplittet, wenn sein Kindknoten n’ auf P bereits vollständig gefüllt ist. Ansonsten kann n’ den neuen Separator aufnehmen und n bleibt unverändert. • In diesem Fall blockiert n’ das Propagieren von Splits überhalb von n’ und wir bezeichnen n’ als sicheren (safe) Knoten. • Daraus folgt, dass wir auf P erst ab Knoten n’ abwärts den Pfad P sperren. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 47 Nebenläufiger Zugriff auf Baum-Indizes Locking-Strategie bei Schreiboperationen • Wir nehmen an, dass Knoten 2 voll ist, was dazu führt, dass Knoten 2 gesplittet wird. • Dieser Split muss in Knoten 9 reflektiert werden. • Wir nehmen an, Knoten 9 ist noch nicht voll. Somit ist Knoten 9 ein sicherer Knoten. • Das bedeutet, dass Knoten 12 vom Split nicht mehr betroffen sein kann. • Effektiv müssen wir in diesem Beispiel nur Knoten 9 und Knoten 2 Sperren. Transaktion TW 14 Lock_X(14) TW Lock_X(12) 12 Lock_X(9) 13 Unlock(12) 8 Unlock(14) 9 10 11 Lock_X(2) Unlock(2) Unlock(9) 1 2 3 4 5 6 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 7 48 Nebenläufiger Zugriff auf Baum-Indizes Algorithmen Lock-Coupling Protokoll für Lese-Transaktionen root := Wurzelknoten; Setze Shared-Lock auf root; current := root; while current ist kein Blattknoten do begin child := Kind von current, das durch Suche als nächstes betrachtet wird; Setze Shared-Lock auf child; Gebe Shared-Lock auf current wieder frei; current := child; end Lock-Coupling Protokoll für Schreib-Transaktionen root := Wurzelknoten; Setze Shared-Lock auf root; current := root; while current ist kein Blattknoten do begin child := Kind von current, das durch Suche als nächstes betrachtet wird; Setze Exclusive-Lock auf child; current := child; if current ist ein sicherer Knoten then Gebe alle Locks über Vorfahren von current wieder frei; end Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 49 Nebenläufiger Zugriff auf Baum-Indizes Nebenläufigkeit über Lock-Coupling hinaus verbessern • Selbst unter Verwendung von Lock-Coupling werden zahlreiche Sperren auf innere Knoten gesetzt " verringert die Nebenläufigkeit. • Die Wahrscheinlichkeit, dass ein innerer Knoten tatsächlich von einem Update betroffen ist, ist sehr gering. • Sei z.B. der Grad eines B+ Baumes d = 50. Dann verursacht im Schnitt nur jede 50ste Einfügeoperation einen Split, was 2% der Einfügeoperationen entspricht. "Eine Insert-Transaktion kann optimistisch annehmen, dass es zu keinem Split kommt. • Es werden wie bei der Suche nur Shared-Locks auf innere Knoten gesetzt + ExclusiveLock auf betroffenen Blattknoten. • Erweist sich die Annahme als falsch und ein Split ist doch erforderlich, wird der Baum ein zweites Mal traversiert, wobei die nötigen Exclusive-Locks gesetzt werden. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 50 Locking Verschiedener Granularität geringe Nebenläufigkeit & wenig Overhead Datenbank Tablespace Tabelle Seite Vergrösserung der Granularität = Erhöhung der Nebenläufigkeit & des Overheads Tupel Attribut hohe Nebenläufigkeit & hoher Overhead " Locking mit verschiedener Granularität Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 51 Locking Verschiedener Granularität • Wir können für jede Transaktion entscheiden, welche Granularität Sperren haben (abhängig von den Eigenschaften der Transaktion). Beispiel eines Tupel-Locks Beispiel eines Tabellen-Locks SELECT * FROM SAILORS WHERE SID = 42 SELECT * FROM SAILORS (SID ist Schlüsselattribut) • Wie kann man bei Locks verschiedener Granularität feststellen, ob ein Objekt bereits gesperrt ist? • Z.B. sollte die linke Anfrage ein Tupel nur sperren können, wenn die Gesamttabelle nicht gesperrt ist. • Das Erkennen solcher Abhängigkeiten muss effizient gelöst sein. " Ausnutzen der hierarchischen Beziehung der sperrbaren Objekte (n Tupel ⊆ 1 Relation, n Relationen ⊆ 1 Schema, ...) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 52 Locking Verschiedener Granularität Intention-Locks • Intuitiv werden, wenn ein Objekt O gesperrt wird, sowohl O als auch alle Kinder von O in der Objekthierarchie gesperrt. • Zusätzlich wird eine neue Art Lock eingeführt, das sogenannte Intention-Lock, das beim Sperren von O verwendet wird, um dessen Vorfahren in der Objekthierarchie zu sperren. • Intention-Share-Lock (IS) für Vorfahren eines in Shared-Modus gesperrten Objekts. • Intention-Exclusive-Lock (IX) für Vorfahren eines in Exclusive-Modus gesperrten Objekts. S S X # IS IX # X # # # # IS # IX # # Erweiterte Konfliktmatrix Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 53 Locking Verschiedener Granularität Intention-Locks Locking-Prrotokoll für Locks verschiedener Granularität 1. Bevor ein Objekt O durch ein Lock in Modus M ∈ {S, X} gesperrt werden kann, muss die Transaktion ein IM-Lock auf alle Objekte “groberer” Granularität erhalten, die O beinhalten. 2. Wenn alle Intention-Locks gewährt wurden, kann die Transaktion Objekt O in Modus M sperren. Beispiel Anfrage 1 SELECT * FROM SAILORS WHERE SID = 42 (SID ist Schlüsselattribut) Anfrage 2 SELECT * FROM SAILORS Anfrage 1 erhält z.B. • IS-Lock auf die Sailors-Tabelle (und auf den Tablespace und die Datenbank, die die Sailors-Tabelle enthalten). • S-Lock auf das Tupel mit SID = 42. Anfrage 2 erhält z.B. • S-Lock auf die Sailors-Tabelle (und auf enthaltenden Tablespace und die Datenbank), da dieser S-Lock nicht in Konflikt zu den IS-Locks von Anfrage 1 steht. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 54 Locking Verschiedener Granularität Intention-Locks Beispiel Anfrage 1 SELECT * FROM SAILORS WHERE SID = 42 (SID ist Schlüsselattribut) Anfrage 2 SELECT * FROM SAILORS Anfrage 3 UPDATE SAILORS SET SNAME = ‘John Smith’ WHERE SID = 17 Anfrage 3 versucht, folgene Locks zu erhalten: • IX-Lock auf die Sailors-Tabelle (und auf “gröbere” Objekte) • X-Lock auf das Tupel mit SID = 17 Somit ist Anfrage 3 • Kompatibel mit Anfrage 1, da kein Konflikt zwischen IX und IS auf der Tabellen-Ebene entsteht. • Inkompatibel mit Anfrage 2, da S-Lock auf Sailors-Tabelle der Anfrage 2 in Konflikt mit dem IX-Lock von Anfrage 3 steht. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 55 Transaktionscharakteristiken in SQL92 Isolationslevel • SERIALIZABLE: Implementiert Strict-2PL für dynamische DB • Locks werden vor Lese- und Schreiboperationen angefordert, inkl. Locks für Mengen von Daten, die unverändert bleiben müssen (um Phantom Problem zu vermeiden, siehe Folie 40). • Locks werden bis zur Beendigung der Transaktion gehalten. • Andere Transaktionen können erst auf Objekte zugreifen, wenn Transaktion committet bzw. abbricht. • REPEATABLE READ: Implementiert Strict-2PL für statische DB • Locks auf einzelne Objekte (nicht auf Objektmengen) werden vor Lese- und Schreiboperationen angefordert. • Locks werden bis zur Beendigung der Transaktion gehalten. • Andere Transaktionen können erst auf Objekte zugreifen, wenn Transaktion committet bzw. abbricht. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 56 Transaktionscharakteristiken in SQL92 Isolationslevel • READ COMMITTED: Implementiert Strict PL für Schreiboperationen und statische DB • Exclusive-Locks werden vor Schreiboperation angefordert und diese werden bis zur Beendigung der Transaktion gehalten. Weitere Transaktionen können erst nach commit bzw. abort+rollback wieder auf gesperrte Objekte zugreifen. • Shared-Locks werden vor Leseoperationen angefordert und so schnell wie möglich wieder freigegeben. Diese Locks garantieren lediglich, dass die gelesenen Daten von einer commiteten Transaktion stammen. • READ UNCOMMITTED: Für Read-Only Transaktionen • Es werden keine (Shared-)Locks für Leseoperationen beantragt. • Schreiboperationen sind nicht zugelassen. " Transaktion ohne Locks und ohne Schreiboperationen Level Dirty Read READ UNCOMMITTED ! READ COMMITTED # # # REPEATABLE READ SERIALIZABLE Unrepeatable Read Phantom ! ! # # Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen ! ! ! # 57 Kapitel 10 Transaktionsmanagement • Einführung • Anomalien • Serialisierbarkeit • Zwei-Phasen-Sperr-Protokoll • Spezialisierte Locking Techniken • Nebenläufigkeit ohne Locking 58 Architektur und Implementierung von Datenbanksystemen | WS 2009/10 Melanie Herschel | Universität Tübingen Optimistic Concurrency Control • Bisher war unser Ansatz, Nebenläufigkeit zu regulieren, pessimistisch: • Wir gehen dabei davon aus, dass Transaktionen in Konflikt zueinander stehen. • Wir vermeiden Anomalien, die durch Konflikte entstehen, durch Sperren und Sperrprotokolle. • Im Gegensatz dazu steht der optimistische Ansatz, genannt optimistic concurrency control. • Hier gehen wir vom besten Fall aus und führen Lese- und Schreiboperationen ohne Sperren durch. • Bevor die Änderungen einer Transaktion commitet werden wird jedoch überprüft, ob tatsächlich keine Konflikte entstanden sind. • Grundannahme des optimistic concurrency control ist, dass Konflikte nur selten auftreten und dass der Overhead, den Sperren und Sperrprotokolle mit sich bringen eingespart werden kann, indem man einen Mehraufwand nur in den seltenen Fällen, wo Konflikte auftreten betreibt. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 59 Optimistic Concurrency Control Unter optimistic concurrency control folgen Transaktionen drei Phasen: 1. Lesephase: Die Transaktion wird ausgeführt, indem Daten aus der DB gelesen werden und in einen privaten Workspace geschrieben werden. 2. Validierungsphase: Wenn die Transaktion committen möchte, wird überprüft, ob die Ausführung korrekt ist (also keine Konflikte aufgetreten sind). Ist dies nicht der Fall, wird die Transaktion mit abort abgebrochen. 3. Schreibphase: Wird in Phase 2 kein Konflikt festgestellt, werden die Änderungen, die im privaten Workspace der Transaktion gespeichert sind, in die Datenbank übernommen. • Phasen 2 und 3 müssen in einer nicht-unterbrechbaren critical section ausgeführt werden (auch Val-Write-Phase genannt). Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 60 Multiversion Concurrency Control • Nehmen wir folgenden Schedule an: t RT1(x), WT1(x), RT2(x), WT2(y), RT1(y), WT1(y) Ist dieser Schedule serialisierbar? • Nehmen wir nun an, dass zu dem Zeitpunkt, wo T1 Objekt y lesen möchte, immer noch eine Kopie des “alten” Werts von y existiert, der zum Zeitpunkt t (vor widersprüchlichem WT2(y)) galt. • Somit könnten wir einen Schedule verwenden, der äquivalent zu folgendem serialisierbaren Schedule wäre: RT1(x), WT1(x), RT2(x), RT1(y), WT2(y), RT1(y), WT1(y) Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 62 Multiversion Concurrency Control •Speichern wir alte Versionen überschriebener Objekte, so müssen Leseoperationen nicht mehr blockiert werden. •In diesem Fall können Leseoperation zwar veraltete Daten lesen, aber diese Daten entsprechen einem konsistenten Zustand. •Problematisch bei multiversion concurrency control ist der Verwaltungsmehraufwand und der Speicherbedarf, die durch Versionierung nötig ist. •Einige kommerzielle DBMS implementieren diese Technik, z.B., Oracle, SQL Server, PostgreSQL. Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 63 Zusammenfassung Nebenläufige Transaktionen • Transaktionen erfüllen die ACID-Eigenschaften. • Transaktionen werden durch Scheduler in einen Schedule zusammengefasst. • Es können im allgemeinen Anomalien auftreten. 2-Phasen-Sperr-Protokoll (2PL) • Wichtige Konzepte: Serialisierbarkeit und Sperren verschiedener Art (Shared, Exclusive) • 2PL, insb. Strict-2PL ist das am weitesten verbreitete Protokoll für nebenläufige Transaktionen. Spezialisierte / erweiterte Locking Techniken • Für dynamische Datenbanken • Für Baum-Indizes • Für Objekte verschiedener Granularität Nebenläufigkeit ohne Sperren • Optimistischer Ansatz • Versionierung Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen 64