9. Transaktionsverwaltung Der Scheduler Architektur der Transaktionsverwaltung T1 T2 Tn Sperrende und nicht-sperrende Verfahren TransaktionsManager (TM) Transaktionen in SQL-Systemen Transaktionsmonitore Scheduler (SC) korrekter Schedule (bestehend aus r, w, c, a) Speicher Manager (SM) Recovery Manager (RM) Puffer Manager (PM) DB VL Datenbank-Implementierungstechniken – 9–1 Transaktionsoperationen VL Datenbank-Implementierungstechniken – 9–2 Zustände einer Transaktion active Transaktionsklammern BOT (Begin of Transaction) execute EOT (End of Transaction) initial Schritte: delay BOT running delayed restart r (read), retry w (write), reject a (abort), und c (commit). stop aborted EOT committed stopped t = {r|w}∗ (a|c) VL Datenbank-Implementierungstechniken – 9–3 VL Datenbank-Implementierungstechniken – 9–4 Behandlung eines Schritts Aggressive Scheduler ausführen (execute) ein Scheduler ist aggressiv, wenn er Konflikte zuläßt Transaktion → Zustand running. und dann versucht, aufgetretene Konflikte zu erkennen und aufzulösen verzögern (delay) Transaktion → Zustand delayed maximiert die Parallelität von Transaktionen zurückweisen (reject) Risiko: Transaktionen werden erst am Ende ihrer Transaktion → Zustand aborted Ausführung zurückgesetzt VL Datenbank-Implementierungstechniken – 9–5 Konservative Scheduler VL Datenbank-Implementierungstechniken – 9–6 Sperrmodelle ein Scheduler arbeitet konservativ, wenn er Konflikte möglichst vermeidet, dafür aber Verzögerungen von Transaktionen in Kauf nimmt erlauben nur eine geringe Parallelität von Schreib- und Lesesperren in folgender Notation: rl(x): Lesesperre (engl. read lock ) auf einem Objekt x wl(x): Schreibsperre (engl. write lock ) auf einem Objekt x Transaktionen Entsperren ru(x) und wu(x), oft zusammengefaßt u(x) für engl. unlock minimieren den Rücksetzungsaufwand für abgebrochene Transaktionen im Extremfall findet keine Parallelisierung von Transaktionen mehr statt, d.h., es werden immer alle Transaktionen bis auf eine verzögert VL Datenbank-Implementierungstechniken – 9–7 VL Datenbank-Implementierungstechniken – 9–8 Verklemmungen Sperrdisziplin Schreibzugriff w(x) nur nach Setzen einer t1 wl(x) Schreibsperre wl(x) möglich Lesezugriffe r(x) nur nach d rl(x) oder wl(x) erlaubt nur Objekte sperren, die nicht bereits von einer anderen Transaktion gesperrt wl(y) delay → wl(y) wl(x) Verklemmung! nach rl(x) nur noch wl(x) erlaubt, danach auf x keine Sperre mehr; Sperren derselben Art werden maximal einmal gesetzt nach u(x) durch ti darf ti kein erneutes rl(x) oder wl(x) ausführen t2 ← delay Alternativen: Verklemmungen werden erkannt und beseitigt Verklemmungen werden von vornherein vermieden vor einem commit müssen alle Sperren aufgehoben werden VL Datenbank-Implementierungstechniken – 9–9 Erkennung und Auflösung VL Datenbank-Implementierungstechniken – 9–10 Livelock-Problem 1. T1 sperrt A Wartegraph 6 5 4 2. T2 will A sperren, muß aber warten neue Sperre 1 2 3. T3 will danach A sperren, muß auch warten 4. T1 gibt A frei 5. T3 kommt vor T2 an eine Zeitscheibe, sperrt A 3 Auflösen durch Abbruch einer Transaktion, Kriterien: 6. T2 will weiterhin A sperren, muß aber warten Anzahl der aufgebrochenen Zyklen, 7. T4 will danach A sperren, muß auch warten Länge einer Transaktion, 8. T3 gibt A frei Rücksetzaufwand einer Transaktion, 9. T4 kommt vor T2 an die nächste Zeitscheibe ... Wichtigkeit einer Transaktion, ... VL Datenbank-Implementierungstechniken – 9–11 VL Datenbank-Implementierungstechniken – 9–12 Zwei-Phasen-Sperr-Protokoll Sperrprotokolle: Notwendigkeit T2 #Sperren T1 wl(x) w(x) u(x) wl(x) w(x) u(x) wl(y) w(y) u(y) 2PL AnforderungsPhase FreigabePhase Zeit wl(y) w(y) u(y) VL Datenbank-Implementierungstechniken – 9–13 T1 Striktes Zwei-Phasen-Sperr-Protokoll #Sperren Konflikt bei Nichteinhaltung des 2PL VL Datenbank-Implementierungstechniken – 9–14 T2 u(x) wl(x) wl(y) .. . S2PL AnforderungsPhase u(x) u(y) Zeit wl(y) .. . Freigabe-Phase vermeidet kaskadierende Abbrüche! VL Datenbank-Implementierungstechniken – 9–15 VL Datenbank-Implementierungstechniken – 9–16 #Sperren #Sperren Konservatives 2PL-Protokoll C2PL Sperrgranulate Granularitätshierarchien in Datenbanken Hierarchische Sperren CS2PL FreigabePhase Baumprotokolle für Baumindexe Zeit Zeit AnforderungsPhase AnforderungsPhase FreigabePhase vermeidet Deadlocks! VL Datenbank-Implementierungstechniken – 9–17 Granularitätshierarchien in RDBS VL Datenbank-Implementierungstechniken – 9–18 Hierarchische Sperren Granularitätshierarchien Sperren pflanzen sich nach unten (in Richtung der Blätter) fort Datenbank Datenbank Relation Datei Tupel Cluster Attribut Seite Logisch Physisch Sperren dürfen nicht von oben (von der Wurzel her) überschrieben werden Zusätzlich: intentionale Sperren (engl. intentional locks) Warnungen vor Sperren, die sich in der Hierarchie weiter unten befinden irl (intentionale Lesesperre) und iwl (intentionale Schreibsperre) VL Datenbank-Implementierungstechniken – 9–19 VL Datenbank-Implementierungstechniken – 9–20 Kompatibilitätsmatrix Kompatibilitätsmatrix für elementare Sperren rlj (x) wlj (x) für hierarchische Sperren rli (x) wli (x) √ — — — rlj (x) wlj (x) irlj (x) iwlj (x) riwlj (x) rli (x) wli (x) irli (x) iwli (x) riwli (x) √ √ — — — — — — — — √ √ √ √ — √ √ — — — √ — — — — VL Datenbank-Implementierungstechniken – 9–21 Ablauf des hierarchischen Sperren 1. Sperren werden auf einem Pfad in der Reihenfolge von der Wurzel zum Zielobjekt gesetzt 2. Datenobjekt, auf dem gearbeitet werden soll, wird gesperrt: Schreib- oder Lesesperre (dabei Sperrenverträglichkeitsmatrix beachten!) 3. Alle anderen Knoten auf dem Pfad bekommen intentionale Sperren 4. Sperren können verschärft werden, das heißt ein rl kann zum wl werden, ein irl zum rl und ein irl zum iwl VL Datenbank-Implementierungstechniken – 9–22 Hierarchisches Sperren: Beispiel I T1 T2 BetriebsDB Mitarbeiter rl (implizit) iwl (explizit) (BetriebsDB) Relation rl (explizit) Tamara, ..., Mario BetriebsDB Datenbank irl (explizit) Tupel (Tamara Jagellowsk) Relation ... (Mitarbeiter) ... (Projekt) Mitarbeiter iwl (explizit) Tupel (Mario De Monti) 5. Freigabe erfolgt in umgekehrter Reihenfolge Gehalt, ..., Telefon rl (implizit) VL Datenbank-Implementierungstechniken – 9–23 Attribut (Gehalt) ... Attribut (Telefon) VL Datenbank-Implementierungstechniken – 9–24 Hierarchisches Sperren: riwl Hierarchisches Sperren: Beispiel II T1 T2 BetriebsDB Mitarbeiter Tamara iwl (explizit) (BetriebsDB) Relation irl (explizit) irl (explizit) BetriebsDB Datenbank irl (explizit) Tupel (Tamara Jagellowsk) Relation ... (Mitarbeiter) ... (Projekt) Tupel (Mario De Monti) Mitarbeiter iwl (explizit) Tamara iwl (explizit) T1 sperrt T2 sperrt BetriebsDB Gehalt Attribut (Gehalt) ... Attribut (Telefon) irl (explizit) (BetriebsDB) Mitarbeiter Relation riwl (explizit) Mitarbeiter Relation ... (Mitarbeiter) irl (explizit) (Projekt) Tamara, ..., Mario rl (implizit) Tupel Tamara (Tamara Jagellowsk) wl (explizit) rl (explizit) BetriebsDB Datenbank riwl (explizit) ... Mario Tupel rl (explizit) (Mario De Monti) Telefon wl (explizit) VL Datenbank-Implementierungstechniken – 9–25 Sperren in Indexstrukturen VL Datenbank-Implementierungstechniken – 9–26 Beispiel Baumprotokoll lock A; lock B; unlock A; lock D Baumprotokoll 1. Objekt o kann nur dann von T gesperrt werden, wenn sein direkter Vorgänger bereits von T gesperrt ist A 2. erste Regel gilt nicht für die erste Sperre einer Transaktion B 3. Sperren können jederzeit wieder freigegeben werden 4. Kein Objekt kann innerhalb einer Transaktion T zweimal gesperrt werden D E F VL Datenbank-Implementierungstechniken – 9–27 C G VL Datenbank-Implementierungstechniken – 9–28 Baumprotokolleigenschaften Ablauf im Baumprotokoll T1 lock A lock B lock D unlock B T2 T3 Baumprotokoll erzwingt nicht 2PL! Falls alle Transaktionen dem Baum-Protokoll genügen, ist jeder korrekte Schedule serialisierbar. lock B lock C lock E unlock D lock F unlock A lock G unlock C unlock E lock E unlock F unlock B unlock G unlock E VL Datenbank-Implementierungstechniken – 9–29 Nicht-sperrende Verfahren VL Datenbank-Implementierungstechniken – 9–30 Zeitmarkenverfahren Zeitstempelbasierte Verfahren erzwingen eine korrekte Reihenfolge der Bearbeitungsschritte mittels geeigneter Markierungen der Transaktionen Serialisierbarkeitstester verwalten einen Zeitmarken sind eindeutig und werden fortlaufend vergeben. Für jedes Datenobjekt x werden zwei Werte geführt: max-r-scheduled[x]: Konfliktgraphen, und realisieren daher eine direkte Überprüfung der Konfliktserialisierbarkeit Zertifikatoren führen zunächst die kompletten Transaktion aus und versuchen erst am Ende festzustellen, ob die Transaktion gemäß dem Serialisierbarkeitsbegriffs abgelaufen sind VL Datenbank-Implementierungstechniken – 9–31 Variable, die den Zeitstempel der letzten Leseoperation auf x enthält max-w-scheduled[x]: Variable, die den Zeitstempel der letzten Schreiboperation auf x enthält VL Datenbank-Implementierungstechniken – 9–32 Timestamp-Ordering-Regel Basis-TO-Algorithmus Eine Operation pi [x] wird vor qk [x] genau dann ausgeführt, wenn ts(Ti ) < ts(Tk ) gilt. p und q: inkompatible Operationen der Transaktionen Ti bzw. Tk (i 6= k) auf einem Objekt x ts(Ti ) bzw. ts(Tk ) sind Zeitstempel der Transaktionen Ti bzw. Tk Formal: Sind pi (x) und qj (x) in Konflikt, so gilt: pi (x) wird vor qj (x) ausgeführt ⇐⇒ ts(Ti ) < ts(Tj ). if pi [x] ist eingetroffen then if pi [x] ist ri [x] then if ts(Ti ) < max-w-scheduled[x] then weise Operation zurück; else max-r-scheduled[x] := max(max-r-scheduled[x], ts(Ti )); gebe Operation weiter; else /* pi [x] ist wi [x] */ if ts(Ti ) < max-w-scheduled[x] or ts(Ti ) < max-r-scheduled[x] then weise Operation zurück; else max-w-scheduled[x] := ts(Ti ); gebe Operation weiter; VL Datenbank-Implementierungstechniken – 9–33 Nachteile und Vorteile der TO-Verfahren Nachteil: Anfälligkeit gegen stark variierende Laufzeiten von Transaktionen lang andauernde Transaktionen bearbeiten ihre letzten Schritte längere Zeit nach der Vergabe der Zeitmarke kommen damit mit diesen Schritten mit größerer Wahrscheinlichkeit „zu spät“ Vorteil: einfache Realisierung in verteilten Systemen VL Datenbank-Implementierungstechniken – 9–35 VL Datenbank-Implementierungstechniken – 9–34 Zeitmarkenverfahren: Ablauf T1 ts = 200 T2 ts = 150 T3 ts = 175 read B read A read C write B write A A B C mrs mws mrs mws mrs mws 0 0 0 0 0 0 0 0 200 0 0 0 150 0 200 0 0 0 150 0 200 0 175 0 150 0 200 200 175 0 150 200 200 200 175 0 write C ⇓ 150 200 200 200 175 ⇓ abort 150 200 200 200 175 0 VL Datenbank-Implementierungstechniken – 9–36 Optimiertes Zeitmarkenverfahren Opt. Zeitmarkenverfahren: Ablauf Optimierte BTO-Regel: T1 T2 T3 A ts = 200 ts = 150 ts = 175 bei negativen Ausgang des Vergleichs einer schreibenden Transaktion mit der max-w-scheduled-Marke wird das Schreiben ignoriert sofern kein Konflikt mit der max-w-scheduled-Marke auftritt alter Wert von max-w-scheduled wird übernommen und die Transaktion läuft weiter read A C mrs mws mrs mws 0 0 0 0 150 0 0 0 read C 150 0 175 0 200 175 0 write A 150 √ 150 200 (⇓) 175 0 write A √ ; „Optimierung für blindes Schreiben“ VL Datenbank-Implementierungstechniken – 9–37 Livelocks im Zeitmarkenverfahren T1 ts = 100 T2 ts = 110 T10 ts = 120 T20 ts = 130 write B write A read A ⇓ write B read B ⇓ write A read A ⇓ VL Datenbank-Implementierungstechniken – 9–38 Serialisierbarkeitsgraphentester A Problem: Bereinigen des Konfliktgraphens B mrs mws mrs mws 0 0 0 0 0 0 0 100 0 110 0 100 0 110 ⇓ 0 100 0 110 0 120 0 110 0 120 ⇓ 0 130 0 120 0 130 ⇓ 0 120 r0 (x) w1 (x)w1 (y1 )c1 ... wn (x)wn (yn )cn w0 (z) | {z } | {z } T1 Tn t 0 t t 1 2 . . . t VL Datenbank-Implementierungstechniken – 9–39 n VL Datenbank-Implementierungstechniken – 9–40 Optimistische Verfahren: Phasen Validierungskriterium 1. Ausführungsphase (execute): Transaktion wird ausgeführt, d.h. alle Lese- und Schreiboperationen; Schreiboperationen jedoch nicht in der Datenbank, sondern auf einer lokalen Kopie des Datenbankobjekts im Puffer 2. Validierung (validate) für jede Transaktion, die commit ausführen will, wird geprüft, ob sie im Sinne der Konfliktserialisierbarkeit korrekt abgelaufen ist 3. Persistenzphase (persist): falls keine Konflikte aufgetreten sind, Zurückschreiben aller geänderten Datenbankobjekte in den stabilen Speicher (d.h. in die Datenbank) Transaktionszähler T C ∀Ti , Tj : n(Ti ) < n(Tj ) mit n(Ti ) =Wert von TC nach der Validierung von Ti : 1. Ti beendet seine valpersist-Phase, bevor Tj diese beginnt. 2. x ∈ ws(Ti ) ∩ rs(Tj ) ⇒ Ti beendet valpersist-Phase, bevor Tj x liest. 3. x ∈ rs(Ti ) ∩ ws(Tj ) ⇒ Ti liest x vor Beginn der valpersist-Phase von Tj ws(Ti ) ist write-set von Ti (alle von Ti geschriebenen DB-Objekte) rs(Ti ) ist read-set von Ti (gelesene DB-Objekte) VL Datenbank-Implementierungstechniken – 9–41 Optimistische Scheduler execute T 1 T 2 T 3 T 1 T 2 T 3 execute execute validate validate execute execute validate Optimistische Scheduler (II) Rückwärtsvalidierung: persist persist Test von rs(Ti ) gegen ws(Tj ) für bereits Rückwärtsvalidierung persist validate VL Datenbank-Implementierungstechniken – 9–42 persist Vorwärtsvalidierung abgeschlossene Tj ausgenommen davon sind Tj , die bereits vor Beginn von Ti ein commit ausgeführt haben bei Konflikt: Zurücksetzen von Ti im Beispiel: Test von rs(T1 ) gegen ws(T2 ) und ws(T3 ) Vorwärtsvalidierung Test von ws(Ti ) gegen rs(Tj ) für Transaktionen Tj , execute die aktiv sind (also in der Ausführungsphase) bei Konflikt: Zurücksetzen von Tj im Beispiel: ws(T1 ) gegen rs(T2 ) und rs(T3 ) VL Datenbank-Implementierungstechniken – 9–43 VL Datenbank-Implementierungstechniken – 9–44 Multiversionen-Synchronisation MVCC: Prinzip engl. multiversion concurrency control (MVCC) Umsetzung in Oracle, InterBase, PostgreSQL, . . . jede Änderungsoperation w erzeugt neue Version des Datenobjektes Leseoperationen können Version wählen Motivation Versionen sind transparent für Applikationen Geg. Schedule s: s = r1 (x)w1 (x)r2 (x)w2 (y)r1 (y)w1 (z)c1 c2 • s 6∈ CSR • aber tolerierbar, wenn r1 (y) alte Version von y lesen könnte, so dass r1 (y) konsistent zu r1 (x) ist • dann: s äquivalent zu s0 = t1 t2 Vorteile: Entkopplung von Lese- und Änderungsoperationen ; Lesetransaktion hat Sicht auf Datenbank wie bei BOT keine Synchronisation von Lesetransaktionen sowie gegen Lesetransaktionen notwendig ; Reduzierung der Konfliktwahrscheinlichkeit Synchronisation von Änderungsoperationen durch andere Verfahren (Sperrverfahren, Zeitstempel) VL Datenbank-Implementierungstechniken – 9–45 MVCC: Beispiel T1 VL Datenbank-Implementierungstechniken – 9–46 MVCC: Versionenverwaltung T2 Aufgabe: Bestimmung der zu lesenden Version TR globaler Transaktionszähler T N C (transaction w(x0 → x1 ) w(y0 → y1 ) number count) Commit-Zeitstempel cts und BOT-Zeitstempel bts r(y0 ) für Transaktion Schreibzeitstempel wts(x) für Objekt x commit w(x1 → x2 ) commit r(x0 ) VL Datenbank-Implementierungstechniken – 9–47 VL Datenbank-Implementierungstechniken – 9–48 MVCC: Versionenverwaltung (II) MVCC: Versionenverwaltung (III) Aufgabe: Freigabe nicht mehr benötigter Versionen Commit einer Änderungstransaktion TU : aktueller T N C-Wert als Commit-Zeitstempel cts sowie Inkrementieren von T N C modifiziertes Objekt: Schreibzeitstempel wts(x) = cts(TU ) Lesetransaktion TR : aktueller T N C-Wert als BOT-Zeitstempel: (garbage collection) BOT-Zeitstempel der ältesten Lesetransaktion: bts_min Version xi von Objekt x kann gelöscht werden, falls neuere Version xj existiert, so dass gilt: wts(xi ) < wts(xj ) < bts_min bts(TR ) = T N C hat Zugriff auf jüngste Version von x mit: wts(x) < bts(TR ) VL Datenbank-Implementierungstechniken – 9–49 Transaktionen in SQL-DBS VL Datenbank-Implementierungstechniken – 9–50 Bedeutung der Isolationsstufen Aufweichung von ACID in SQL-92: Isolationsebenen set transaction [ { read only | read write }, ] [isolation level { read uncommitted | read committed | repeatable read | serializable }, ] [ diagnostics size ...] read uncommitted schwächste Stufe: Zugriff auf nicht geschriebene Standardeinstellung: set transaction read write, isolation level serializable repeatable read kein nonrepeatable read, aber Phantomproblem Daten, nur für read only Transaktionen statistische und ähnliche Transaktionen (ungefährer Überblick, nicht korrekte Werte) keine Sperren → effizient ausführbar, keine anderen Transaktionen werden behindert read committed nur Lesen endgültig geschriebener Werte, aber nonrepeatable read möglich kann auftreten serializable garantierte Serialisierbarkeit VL Datenbank-Implementierungstechniken – 9–51 VL Datenbank-Implementierungstechniken – 9–52 Isolationsebenen II Isolationsebenen: read committed Dirty Unrepeatable Phantom T1 Read Read Read Read Uncommitted + + + select A from R → alter Wert Read Committed – + + Repeatable Read – – + Serializable – – – Isolationsebene select A from R → alter Wert T2 update R set A = neu commit select A from R → neuer Wert VL Datenbank-Implementierungstechniken – 9–53 Isolationsebenen: serializable T1 VL Datenbank-Implementierungstechniken – 9–54 Oracle I Unterstützung der Isolationsebenen Read Committed T2 und Serializable set transaction isolation level serializable darüber hinaus: Read-Only -Modus (nicht Bestandteil von SQL-92) set transaction ... update R set A = neu where C = 42 commit set transaction isolation level read committed; set transaction isolation level serializable; set transaction isolation level read only; update R set A = neu where C = 42 → Fehler VL Datenbank-Implementierungstechniken – 9–55 VL Datenbank-Implementierungstechniken – 9–56 Oracle II Transaktionsmonitore Isolationsebenen für eine Menge von Transaktionen alter session set isolation_level Isolationsebene; Explizite Kommandos zum Setzen von Sperren lock table Tabelle in row share mode; lock table Tabelle in share mode; lock table Tabelle in row exclusive mode; lock table Tabelle in share row exclusive mode; lock table Tabelle in exclusive mode; Presentation Server Presentation Server Workflow Controller Transaction Server Transaction Server VL Datenbank-Implementierungstechniken – 9–57 Transaktionsmonitore: Architektur VL Datenbank-Implementierungstechniken – 9–58 Vorteile eines Transaktionsmonitors Präsentations-Server, engl. presentation server realisiert als Client die Kommunikation mit dem Anwender (Kommandosprache oder Menü-gesteuerte Oberflächen zum Absetzen von Transaktionen etc.) Workflow-Kontroller (engl. workflow controller ) erzwingt die Zuteilung (engl. routing) der Transaktionsanforderungen an verschiedenen DBMS und realisiert z.B. das Zwei-Phasen-Commit-Protokoll Transaktions-Server (engl. transaction server ) realisieren die Kopplung der lokalen DBMS mit dem Transaktionsmonitor bietet eine einheitliche Schnittstelle für die Transaktionsprogrammierung auf verschiedenen DBMS bei verteilter Verarbeitung Übernahme der Routing der Transaktionen und der Erzwingung von Commit-Protokollen Übernahme von Systemfunktionen wie Lastbalancierung, Fehlerkontrolle und Systemkonfiguration kann Funktionen wie das Schreiben eines Log-Buchs oder die Kommunikationsüberwachung übernehmen Transaktions-Server eines TP-Monitors kann auch Daten einkapseln, die nicht von einem DBMS mit voller Transaktionsfunktionalität verwaltet werden VL Datenbank-Implementierungstechniken – 9–59 VL Datenbank-Implementierungstechniken – 9–60