Datenbanken Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Marc Stelzner (Übungen) Torben Matthias Kempfert (Tutor) Maurice-Raphael Sambale (Tutor) Transaktionsverwaltung Architecture of a DBMS / Course Outline Applications Anwendungen SQL Interface SQL-Schnittstelle Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003. Webformulare Web Forms Ausführer Executor Parser Parser Operator Evaluator Operator-Evaluierer Optimizer Optimierer Transaction Transaktions Manager Dateiverwaltungsund Zugriffsmethoden Files and Access Methods Verwalter Puffer-Verwalter Buffer Manager Lock SperrVerwalter Manager Verwalter für Manager externen Disk Space RWiederecovery herstellungsManager Verwalter dieser Teil des thiscourse Kurses SQL-Kommandos SQLCommands Speicher DBMS Dateien für Daten und Indexe... data files, indices, Fall 2008 Datenbank Database Systems Group — Department of Computer Science — ETH Zürich 3 2 Danksagung • Diese Vorlesung ist inspiriert von den Präsentationen zu dem Kurs: „Architecture and Implementation of Database Systems“ von Jens Teubner an der ETH Zürich • Graphiken und Code-Bestandteile wurden mit Zustimmung des Autors (und ggf. kleinen Änderungen) aus diesem Kurs übernommen 3 Eine einfache Transaktion The “Hello World” of Transaction Management • Ab und zu verwende ich meine Kreditkarte, um Geld I My bank issued me a debit card to access my account . von meinem Konto abzuheben I Every once in a while, I’d use it at an ATM to draw some • Der Bankautomat führt folgende Transaktion auf der money from my account, causing the ATM to perform a Datenbasis der Bank aus transaction in the bank’s database. 1 2 3 I bal r ead bal ( acct no) ; bal bal − 100 CHF; wr i t e bal ( acct no, bal) ; My account is properly updated to reflect the new balance. • Wenn alles fehlerfrei abläuft, wird mein Konto richtig verwaltet 4 Nebenläufiger Concurrent Access Zugriff The problem is: My wife has a card for the account, too. Mein Frau verwendet eine Karte für das gleiche Konto... I We might end up using our cards at different ATMs at the same time. verwenden wir unsere Karten zur gleichen • Eventuell Zeit me bal bal my wife DBstate r ead ( acct) ; bal r ead ( acct) ; bal bal − 200 ; bal − 100 ; wr i t e ( acct, bal) ; wr i t e ( acct, bal) ; I 1200 1200 1200 1200 1100 1000 The first update was lost during this execution. Lucky me! • Die erste Aktualisierung des Kontos ist verlorengegangen: Mich freut‘s! Allerdings... Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 201 5 ... kann es auch nach hinten losgehen Another Example • Diesmal wird Geld von einem Konto auf ein anderes I This time, I want to transfer money over to another account . transferiert 1 2 3 4 5 6 / / Subtract money from source (checking) account chk bal r ead bal ( chk acct no) ; chk bal chk bal − 500 CHF; wr i t e bal ( chk acct no, chk bal) ; / / Credit money to the target (saving) account sav bal r ead bal ( sav acct no) ; sav bal sav bal + 500 CHF; wr i t e bal ( sav acct no, sav bal) ; • I Bevor die Transaktion zum Schritt is6 kommt, wird die Before the transaction gets to step 6, its execution interrupted/ cancelled (power outage, disk failure, software Ausführung abgebrochen bug, ...). My money is lost / . (Stromversorgungsproblem, Plattenproblem, Softwarefehler, ...). • Mein Geld ist verschwunden Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 202 6 ACID-Eigenschaften und Transaktionen Um diese und viele andere Effekte zu vermeiden, stellen DMBS folgende Eigenschaften sicher • Atomicity: Entweder werden alle oder keine Werteänderungen einer Transaktion in den Datenbankzustand übernommen • Consistency: Eine Transaktion überführt einen konsistenten Zustand (FDs, Integritätsbedingungen) in einen anderen • Isolation: Eine Transaktion berücksichtigt bei der Berechnung keine Effekte andere parallel laufender Transaktionen • Durability: Effekte einer erfolgreichen Transaktion werden persistent gemacht 7 Anomalien: Lost Update • Wir haben schon „Lost Update“ im Beispiel betrachtet • Effekte einer Transaktion gehen verloren, weil eine andere Transaktion geänderte Werte unkontrolliert überschreibt 8 Anomalien: Inconsistent Anomalies: Inconsistent ReadRead Consider the money transfer example (slide 202), expressed in Betrachten SQLsyntax: wir die Überweisung in SQL Transaction 1 Transaction 2 UPDATE Account s SET bal ance = bal ance - 500 WHERE cust omer = 4711 AND account _t ype = ’ C’ ; SELECT SUM( bal ance) FROM Account s WHERE cust omer = 4711; UPDATE Account s SET bal ance = bal ance + 500 WHERE cust omer = 4711 AND account _t ype = ’ S’ ; ITransaktion 2 sieht einen inkonsistenten Transaction 2 sees an inconsistent database state. Zustand Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 206 9 Anomalien: Dirty Read Anomalies: Dirty Read An anderen Tag heben und ich zur At a einem different day, my wife and me again end upmeine in front ofFrau an ATM at roughly the same time: gleichen Zeit Geld vom Automaten ab me my wife DBstate bal r ead ( acct) ; bal bal − 100 ; wr i t e ( acct, bal) ; bal bal r ead ( acct) ; bal − 200 ; abor t ; wr i t e ( acct, bal) ; 1200 1200 1100 1100 1100 1200 900 My wife’s transaction has already read the modified account einen IDie Transaktion meiner Frau hat schon balance before my transaction was rolled back. geänderten Zustand gelesen bevor meine Transaktion zurückgerollt wird Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 207 10 Nebenläufige Ausführung Concurrent Execution • Ein Steuerprogramm (Scheduler) entscheidet über die Ausführungsreihenfolge der nebenläufigen I The scheduler decides the execution order of concurrent Datenbankzugriffe database accesses. Client 1 Client 2 3 2 1 2 1 Client 3 3 2 1 Scheduler 2 1 1 Access and Storage Layer 11 Datenbankobjekte und Zugriffe daraus • Wir nehmen ein vereinfachtes Datenmodell an – Eine Datenbank besteht aus einer Menge von benannten Objekten. In jedem Zustand hat ein Objekt einen Wert. – Transaktionen greifen auf ein Objekt o mit den Operationen read und write zu • In einer relationalen DB haben wir: Objekt ≙ Komponente eines Tupels 12 Transaktion: Definition Transactions A database transaction T is a (strictly ordered) sequence of steps. • Eine Datenbanktransaktion ist eine (strikt geordnete) Each step is a pair of an accessoperation applied to an object. Folge von Schritten, wobei ein Schritt eine I Transaction T = hs1, . . . , sn i Zugriffsoperation auf ein Objekt ist I Step si = (ai , ei ) – Transaktion T = <s1, ..., sn> I Access operation – Schritt si = (ai, eai)i 2 { r (ead), w(r i t e)} The length of a transaction its number – Zugriffsoperation ai ∈T{isr(ead), w(rite)of} steps |T| = n. • Die Länge einer Transaktion ist definiert als die We could write the money transfer transaction as Anzahl der Schritte |T| = n 3 • Beispiel: T =ead, <(read, Checking), (write, Checking), T = h(r Checking), (wr i t e, Checking), 2 Saving), (r ead, Saving), (wr(read, i t e, Saving) i (write, Saving)> or, more concisely, • Kurzform: T = <r(C), w(C), r(S), w(S)> T = hr(C), w(C), r(S), w(S)i . 1 13 Ausführungspläne edules Ein (Ausführungs-)Plan (Schedule) S für eine gegebene schedule Sforvon a given set of transactions T =, ..., { T1,T. . }. ,ist Tn }eine is anFolge Menge Transaktionen T = {T 1 n rbitrary of execution steps vonsequence Ausführungsschritten 2 1 S(k) = (Tj , aS(k) k j=, a1.i, .e. im ) , k = 1...m i , ei ) = (T 1 so dass uch that 1. Sallgenau aller Transaktionen und 1. Scontains steps die of allSchritte transactions an nothing elseenthält and 2. the orderdie among steps in each transaction Tj is preserved: (ap2. , epOrdnung ) < (aq , eqder ) in Schritte Tj ) (Tj ,jeder ap , ep )Transaktion < (Tj , aq , eq )beibehalten in S . wird We sometimes (awrite p , ep) < (aq , eq) in Tj, dann (Tj , ep , ep) < (Tj , aq , eq) in SS= hr1(B), r2(B), w 1(B), w 2(B)i o mean Wir schreiben S = <r1(B), r2(B), w1(B), w2(B)> für S(1) = (T1, r ead, B) S(3) = (T1, wr i t e, B) S(1) =2(T , read, B) S(2) = (T , r 1ead, B) S (4) = (T2, wr i t e,S(3) B) = (T1, write, 14 Serielle Ausführung Serial Execution Ein spezieller Plan ist die serielle Ausführung • EinOne Plan heißtschedule seriell isgenau dann, wenn für jede particular serial execution. Transaktion Tj Sis alleserial ihreiff,Schritte direkt t ransaction Tj , all I A schedule for each contained its steps follow each otherSchritte (no interleaving of t ransactions). aufeinanderfolgen (ohne anderer Transaktion dazwischen) 2 Consider again the ATM example from slide 201. 2 Betrachten das Geldautomatenbeispiel: I S= wir hr 1(B), r2(B), w 1(B), w 2(B)i 1 1 schedule is not serial. • S = I <rThis 1(B), r2(B), w1(B), w2(B)> • Dieser Plan ist nicht seriell If my wife had gone t o the bank one hour later, “our” schedule been serial. Wennprobably meinewould Frauhave später zum Automaten geht, ergibt 2 1 sich I S= hr1(B), w 1(B), r2(B), w 2(B)i 2 1 • S = <r1(B), w1(B), r2(B), w2(B)> • Dieser Plan ist seriell Fall 2008 Syst ems Group — Depart ment of Comput er Science — ETH Zürich 212 15 Korrektheit der seriellen Ausführung • Anomalien können nur auftreten, wenn die Schritte mehrerer Transaktionen verschränkt ausgeführt werden (Multi-User-Modus) • Falls alle Transaktionen bis zum Ende ausgeführt werden (keine Nebenläufigkeit), treten keine Anomalien auf • Jede serielle Ausführung ist korrekt • Verzicht auf nebenläufige Ausführung nicht praktikabel, da zu langsam (Wartezeit auf Platten) • Jede verschränkte Ausführung, die einen gleichen Zustand wie eine serielle erzeugt, ist korrekt 16 Konflikte • Was bedeutet es, dass ein Plan S äquivalent zu einem anderen S‘ ist? • Manchmal kann man einfach Teilschritte aus verschiedenen Transaktionen in einem Plan umordnen – Nicht jedoch die Teilschritte innerhalb einer einzelnen Transaktion (sonst eventuell anderes Ergebnis) • Zwei Operationen (a, e) und (a‘, e‘) stehen in Konflikt zueinander (a, e) ⇎ (a‘, e‘), wenn ihre Ausführungs-reihenfolge bedeutsam ist – Umordnung in einem Plan dann nicht möglich • Jeder Plan S‘, der durch legale Umordnung von S generiert werden kann, heißt konfliktäquivalent zu S 17 Konflikte Ausführbare Definition eines Konflikts: Conflicts Conflicts • Based Zweion Operationen und a‘, e‘) asind income Konflikt our r ead/ wBased r i t e(T model, we can come with more on oure) r ead/ wr(T i tj,eup model, we can up with a m i, a, zueinander indefinition S, wenn machine-friendly of a conflictdefinition . machine-friendly of a conflict . –I – – 0 0 0 0 Twozu operations (TIi , a,Two e) and (T are ine) conflict inj , Sif j , a , e )(T operations and (T a(T ,e are sie zwei verschiedenen Transaktionen gehören i , a, i ≠) T j) in conflict i theygleiche belong Objekte to two1.different transactions(T =und Tj ), transactions(Ti 6 they belong to (e two = T sie1.das referenzieren = different e‘)i 6 0 2. they access the samethey database object, i.e., e database = e , and object, i.e., e = e0 access same mindestens eine der 2. Operationen athe oder a‘ eine 3. at least one of them wr i t e operation. 3. is ataleast one of them is a wr i t e operation. Schreiboperation ist I This inspires the following conflict matrix: I This inspires the following conflict matrix: • Hierdurch ist eine sog. Konfliktmatrix definiert r ead wr i t e r ead wr i t e r ead ⇥ r ead ⇥ wr i t e ⇥ ⇥ wr i t e ⇥ ⇥ I Conflict relation ≺ : Konfliktrelation S I Conflict relation 0 0 ≺ S: • Konfliktrelation (T i , a, e) ≺ S (Tj , a , e ) (Ti , a, e) ≺ S (Tj , a0, e0) := := Ti 6 (a, e) = (a0, e0) ^ (Ti , a, e) occurs before = Tj kommt vor (Tj , a0, e0) in S^ (a, e) = (a0, e0) ^ (Ti , a, e) occurs before (Tj , a0, e0) in 18 S^ T Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 215 Konflikt-Serialisierbarkeit • Ein Plan S heißt Konflikt-serialisierbar, gdw. er Konflikt-äquivalent ist zu einem seriellen Plan S‘ • Die Ausführung eines Konflikt-serialisierbaren Plans S ist korrekt (S braucht nicht seriell zu sein) • Korrektheit eines Plans kann anhand des Konfliktgraphen GS gezeigt werden (auch Serialisierungsgraph genannt) – Knoten von GS sind die Transaktionen Ti aus S – Kanten Ti ⟶ Tj werden hinzugefügt, gdw. S Operationen (Ti, a, e) und (Tj, a‘, e‘) enthält, so dass (Ti, a, e) ≺S (Tj, a‘, e‘) • S ist Konflikt-serialisierbar, wenn GS zyklenfrei ist 19 Serialisierungsgraph Serialization Graph Beispiel: ATM-Transaktion Example: ATM transactions (% slide 201) I I S= hr1(A), r2(A), w 1(A), w 2(A)i Konfliktrelation: Conflict relation: (T1, r , A) ≺ S (T2, w, A) (T2, r , A) ≺ S (T1, w, A) (T1, w, A) ≺ S (T2, w, A) T2 T1 ! not serializable nicht serialisierbar Beispiel: Example: TwoZwei moneyGeldtransfers transfers (% slide 202) I S= hr1(C), w 1(C), r2(C), w 2(C), r1(S), w 1(S), r2(S), w 2(S)i I Konfliktrelation: Conflict relation: (T1, r , C) ≺ S (T2, w, C) (T1, w, C) ≺ S (T2, r , C) (T1, w, C) ≺ S (T2, w, C) .. . Fall 2008 T2 T1 !serialisierba serializable r Systems Group — Department of Computer Science — ETH Zürich 217 20 Sperren im Anfrageplan Query Scheduling Können einen Scheduler bauen, der immer einen Canwir we build a scheduler that alwaysemits a serializable Query Scheduling schedule? serialisierbaren Plan generiert? Can weIdea: build a scheduler that alwaysemits a serializable Idee: schedule? I Require each transaction to Client 1 Client 2 Client 3 • Idea: Lasse jede eine obtainTransaktion a lock before it accesses 2 3 3 2 2 I Require each Client 1 Client 2 Client 3 1 transaction Sperre auf aakquirieren, data object o:to bevor 1 1 obtain a lock before it accesses 2 3 3 eina data Datum zugegriffen wird Scheduler 2 2 1 object o: 2 l ock o ; 2 ...access o ...; l ock o ; 3 unl ock o ; ...access o ...; 3 unl ock o ; 1 1 1 2 1 1 Scheduler 2 1 1 Access and Storage Layer This prevents concurrent Access and Storage Layer access to o. This prevents concurrent I I 1 access to o.wird ein nebenläufiger • Dadurch Zugriff auf o verhindert Fall 2008 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich Systems Group — Department of Computer Science — ETH Zürich 218 218 21 Sperr-Verwaltung • Falls eine Sperre nicht zugeteilt wird (z.B. weil eine andere Transaktion T‘ die Sperre schon hält), wird die anfragende Transaktion T blockiert • Der Verwalter setzt die Ausführung von Aktionen einer blockierten Transaktion T aus • Sobald T‘ die Sperre freigibt, kann sie an T vergeben werden (oder an eine andere Transaktion, die darauf wartet) • Eine Transaktion, die eine Sperre erhält, wird fortgesetzt • Sperren regeln die relative Ordnung der Einzeloperationen verschiedener Transaktionen 22 Aufgabe: • Reicht die Idee der Sperrverwaltung aus, um Serialisierbarkeit zu garantieren? ATM Transaction with Locking Transaction 1 Transaction 2 l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; DBstate 1200 l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; 1100 l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; 1000 23 ATM-Transaktion mit Sperren ATM Transaction with Locking Transaction 1 Transaction 2 l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; DBstate 1200 l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; 1100 l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; Fall 2008 1000 Systems Group — Department of Computer Science — ETH Zürich 221 24 Zwei-Phasen-Sperrverwaltung o-Phase (2PL) • DasLocking Zwei-Phasen-Sperrprotokoll (Two-Phase Locking, 2PL) führt eine Einschränkung The two-phase locking protocol posesweitere an additional restriction: ein I • Sobald eine Transaktion eine Sperre Once a transaction has released any lock, it must freigegeben not acquire anyhat, new darf lock. sie keine weiteren Sperren anfordern # gehaltene # of locks Sperren held Zeit time lock phase Sperrphase I release phase Freigabe-Phase • Zwei-Phasen-Sperrprotokoll wird in jedem Two-phase locking is the concurrency Datenbanksystem verwendetcontrol protocol used in database systems today. 25 Aufgabe: o-Phase Locking (2PL) nicht auf einmal angefordert • Warum werden Sperren bzw. zurückgegeben? The two-phase locking protocol poses an additional restriction: I Once a transaction has released any lock, it must not acquire any new lock. # gehaltene # of locks Sperren held Zeit time lock phase Sperrphase I release phase Freigabe-Phase Two-phase locking is the concurrency control protocol used in database systems today. 26 Noch einmal: ATM-Transaktion Again: ATM Transaction Transaction 1 Transaction 2 DBstate l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; ✓ l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; 1200 l ock ( acct) ; r ead ( acct) ; unl ock ( acct) ; 1100 ✓ l ock ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; Fall 2008 1000 Systems Group — Department of Computer Science — ETH Zürich 223 27 Eine 2PL-konforme Transaktion I To comply with the two-phase locking protocol, the ATM must not acquire any new locks after a first lock • transaction Zweiphasigkeit muss eingehalten werden has been released. 1 2 3 4 5 Fall 2008 l ock ( acct) ; bal r ead bal ( acct) ; bal bal − 100 CHF; wr i t e bal ( acct, bal) ; unl ock ( acct) ; lock phase unlock phase Systems Group — Department of Computer Science — ETH Zürich 224 28 Entstehender Resulting ScheduleAbarbeitungsplan Transaction 1 Transaction 2 l ock ( acct) ; r ead ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; DBstate 1200 l ock ( acct) ; Transaction blocked r ead ( acct) ; wr i t e ( acct) ; unl ock ( acct) ; 1100 900 • The Verwendung von Sperren führt zu einem korrekten use of locking lead to a correct (and serializable) (und serialisierbaren) Plan schedule. I Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 225 29 Sperrarten (Sperrmodi) Lock Modes Wegesehen, saw earlierdass that two read operations do not nicht conflict w • Wir haben zwei Leseoperationen each other. in Konflikt zueinander stehen I Systems typically use different types of locks (“lock mode • Systeme verwenden verschiedene Arten von Sperren I to allow read operations to run concurrently. – Lesesperren (read locks, shared locks): S I read locksor shared locks: modeModus S – Schreibsperren (write locks, exclusive locks):XModus X I write locksor exclusive locks: mode • Lock stehen in Konflikt zueinander, wenn eines I Locksnur are only in conflict if at least one of them is an Xlo davon eine X-Sperre ist: shared (S) exclusive (X) shared (S) exclusive (X) ⇥ ⇥ ⇥ • Es ist Ieine Operation beim 2PL, während der a It issichere a safe operation in two-phase locking to convert Sperrphase eine in einelock X-Sperre zu lock phase. shared lockS-Sperre into an exclusive during the konvertieren 30 Verklemmungen (Deadlocks) • WieDeadlocks bei vielen Sperrprotokollen, kann es beim ZweiLike many lock-based protocols, two-phase locking has the Phasen-Sperrprotokoll zu Verklemmungen kommen: risk of deadlock situations: I Transaction 1 l ock ( A) ; .. . do something .. . l ock ( B) [ wait for T2 to release lock ] I Transaction 2 l ock ( B) .. . do something .. . l ock ( A) [ wait for T1 to release lock ] Both transactions would wait for each other indefinitely. • Durch Sperren ist der Ressourcenzugriff exklusiv • Beide Transaktionen warten wechselseitig aufeinander • Ressource werden nicht einzeln entzogen (no preemption) Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 227 31 Behandlung von Verklemmungen Erkennung von Verklemmungen: • System verwaltet einen Wartet-auf-Graphen, in dem einen Kante T1 ⟶ T2 bedeutet, dass T1 blockiert ist durch eine Sperre, die von T2 gehalten wird • Periodisch wird nach Zyklen in diesem Graph gesucht • Wenn Zyklus entdeckt, wird die Verklemmung durch Abbruch (abort) einer der Transaktionen aufgelöst • Wahl des Opfers durchaus schwierig: – Abbruch junger Transaktionen führt zu Mehrfachausführung – Abbruch alter Transaktionen führt zu Verlust von vielen ausgeführten Operationen 32 Deadlock prevention: e.g., by treating handling lock requests in an asymmetric way: I wait-die: A transaction is never blocked by an older transaction. I wound-wait: A transaction is never blocked by a Zeitüberschreitung (Timeout): younger transaction. I Behandlung von Verklemmungen •I Timeout: Warte nur auf Sperre bis Zeitüberschreitung eintritt, sonst Only wait for a lock until a timeout expires. nehme Verklemmung an und brecheand ababort. Otherwise assume that a deadlock has occurred I E.g., IBM DB2 UDB: db2 => GET DATABASE CONFI GURATI ON; .. . I nt er val f or checki ng deadl ock ( ms) Lock t i meout ( sec) ( DLCHKTI ME) = 10000 ( LOCKTI MEOUT) = - 1 229 Bankier-Algorithmus (leider Ressourcen nicht a priori bekannt) Wikipedia Systems Group — Department of Computer Science — ETH Zürich Vermeidung von Verklemmungen: • Wait-Die • Wound-Wait Fall 2008 33 Wait-Die • Fordert eine Transaktion eine Sperre an, die von einer jüngeren gehalten wird, so wartet die ältere bis die Sperre von der jüngeren freigegeben wird. • Fordert eine Transaktion eine Sperre an, die von einer älteren gehalten wird, so bricht sie sich selber ab (genauer: sie startet neu, allerdings behält sie ihren alten Zeitstempel bei, um so „älter“ zu wirken und ihre Chancen zu erhöhen, diesmal komplett durchlaufen zu können) [Wikipedia] 34 Wound-Wait • Fordert eine Transaktion eine Sperre an, die von einer jüngeren gehalten wird, so wird die jüngere abgebrochen (genauer: neu gestartet) und die ältere bekommt die Sperre zugewiesen. • Fordert eine Transaktion eine Sperre an, die von einer älteren gehalten wird, so wartet sie, bis die Sperre von der älteren wieder freigegeben wird. [Wikipedia] 35 Varianten des Zwei-Phasen-Sperrprotokolls Variants of Two-Phase Locking • Es gibt Freiheitsgrade bzgl. der Akquise- und I The two-phase locking protocol does not prescribe exactly Rückgabezeit von when locks have to Sperren acquired and released. • Mögliche I PossibleVarianten variants: # gehaltene locks Sperren held # gehaltene locks Sperren held Zeit time “lock phase” Sperrphase release phase Freigabe-Phase preclaiming 2PL 2PL mit Voranforderung I Zeit time lock phase “release phase” Sperrphase Freigabe-Phase strict 2PL striktes 2PL What could motivate either variant? • Wodurch könnten die Varianten motiviert sein? Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 230 36 Aufgabe: o-Phase Locking (2PL) • Waskann passieren, wenn Sperren nicht in einem Schritt zurückgegeben werden? The two-phase locking protocol poses an additional restriction: I Once a transaction has released any lock, it must not acquire any new lock. # gehaltene # of locks Sperren held Zeit time lock phase Sperrphase I release phase Freigabe-Phase Two-phase locking is the concurrency control protocol used in database systems today. 37 Kaskadierendes Rücksetzen Cascading Rollbacks Betrachten wir drei Transaktionen Consider three transactions: T1 T2 T3 abor t ; ✓ w(x) r(x) r(x) time t1 t2 • Wenn Transaktion T1 abgebrochen und zurückgerollt wird, I When transaction T1 aborts, transactions T2 and T3 have haben Transaktionen T und T schon Daten gelesen, die already read data written by T21 (% dirty3 read, slide 207) von TT erzeugt wurden (Dirty Read) I T2 and 2 need to be rolled back, too. 3 •I T undT3Tcannot ebenfalls zurückgerollt 3 müssen T22and commit until the fate of T1 is known.werden •I T können nichttwo-phase abgeschlossen two-phase vs. strict locking werden bis T1 2 und T3locking fertig ist Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 246 • Zwei-Phasen-Sperrung vs. strikte Zwei-Phasen-Sperrung 38 Phantom-Problem Phantom Problem Transaction 1 Transaction 2 Effect insert new row into R; commi t ; T1 locks all rows T2 locks new row T2’s lock released reads new row, too! scan relation R; scan relation R; Although both transactions followed the 2PLfolgen, • IObwohl beide Relationenproperly dem 2PL-Protokoll protocol, T1 observed effect sieht T1 einen Effektanvon T2caused by T2. I Cause of the problem: T1 can only lock existing rows. • Ursache des Problems: I Possible solutions: T1 kann nur existierende Tupel sperren I I Key range locking, typically in B-trees Predicate locking 39 Implementierung eines Sperrverwalters Ein Sperrverwalter muss drei Aufgaben effektiv erledigen: 1. Prüfen, welche Sperren für eine Ressource gehalten werden (um eine Sperranforderung zu behandeln) 2. Bei Sperr-Rückgabe müssen die Transaktionen, die die Sperre haben wollen, schnell identifizierbar sein 3. Wenn eine Transaktion beendet wird, müssen alle von der Transaktion angeforderten und gehaltenen Sperren zurückgegeben werden Wie muss eine Datenstruktur aussehen, mit der diese Anforderungen erfüllt werden können? 40 Datenstruktur zur Buchführung Bookkeeping Transaction ID Update Flag TX Status # of Locks hash table, indexed by resource ID .. . .. . Resource Control Block (RCB) Resource ID Hash Chain First In Queue ... Transaction Control Block (TCB) .. . LCB Chain .. . Transaction ID Resource ID Lock Mode Lock Status Next in Queue LCB Chain Transaction ID Resource ID Lock Mode Lock Status Next in Queue LCB Chain ... Lock Control Blocks (LCBs) Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 232 41 Implementierung von Aufgaben 1. Sperren für eine Ressource können über Hashzugriff gefunden werden – Verkettete Liste der Lock Control Blocks über ‚First In Queue/Next in Queue‘ (alle Anfragen enthalten, stattgegeben oder nicht) – Transaktion(en) am Kopf der Liste hält/halten Sperre für die Ressource 2. Wenn eine Sperre zurückgegeben wird (LCB aus der Liste entfernt), können die nächsten Transaktionen berücksichtigt werden 3. Sperren einer beendeten Transaktion können über ‚LCB Chain‘ identifiziert und zurückgegeben werden 42 Granularität des Sperrens Granularity of Locking Die Granularität des Sperrens The granularity of locking is a trade-off:unterliegt Abwägung database level low concurrency low overhead high concurrency high overhead tablespace level table level page level row-level ISperren mit multipler Granularität Idea: multi-granularity locking 43 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 234 Sperren mit multipler Granularität • Entscheide die Granularität von Sperren für jede Transaktion (abhängig von ihrer Charakteristik) – Tupel-Sperre z.B. für SELECT * FROM CUSTOMERS WHERE C_CUSTKEY = 42 Q1 – und eine Tabellen-Sperre für SELECT * FROM CUSTOMERS Q2 • Wie können die Sperren für die Transaktionen koordiniert werden? – Für Q2 sollen nicht für alle Tupel umständlich Sperrkonflikte analysiert werden 44 Vorhabens-Sperren Intention Locks Datenbanken setzten Vorhabens-Sperren (intention locks) für verschiedenen Sperrgranularitäten ein Databases use an additional type of locks: intention locks. • Sperrmodus Intention Share: IS I Lock mode intention share: I S • Sperrmodus Intention Exclusive: IX I Lock mode intention exclusive: IX I Conflict matrix: • Konfliktmatrix: S X IS IX S X ⇥ IS IX ⇥ ⇥ ⇥ ⇥ ⇥ ⇥ ⇥ ⇥ A lock I on a coarser level means that there’s some lock a lower level. EineonSperre I☐ auf einer gröberen Ebene bedeutet, I • dass es eine Sperre ☐ auf einer niederen Ebene gibt Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 236 45 Vorhabens-Sperren Protokoll für Sperren auf mehreren Ebenen: 1. Eine Transaktion kann jede Ebene g in Modus ☐ ∈ {S, X} 2. Bevor Ebene g in Modus ☐ gesperrt werden kann, muss eine Sperre I☐ für alle gröberen Ebenen gewonnen werden Anfrage Q1 würde • eine IS-Sperre für Tabelle CUSTOMERS anfordern (auch für Tablespace und die Datenbank) und dann • eine S-Sperre auf dem Tupel mit C_CUSTKEY=42 akquirieren Anfrage Q2 wurde eine • S-Sperre für die Tabelle CUSTOMERS anfordern (und eine IS-Sperre auf dem Tablespace und der Datenbank) 46 Entdeckung von Konflikten Nehmen wir an, folgende Anfrage ist zu bearbeiten UPDATE CUSTOMERS SET NAME = ‘John Doe‘ WHERE C_CUSTKEY = 17 Hierfür wird • eine IX-Sperre auf Tabelle CUSTOMERS (und ...) sowie • eine X-Sperre auf dem Tupel mit Kunde 17 Diese Anfrage ist • kompatibel mit Q1 (kein Konflikt zw. IX und IS auf der Tabellenebene) • aber inkompatibel mit Q2 (die S-Sperre von Q2 steht in Konflikt mit der IX-Sperre bzgl. Q3) 47 Konsistenzgarantien in SQL-92 In einigen Fall kann man mit einigen kleinen Fehlern im Anfrageergebnis leben • „Fehler“ bezüglich einzelner Tupel machen in Aggregat-funktionen evtl. kaum bemerkbar – Lesen inkonsistenter Werte (inconsistent read anomaly) • In SQL-92 kann man Isolations-Modi spezifizieren: SET ISOLATION SERIALIZABLE; • Es gibt weniger strikte Modi, unter denen die Performanz höher ist (weniger Verwaltungsaufwand z.B. für Sperren) 48 SQL-92 Isolations-Modi • Read uncommitted (auch: ‘dirty read‘ oder ‘browse‘) – Nur Schreibsperren akquiriert (nach 2PL) • Read committed (auch ‘cursor stability‘) – Lesesperren werden nur gehalten, sofern der Zeiger auf das betreffende Tupel zeigt, Schreibsperren nach 2PL • Repeatable read (auch ‘read stability‘) – Lese- und Schreibsperren nach 2PL akquiriert • Serializable – Zusätzliche Sperranforderungen, um Phantomproblem zu begegnen 49 Resultierende Konsistenzgarantien Resulting Consistency Guarantees isolation level read uncommitted read committed repeatable read serializable • dirty read non-repeat. rd phantom rd possible not possible not possible not possible possible possible not possible not possible possible possible possible not possible Some implementations support more, less, or different Einige unterstützen mehr, levelsImplementierungen of isolation. I weniger oder andere (isolation levels) I Few applications really Isolationmodi need serializability. • Nur wenige Anwendung benötigen (volle) Serialisierbarkeit Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 244 50 node 8 8500 node 7 6423 5012 6423 8280 node 3 node 1 5012 6330 4123 4222 4450 4528 58 node 2 node 4 node 9 node 5 node 6 9016 9200 mputer Science — ETH Zürich 8700 8808 8887 new node 9 8500 8570 8604 node 4 8700 9016 node 0 8280 8404 new separator new entry 6423 8050 8105 node 6 9016 9200 8700 8808 8887 8500 8570 8604 node 2 6423 8050 8105 node 7 node 8 – ! – Must split node 4. Knoten 4 aufgespalten New separator goes into node 1 Neuer Separator Knoten (including pointer to in new page). 1 new entry 6423 8050 8105 ! 6423 separator 6330 key 6330.eines Eintrags mit new • Insert Einfügung Schlüssel 5012 6330 1 e). • Betrachten wir eine Transaktion Tw, die etwas in Insert: Examples (Insert with Leaf Split) einen B-Baum einführt, was zu einer Splitoperation führt 5012 6330 de 5 Nebenläufigkeit beim Indexzugriff 8700 9016 node 0 node 4 new node 9 51 Nebenläufigkeit beim Indexzugriff • Nehme an, die Aufspaltung ist gerade erfolgt, aber der neue Separator 6423 ist noch nicht etabliert • Nehme weiterhin an, ein nebenläufiges Lesen in Transaktion Tr sucht nach 8085 – Die Verzeigerung weist auf Knoten node1 – Knoten node1 enthält aber 8050 nicht mehr, also wird der entsprechende Datensatz nicht gefunden • Auch in B-Bäumen muss beim Umbau mit Sperren gearbeitet werden! 52 Sperren und B-Baum-Indexe Betrachten wir B-Baum-Operationen • Für die Suche erfolgt ein Top-Down-Zugriff • Für Aktualisierungen ... – erfolgt erst eine Suche, – dann werden Daten ggf. in ein Blatt eingetragen und – ggf. werden Aufspaltungen von Knoten nach oben propagiert • Nach dem Zwei-Phasen-Sperrprotokoll ... – müssen S/X-Sperren auf dem Weg nach unten akquiriert werden (Konversion provoziert ggf. Verklemmungen) – müssen alle Sperren bis zum Ende gehalten werden 53 Sperren und B-Baum-Indexe • Diese Strategie reduziert die Nebenläufigkeit drastisch • Alle Transaktionen müssen warten, um die Sperre für die Wurzel des Index zu erhalten • Wurzel wird dadurch zum Flaschenhals und serialisiert alle (Schreib-)Transaktionen • Zwei-Phasen-Sperrprotokoll nicht angemessen für B-Baum-Indexstrukturen 54 Sperrkopplung Betrachten wir den Schreibe-Fall (alle Sperren mit Konflikt) • Das Protokoll Write-Only-Tree-Locking (WTL) garantiert Serialisierbarkeit – Für alle Baumknoten n außer der Wurzel kann eine Sperre nur akquiriert werden, wenn die Sperre für den Elternknoten akquiriert wurde – Sobald ein Knoten entsperrt wurde, kann für ihn nicht erneut eine Sperre angefordert werden (2PL) Und damit gilt: • Alle Transaktionen folgen Top-Down-Zugriffsmuster • Keine Transaktion kann dabei andere überholen • WTL-Protokoll ist verklemmungsfrei 55 Aufspaltungssicherheit • Wir müssen auf dem Weg nach unten in den B-Baum Schreibsperren wegen möglicher Aufspaltungen halten • Allerdings kann man leicht prüfen, ob ein Spaltung von Knoten n die Vorgänger überhaupt erreichen kann – Wenn n weniger als 2d Einträge enthält kommt es nicht zu einer Weiterreichung der Aufspaltung nach oben • Ein Knoten, der diese Bedingung erfüllt, heißt aufspaltungssicher (split safe) • Ausnutzung zur frühen Sperrrückgabe – Wenn ein Knoten auf dem Weg nach unten als aufspaltungssicher gilt, können alle Sperren der Vorgänger zurückgegeben werden – Sperren werden weniger lang gehalten 56 Sperrkopplungsprotokoll (Variante 1) Lock Coupling Protocol (Variant 1) 1 2 3 4 5 6 1 2 3 4 5 6 7 Fall 2008 place Slock on root ; root ; current while current is not a leaf node do place Slock on appropriate son of current ; release Slock on current ; son of current ; current readers writers place Xlock on root ; root ; current while current is not a leaf node do place Xlock on appropriate son of current ; son of current ; current if current is safe then release all locks held on ancestors of current ; Systems Group — Department of Computer Science — ETH Zürich 252 57 Erhöhung der Nebenläufigkeit • Auch mit Sperrkopplung werden eine beträchtliche Anzahl von Sperren für innere Knoten benötigt (wodurch die Nebenläufigkeit gemindert wird) • Innere Knoten selten durch Aktualisierungen betroffen – Wenn d=50, dann Aufspaltung bei jeder 50. Einfügung (2% relative Auftretenshäufigkeit) • Eine Einfügetransaktion könnte optimistisch annehmen, dass keine Aufspaltung nötig ist – Bei inneren Knoten werden währende der Baumtraversierung nur Lesesperren akquiriert (inkl. einer Schreibsperre für das betreffende Blatt) – Wenn die Annahme falsch ist, traversiere Indexbaum erneut unter Verwendung korrekter Schreibsperren 58 Sperrkopplungsprotokoll (Variante 2) Lock Coupling Protocol (Variant 2) 6 Modifikationen für 1Schreibvorgänge Modified protocol fornur writers: 1 2 3 4 5 6 7 8 9 10 place Slock on root ; current root ; while current is not a leaf node do son appropriate son of current ; if son is a leaf then place Xlock on son ; else place Slock on son ; release lock on current ; current son ; if current is unsafe then 12 release all locks and repeat with protocol Variant 1; 11 16 Reader protocol remains unchanged. Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 59 254 Zusammenfassung • Wenn eine Aufspaltung nötig ist, wird der Vorgang abgebrochen und erneut aufgesetzt • Die resultierende Verarbeitung ist korrekt, obwohl es nach einem erneuten Sperren aussieht (was für WTL nicht erlaubt ist) • Der Nachteile von Variante 2 ist, das im Falle einer Blattaufspaltung Arbeit verloren ist • Es gibt viele Varianten dieser Sperrprotokolle 60 B+-Bäume ohne Lesesperren B•+-trees Readohne Locks Es gibtWithout Vorschläge, Lesesperren auf B-BaumKnoten zu operieren I Lehman and Yao (TODSvol. 6(4), 1981) proposed a protocol • Anforderung: ein any Next-Zeiger auf rechten that does not need read locks onzeigt B-tree nodes. I Requirement: a next pointer, pointing to the right sibling. Geschwisterknoten ... ... ... ... • Vorher schon betrachtet: Verkettete Liste auf I Chapter II: Linked list along the leaf level. Blattebene I Pointers provide a second path to find each node. • Zeiger stellen zweiten Pfad aufsplits) Knoten bereit I This way, mis-guided (by concurrent read operations still find the nodeZugriffen that they need. • Beican nebenläufigen und Aufspaltung von Knoten bleibt Zugriff auf Gesamtinformation möglich Lehman and Yao (TODS vol. 6(4), 1981 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 256 61 4 5 6 7 8 9 10 11 A B 8700 9016 3 8105 8280 2 lock & read page B ; create new page D and lock it ; populate page D ; set next pointer D ! C; write D ; set next pointer B ! D ; adjust content of B ; write B ; lock & read A ; adjust content of A ; write A ; 5012 6423 8105 8280 1 8500 Einfügung mit Aufspaltung eines inneren Insertion KnotensWith Inner Node Split D C All index entries remained at all times. • IAlle Indexeinträge sindreachable zu jedem Zeitpunkt erreichbar Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 257 62 B-Baum-Zugriff beim Lesen • Die Next-Zeiger ermöglichen Leseoperationen, Einträge sogar inmitten einer Aufspaltung zu finden, auch wenn einige Einträge schon auf eine neue Seite verschoben wurden • Während tree_search() können Lesetransaktionen auf die Geschwister eine Knotens n zugreifen sofern – in n kein entsprechender Eintrag gefunden wird und – next kein Nullzeiger ist • Es wird nur auf Geschwister mit gleichem Elternteil verwiesen • Schreibsperren halten Lesetransaktionen nicht vom Zugriff auf eine Seite ab (Leser fordern keine Sperren an) 63 • Dieses Protokoll wird von PostgreSQL verwendet Sperren (Locks) und Indexsperren (Latches) • Welches Annahmen müssen wir machen für Sperrfreien Lesezugriff? • Sperren wollte wir ja nicht verwenden • Leichtgewichtige Sperren für kurzfristige atomare Ops • Indexsperren induzieren wenige Verwaltungsaufwand (meist als Spinlocks implementiert) • Sie sind nicht unter der Kontrolle des Sperrverwalters (es gibt keine Verklemmungsüberwachung oder automatisches Zurückgeben der Sperren bei Transaktionsabbruch) 64 Optimistische Organisation der Nebenläufigkeit • Bisher waren wir pessimistisch – Wir haben uns immer den schlimmste Fall vorgestellt und durch Sperrverwaltung vermieden • In der Praxis kommt der schlimmste Fall gar nicht sehr oft vor (siehe auch die Isolationsmodi) • Wir können auch das beste hoffen und nur im Fall eines Konflikts besondere Maßnahmen ergreifen • Führt auf die Idee der Optimistischen Kontrolle der Nebenläufigkeit 65 Optimistische Organisation der Nebenläufigkeit Behandle Transaktionen in drei Phasen • Lesephase: Führe Transaktion aus, aber schreibe Daten nicht sofort auf die Platte, halte Kopien in einem privaten Arbeitsbereich • Validierungsphase: Wenn eines Transaktion erfolgreich angeschlossen wird (commit), teste ob Annahmen gerechtfertigt waren. Falls nicht, führe doch noch einen Abbruch durch • Schreibphase: Transferiere Daten vom privaten Arbeitsbereich in die Datenbasis 66 Validierung von Transaktionen Validierung wird üblicherweise implementiert durch Betrachtung der • Gelesenen Attribute (read set RS(Ti)) • Geschriebene Attribute (write set WS(Ti)) 67 Validierung von Transaktionen • Rückwärtsorientierte optimistische Nebenläufigkeitsverwaltung – Vergleich T bezüglich aller erfolgreich beendeter (committed) Transaktionen – Test ist erfolgreich, wenn Tc beendet wurde bevor T gestartet wurde oder RS(T) ⋂ WS(Tc) = • Vorwärtsorientierte optimistische Nebenläufigkeitsverwaltung – Vergleiche T bezüglich aller laufenden Transaktionen Tr – Test ist erfolgreich, wenn WS(T) ⋂ RS(Tr) = 68 Multiversions-Nebenläufigkeitsorganisation Betrachten wir den folgenden Abarbeitungsplan t r1(x), w1(x), r2(x), w2(y), r1(y), w1(z) Ist dieser Plan serialisierbar? • Angenommen, wenn T1 y lesen möchte, sei der „alte“ Wert vom Zeitpunkt t noch verfügbar • Dann könnten wir eine Historie wie folgt erzeugen r1(x), w1(x), r2(x), r1(y), w2(y), w1(z) die serialisierbar ist 69 Multiversions-Nebenläufigkeitsorganisation • Mit verfügbaren alten Objektversionen müssen Leseschritte nicht länger blockiert werden • Es sind „abgelaufene“, aber konsistente Werte verfügbar • Problem: Versionierung benötigt Raum und erzeugt Verwaltungsaufwand (Garbage Collection) • Einige Systeme unterstützen Schnappschussisolation – Oracle, SQL Server, PostgreSQL 70 Wiederherstellung (Recovery) Architecture of a DBMS / Course Outline Applications Anwendungen SQL Interface SQL-Schnittstelle Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003. Webformulare Web Forms Ausführer Executor Parser Parser Operator Evaluator Operator-Evaluierer Optimizer Optimierer Transaction Transaktions Manager Dateiverwaltungsund Zugriffsmethoden Files and Access Methods Verwalter Puffer-Verwalter Buffer Manager Lock SperrVerwalter Manager Verwalter für Manager externen Disk Space RWiederecovery herstellungsManager Verwalter dieser Teil des thiscourse Kurses SQL-Kommandos SQLCommands Speicher DBMS Dateien für Daten und Indexe... data files, indices, Fall 2008 Datenbank Database Systems Group — Department of Computer Science — ETH Zürich 3 71 Wiederherstellung nach Fehlern Drei Typen von Fehlern • Transaktionsfehler (Prozessfehler) – Eine Transaktion wird abgebrochen (abort) – Alle Änderungen müssen ungeschehen gemacht werden • Systemfehler – Datenbank- oder Betriebssystem-Crash, Stromausfall, o.ä. – Änderungen im Hauptspeicher sind verloren – Sicherstellen, dass keine Änderungen mit Commit verloren gehen (oder ihre Effekte wieder herstellen) und alle anderen Transaktionen ungeschehen gemacht werden 72 Wiederherstellung nach Fehlern Drei Typen von Fehlern • Transaktionsfehler (Prozessfehler) • Systemfehler • Medienfehler (Gerätefehler) – Crash von Festplatten, Feuer, Wassereinbruch – Wiederherstellung von externen Speichermedien Trotz Fehler müssen Atomarität und Durabilität garantiert werden (ACID-Bedingungen) 73 Beispiel:System Systemausfall Example: Crash (or (oder Media Medienfehler) Failure) T1 T2 T3 T4 T5 time crash • Transaktionen T1, T2 und T3 wurden vor dem Ausfall I Transactions T1, T2, and the crash. 5 were committed before erfolgreich beendet TDauerhaftigkeit: Es muss sicher! Durability: Ensuredie thatEffekte updatesbeibehalten are preserved (or redone). gestellt werden, dass werden oder I Transactions T3 and T4 werekönnen not (yet)(redo) committed. wiederhergestellt werden ! Atomicity:TAllund of their effects need to be undone. • Transaktionen T4 wurden noch nicht beendet 3 Atomarität: Systems Alle Group Effekte müssen rückgängig gemacht 267 Fall 2008 — Department of Computer Science — ETH Zürich werden 74 Arten von Speichern Wir nehmen an, es gibt drei Arten von Speichern • Flüchtige Speicher – Wird vom Pufferverwalter verwendet (auch für Cache und Write-Ahead-Log, s.u.) • Nicht-flüchtiger Speicher – Festplatten • Stabiler Speicher – Nicht-flüchtiger Speicher, der alle drei Arten von Fehlern überlebt. Stabilität kann durch Replikation auf mehrere Platten erhöht werden (auch: Bänder) Vergleiche Arten von Fehler und Arten von Speichern 75 Schatten-Seiten-Verwaltung • Fehler können zu jeder Zeit auftreten, also muss das System jederzeit in einen konsistenten Zustand zurückgeführt werden können • Dies kann durch Redundanz erreicht werden • Schatten-Seiten (eingeführt durch IBMs „System R“) – Von jeder Seite werden zwei Versionen geführt – Aktuelle Version (Arbeitskopie, copy-on-write) – Schatten-Seite (konsistente Version auf nicht-flüchtigem Speicher zur Wiederherstellung) • Operation SAVE, um aktuellen Zustand als Schatten-Version zu sichern (für Commit) • Operation RESTORE, um Wiederherstellung einzuleiten (für Abort) 76 Shadow Pages Schatten-Seiten-Verwaltung 1. Initially: shadow ⌘ current . • Am Anfang: shadowT=now current 2. A transaction changes the current version. • Ein Transaktion T ändert nun die I Updates are not done in-place. aktuelle Version Create new pages and alter – Aktualisierung nicht in situ current page table. – Neue Seiten anfordern, kopieren, ändern 3a.Seitentabelle If T aborts, overwrite und anpassencurrent version with shadow version. I directory R R⇤ current • Wenn T abgebrochen wird, überschreibe 3b. If T commits, change information in aktuelle Version mit Schatten-Version directory to make current version • Wenn T persistent beendet .wird, aktualisiere Info in Verzeichnis, Version 4. Reclaim um disk aktuelle pages using garbage shadow persistent zu machen collection. • Gewinne ggf. Seiten durch Garbage Collection wieder Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 270 77 Schatten-Seiten: Diskussion • Wiederherstellung schnell für ganze Relationen/Dateien • Um Persistenz (Durabilität) sicherzustellen, müssen modifizierte Seiten bei einem Commit in nicht-flüchtigen Speicher (z.B. Festplatte) geschrieben werden (force to disk) • Nachteile: – Hohe I/O-Kosten, keine Verwendung von Cache möglich – Langsame Antwortzeiten • Besser: No-Force-Strategie, Verzögerung des Schreibens • Transaktion muss neu abgespielt werden können (Redo), auch für Änderungen, die nicht gespeichert wurden Gray et al.. The Recovery Manager of the System R Database Manager. ACM Comp. Surv., vol. 13(2), June 1981. 78 Schatten-Seiten: Diskussion • Schatten-Seiten ermöglichen das Stehlen der Rahmen im Pufferverwalter (frame stealing): Seiten werden möglicherweise sofort auf die Platte geschrieben (sogar bevor Transaktion erfolgreich beendet wird) – Stehlen erfolgt durch andere Transaktionen – Stehlen kann nur erfolgen, wenn Seite nicht gepinnt – Geänderte Seiten (dirty pages) werden auf die Platte geschrieben • Diese Änderungen müssen ungeschehen gemacht werden während der Wiederherstellung – Leicht möglich durch Schatten-Seiten 79 Effekte für die Wiederherstellung Effects on Recovery • I Entscheidungen zurforce Strategie The decisions force/no and steal/haben no stealAuswirkungen have implications on bei whatder we have to do during recovery: auf das, was Wiederherstellung erfolgen muss no steal steal I • force no force no redo no undo must redo no undo no redo must undo must redo must undo If we want to use steal and no force (to increase concurrency andsteal performance), have towird implement redo and undo Bei und noweforce zur Erhöhung der routines. Nebenläufigkeit und der Performanz ein redo und ein undo implementiert Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 273 80 Write-Ahead-Log (WAL) • Die ARIES1-Wiederherstellungsmethode verwendet ein Write-Ahead-Log zur Implementierung der notwendigen redundanten Datenhaltung • Datenseiten werden in situ modifiziert • Für ein Undo müssen Undo-Informationen in eine Logdatei auf nicht-flüchtigem Speicher geschrieben werden bevor eine geänderte Seite auf die Platte geschrieben wird • Zur Persistenzsicherung muss zur Commit-Zeit RedoInformation sicher gespeichert werden (No-ForceStrategie: Daten auf der Platte enthalten alte Information) 1 Algorithm for Recovery and Isolation Exploiting Semantics Mohan et al. ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks UsingWriteAhead Logging. ACM TODS, vol. 17(1), March 1992. 81 Inhalte of des Content theWrite-Ahead-Logs Write-Ahead Log LSN Type TX Prev Page UNxt Redo Undo .. .. .. .. .. .. .. .. . . . . . . . . LSN (Log Sequence Sequence Number) LSN (Log Number) Monotonically increasing number to identify each log • Monoton steigende Zahl, um Einträge zu identifizieren record. Trick: Verwende Byte-Position of Log-Eintrag Trick: Use byte position of log record Why? TypType (Log Type) (LogRecord Record Type) Indicates whether this is an update record (UPD), end ofEnd-of• Repräsentiert, ob es ein Update-Eintrag (UPD), transaction record (EOT), compensation log record (CLR), ... Transaction-Eintrag (EOT), Compensation-Log-Record TX (Transaction ID) (CLR) Transaction identifier (if applicable). TX (Transaktions-ID) • Fall Transaktionsbezeichner (falls anwendbar) 2008 Systems Group — Department of Computer Science — ETH Zürich 275 82 Inhalte des Write-Ahead-Logs (Forts.) Prev (Previous Log Sequence Number) • LSN des vorigen Eintrags von der gleichen Transaktion (falls anwendbar, am Anfang steht ‘-‘) Page (Page Identifier) • Seite, die aktualisiert wurde (nur für UPD und CLR) UNxt (LSN Next to be Undone) • Nur für CLR: Nächster Eintrag der Transaktion, der während des Zurückrollens bearbeitet werden muss Redo • Information zum erneuten Erzeugen einer Operation Undo • Information zum Ungeschehenmachen einer Operation 83 Beispiel Example Redo Transaction 1 Transaction 2 LSN Type TX Prev Page UNxt a a Undo r ead( A) ; c r ead( C) ; c c + 10 ; a − 50 ; 1 2 UPD T1 UPD T2 – – ··· ··· A := A − 50 A := A + 50 C := C+ 10 C := C− 10 3 4 UPD T1 EOT T1 1 3 ··· ··· B := B + 50 B := B − 50 r ead( A) ; a a − 10 ; a 5 wr i t e( a, A) ; 6 commi t ; UPD T2 EOT T2 2 5 ··· ··· A := A − 10 A := A + 10 wr i t e( a, A) ; wr i t e( c, C) ; r ead( B) ; b b + 50 ; b wr i t e( b, B) ; commi t ; Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 277 84 Redo/Undo-Information ARIES nimmt seitenorientiertes Redo an • Keine anderen Seiten müssen angesehen werden, um eine Operation erneut zu erzeugen • Z.B.: Physikalisches Logging – Speicher von Byte-Abbildern von (Teilen von) Seiteninhalten – Vorher-Abbild (Abbild vor der Operation) – Nachher-Abbild (Abbild nach der Operation) • Wiederherstellung unabhängig von Objekten – Struktur braucht nicht bekannt zu sein, nur Seitenstruktur relevant • Gegensatz: Logisches Redo (‚Setze Tupelwert auf v‘) – Redo muss vollständig durchgeführt werden, auch Indexeinträge werden neu generiert, inkl. Aufspaltung usw. 85 Redo/Undo-Information • ARIES unterstützt logisches Undo • Seitenorientiertes Undo kann kaskadierende RückrollSituationen heraufbeschwören – Selbst wenn eine Transaktion T1 nicht direkt Tupel betrachtet hat, die von anderer Transaktion T2 beschrieben wurden, ist doch das physikalische Seitenlayout, dass T1 sieht, von T2 beeinflusst – T1 kann nicht von T2 erfolgreich beendet werden • Logisches Undo erhöht also die Nebenläufigkeit • Durch Operator-Logging können Transaktion voll nebenläufig arbeiten, wenn ihre Operationen semantisch kompatibel sind – Z.B.: Dekrement- und Inkrementoperationen – Dieses ist für Index und Metadaten relevant 86 Schreiben von Log-Einträgen • Aus Performanzgründen werden Log-Einträge zunächst in flüchtigen Speicher geschrieben • Zu bestimmten Zeiten werden die Einträge bis zu einer bestimmten LSN in stabilen Speicher geschrieben – Alle Einträge bis zum EOT einer Transaktion T werden auf die Platte geschrieben wenn T erfolgreich beendet (um ein Redo von Ts Effekten vorzubereiten) – Wenn eine Datenseite p auf die Platte geschrieben wird, werden vorher die letzten Modifikationen von p im WAL auf die Platte geschrieben (zur Vorbereitung eines Undo) • Die Größe des Logs nimmt immer zu (s. aber Schnappschüsse weiter unten) 87 Normaler Verarbeitungsmodus Während des normalen Transaktionsverarbeitung, werden zwei Dinge im Transaktionskontrollblock gespeichert • LastLSN (Last Log Sequence Number) – LSN des letzten geschriebenen Log-Eintrags für die Transaktion • UNxt (LSN Next to be Undone) – LSN des nächsten Eintrags, der beim Rückrollen betrachtet werden muss Wenn eine Aktualisierung einer Seite p durchgeführt wird – wird ein Eintrag r ins WAL geschrieben und – die LSN von r im Seitenkopf von p gespeichert 88 Datenstruktur zur Buchführung Bookkeeping Transaction ID Update Flag TX Status # of Locks hash table, indexed by resource ID .. . .. . Resource Control Block (RCB) Resource ID Hash Chain First In Queue ... Transaction Control Block (TCB) .. . LCB Chain .. . Transaction ID Resource ID Lock Mode Lock Status Next in Queue LCB Chain Transaction ID Resource ID Lock Mode Lock Status Next in Queue LCB Chain ... Lock Control Blocks (LCBs) Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 232 89 Rückrollen einer Transaktion Schritte zum Rückrollen einer Transaktion T: • Abarbeiten des WAL in Rückwärtsrichtung • Beginn bei Eintrag, auf den UNxt im Transaktionskontrollblock von T zeigt • Finden der übrigen Einträge von T durch Verfolgen der Prev- und UNxt-Einträge im Log Undo-Operationen modifizieren ebenfalls Seiten • Logging der Undo-Operationen im WAL • Verwendung von Compensation-Log-Record (CLRs) für diesen Zweck 90 Rückrollen einer Transaktion Transaction Rollback 1 Function: r ol l back ( SaveLSN, T) 2 UndoNxt T.UNxt ; while SaveLSN < UndoNxt do LogRec read log entry with LSN UndoNxt ; switch LogRec.Type do case UPD perform undo operation LogRec.Undo on page LogRec.Page ; LSN write log entry hCLR, T, T.LastLSN, LogRec.Page, LogRec.Prev, · · · , ? i ; set LSN = LSN in page header of LogRec.Page ; T.LastLSN LSN ; 3 4 5 6 7 8 9 10 case CLR UndoNxt 11 12 13 T.UNxt LogRec.UNxt ; UndoNxt ; 91 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 283 I Transaction can be rolled back partially (back to SaveLSN). Rückrollen einer Transaktion Why isthisuseful? • Transaktionen können auch partiell zurückgerollt werden (zur SaveLSN) – Wozu könnte das nützlich sein? • Das UNxt-Feld in einem CLR zeigt auf den I The UNxt field in a CLRpoints toder the ungeschehen log entry before the one Logeintrag vor demjenigen, that haswurde been undone. gemacht UPD UPD sav1 Fall 2008 UPD sav2 UPD CLR CLR r ol l back ( sav2) UPD CLR CLR Log r ol l back ( sav1) Systems Group — Department of Computer Science — ETH Zürich 284 92 Wiederherstellung nach Ausfall Neustart nach einem Systemabsturz in drei Phasen 1. Analyse-Phase: – – Lese Log in Vorwärtsrichtung Bestimmt Transaktionen, die aktiv waren als der Absturz passierte (solche Transaktionen nennen wir Pechvögel) 2. Redo-Phase: – Spiele Operation im Log erneut ab (in Vorwärtsrichtung), um das System in den Zustand vor dem Fehler zu bringen 3. Undo-Phase: – Rolle Pechvögel-Transaktionen zurück, in dem das Log in Rückwärtsrichtung abgearbeitet wird (wie beim 93 Analyse-Phase Analysis Phase 1 Function: anal yze ( ) 2 3 foreach log entry record LogRec do switch LocRec.Type do create transaction control block for LogRec.TX if necessary ; case UPDor CLR LogRec.TX.LastLSN LogRec.LSN ; if LocRec.Type = UPDthen LogRec.TX.UNxt LogRec.LSN ; 4 5 6 7 8 else LogRec.TX.UNxt 9 10 11 12 LogRec.UNxt ; case EOT delete transaction control block for LogRec.TX ; 94 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 286 Redo-Phase Redo Phase 1 Function: r edo ( ) 2 3 4 foreach log entry record LogRec do switch LocRec.Type do case UPDor CLR v pi n ( LogRec.Page) ; if v.LSN < LogRec.LSN then perform redo operation LogRec.Redo on v ; v.LSN LogRec.LSN ; 5 6 7 8 unpi n ( v, · · · ) ; 9 • can occur during recovery! AuchSystem beimcrashes Wiederherstellen können Abstürze eintreten I Undo and redo of a transaction T must be idempotent: I • undo(undo(T)) = undo(T) Check LSN before performing the redo operation (line 6). – Undo und Redo einer Transaktion müssen idempotent undo(undo(T)) = undo(T) sein redo(redo(T)) = redo(T) Fall 2008 Systems Group — Department of Computer Science — ETH Zürich • redo(redo(T)) = redo(T) – Prüfe LSN vor der Redo-Operation 287 95 Redo-Phase • Beachte, dass alle Operationen (auch solche von Pechvögeln) in chronologischer Ordnung erneut durchgeführt werden • Nach der Redo-Phase ist das System im gleichen Zustand, wie zum Fehlerzeitpunkt – Einige Log-Einträge sind noch nicht auf der Platte, obwohl erfolgreich beendete Transaktionen ihre Änderung geschrieben hätten. Alle anderen müssten ungeschehen gemacht werden • Wir müssen hinterher alle Effekte von Pechvögeln ungeschehen machen • Als Optimierung kann man den Puffermanager instruieren, geänderte Seiten vorab zu holen (Prefetch) 96 Undo-Phase • Die Undo-Phase ist ähnlich zum Rückrollen im normalen Betrieg • Es werden mehrere auf einmal Transaktionen zurückgerollt (all Pechvögel) • Alle Pechvögel werden vollständig zurückgerollt (nicht nur bis zu einem Sicherungspunkt) 97 Undo-Phase 1 Function: undo ( ) 2 while transactions (i.e., TCBs) left to roll back do T TCB of loser transaction with greatest UNxt ; LogRec read log entry with LSN T.UNxt ; switch LogRec.Type do case UPD perform undo operation LogRec.Undo on page LogRec.Page ; LSN write log entry hCLR, T, T.LastLSN, LogRec.Page, LogRec.Prev, · · · , ? i ; set LSN = LSN in page header of LogRec.Page ; T.LastLSN LSN ; 3 4 5 6 7 8 9 10 case CLR UndoNxt 11 12 13 14 15 16 LogRec.UNxt ; T.UNxt UndoNxt ; if T.UNxt = ‘–’ then write EOT log entry for T ; delete TCB for T ; Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 290 98 Checkpointing • WAL ist eine immer-wachsendes Log-Datei, die bei der Wiederherstellung gelesen wird • In der Praxis sollte die Datei nicht zu groß werden (Wiederherstellung dauert zu lange) • Daher wird ab und zu ein sog. Checkpoint erstellt – Schwergewichtiger Checkpoint: Speicherung aller geänderter Seiten auf der Platte, dann Verwaltungsinformation für Checkpoint schreiben (Redo kann dann ab Checkpoint erfolgen) – Leichtgewichtiger Checkpoint: Speichere Information bzgl. geänderter Seiten in Log, aber keine Seiten (Redo ab Zeitpunkt kurz vor Checkpoint) 99 Medien-Wiederherstellung • Um Medienfehler zu kompensieren, muss peridiodisch eine Sicherungskopie erstellt werden (nicht-flüchtiger Speicher) • Kann während des Betriebs erfolgen, wenn WAL auch gesichert wird • Wenn Pufferverwalter verwendet wird, reicht es, das Log vom Zeitpunkt des Backups zu archivieren – Pufferverwalter hat aktuelle Seiten – Sonst muss bis zum ältesten Write der aktualisierten Seiten zurückgegangen werden • Anderer Ansatz: Spiegeldatenbank auf anderem Rechner 100 Leichtgewichtiger Checkpoint Schreibe periodisch Checkpoint in drei Phasen 1. Schreibe Begin-Checkpoint-Logeintrag BCK 2. Sammle Information – über geänderte Seiten im Pufferverwalter und dem LSN ihrer letzten Modifikationsoperation und – über alle aktiven Transaktionen (und ihrer LastLSN und UNxt TCB-Einträge) Schreibe diese Information in End-Checkpoint Eintrag ECK 3. Setze Master-Record auf bekannte Position auf der Platte und zeige auf LSN und BCK Logeinträge 101 Wiederherstellung mit leichtgew. Checkpoint Während der Wiederherstellung Recovery with Fuzzy Checkpointing • Starte beim BCK-Eintrag im Master-Record DuringAnalyse crash recovery I start analyze (anstelle vom Anfang Logs) passat thedes BCKentry recorded in the master record (instead of from the beginning of the log). • Wenn der ECK-Eintrag gelesen wird I – When reading the ECKlog entry, Bestimme kleinste LSN die die Redo-Verarbeitung I Determine smallest LSNfür for redo processing and und I Create TCBs for all transactions in the checkpoint . – Erzeuge TCBs checkpoint für alle Transaktionen im Checkpoint Log ✓ analyze pass redo pass undo pass Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 293 102 Zusammenfassung • ACID und Serialisierbarkeit – Vermeiden von Anomalien durch Nebenläufigkeit – Serialisierbarkeit reicht für Isolation • Zwei-Phasen-Sperrprotokoll – 2PL ist eine praktikable Technik, um Serialisierbarkeit zu garantieren (meist wird strikte 2PL verwendet) – In SQL-92 können sog. Isolationsgrade eingestellt werden (Abschwächung der ACID-Bedingungen) • Nebenläufigkeit in B-Bäumen – Spezialisierte Protokolle (WTL) zur Flaschenhalsvermeidung • Wiederherstellung (ARIES) 103 Das Gesamtbild der Architektur Architecture of a DBMS / Course Outline Applications Anwendungen SQL Interface SQL-Schnittstelle Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003. Webformulare Web Forms Ausführer Executor Parser Parser Operator Evaluator Operator-Evaluierer Optimizer Optimierer Transaction Transaktions Manager Dateiverwaltungsund Zugriffsmethoden Files and Access Methods Verwalter Puffer-Verwalter Buffer Manager Lock SperrVerwalter Manager Verwalter für Manager externen Disk Space RWiederecovery herstellungsManager Verwalter dieser Teil des thiscourse Kurses SQL-Kommandos SQLCommands Speicher DBMS Dateien für Daten und Indexe... data files, indices, Fall 2008 Datenbank Database Systems Group — Department of Computer Science — ETH Zürich 3 104