Benutzer V Benutzer Z Q ES C L JD B DB DBMS SQ L L Q S Benutzer Y Benutzer X Seite 321 von 344 Mehrbenutzerbetrieb: – Ein DBS bedient gleichzeitig mehrere Benutzer – Benutzer arbeiten zwar unabhängig voneinander, können aber die gleiche Relation oder sogar den gleichen Datensatz bearbeiten! Aktivität eines Benutzers: – sequentieller Prozeß Aktivitäten mehrerer Benutzer: – variable Menge von inneinander verzahnt ablaufenden Prozessen – gemeinsame Nutzung der Datenbasis .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 322 von 344 Datenbanksystem – mehrere Elementaroperationen werden miteinander zu einer Einheit verschmolzen. Der Ablauf dieser Einheit wird eine Transaktion genannt. – neue Operationen zur Ablaufsteuerung von Transaktionen Ein Benutzer möchte eine Buchung von einem Konto A auf ein Konto B vornehmen können. Folgende Anforderungen ergeben sich dabei: – Eine Buchung sollte nicht teilweise durchgeführt werden. – Alle Konsistenzbedingungen sollen nach einer Buchung gewahrt bleiben: z. B. Kontostände dürfen nicht unter 10000,- fallen – Gleichzeitig ablaufende Buchungen dürfen keinen Einfluss haben auf das Ergebnis dieser Buchung. – Eine erfolgreiche Buchung ist auch tatsächlich in der Datenbank wirksam geworden. $QZHQGXQJHLQHV'%6.RQWRYHUZDOWXQJ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 323 von 344 Elementaroperationen, die sich auf die Datenbasis beziehen – Lesen des Werts eines Objekts A in eine Programmvariable a: read(A,a) bzw. r(A) – Zuweisung eines Werts einer Programmvariable a an ein Objekt A der Datenbank write(A, a) bzw. w(A) Elementaroperationen, die keine Auswirkung auf die Datenbasis haben. Ablaufsteuerung Anfang einer Transaktion: BOT Ende der Transaktion: commit – alle in der Transaktion erzeugten Änderungen der Datenbasis werden festgeschrieben. Abbruch einer Transaktion: abort – alle in der Transaktion vorgenommen Änderungen der Datenbasis werden unwirksam. Operationen 7UDQVDNWLRQHQ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 324 von 344 Eine Transaktion (TA) ist eine Folge von Elementaroperationen. Eine TA erfüllt die ACID-Bedingungen: A: TA ist die kleinste, DWRPDUH Ausführungseinheit. – Entweder alle durch einen TA vorgenommenen Änderungen werden in der Datenbasis wirksam oder gar keine. C: Eine TA überführt einen konsistenten Datenbankzustand in einen anderen NRQVLVWHQWHQ Datenbankzustand. – Innerhalb einer TA sind Inkonsistenzen erlaubt. I: eine TA ist gegenüber anderen TAs LVROLHUW, d. h. das Ergebnis einer TA kann nicht direkt durch eine andere TA beeinflusst werden. – Jede TA wird logisch so ausgeführt, als gäbe es keine andere TA. D: ist eine TA einmal erfolgreich abgeschlossen, dann bleibt ihre Wirkung auf die Datenbasis GDXHUKDIW erhalten. – Dies gilt auch im Fall eines Systemfehlers (LJHQVFKDIWHQYRQ7UDQVDNWLRQHQ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Tm Tm+1 verzahnter Ablauf der TAs Einschränkung bei den verzahnten Abläufen Einschränkung bei den verzahnten Abläufe Zurücksetzen einer oder mehrerer TAs – Atomarität – Dauerhaftigkeit Synchronisation der TAs – Isolation Tn Seite 325 von 344 .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV 7UDQVDNWLRQVPDQDJHPHQW TA-Manager wj(A) aj cj 2. Schreiboperation: 3. Abbruch: 4. Commit: Seite 326 von 344 Für ein Ablauf einer TA Tj gibt es eine Ordnungsrelation <j, welche die sequentielle Ordnung der Elementaroperationen ausdrückt: op1 <j op2 : op1 wird vor op2 ausgeführt. Einzelne Operationen (rj, wj, aj, und cj) werden sequentiell nacheinander ausgeführt: – Eine Transaktion Tj wird durch einen Aufruf von aj oder cj beendet: es gibt keine weitere Operation von Tj, die danach ausgeführt wird. 5. weitere Operationen, die aber auf die Datenbank keine Auswirkung haben. rj(A) Transaktion Tj setzt sich aus folgenden Elementaroperationen zusammen: 1. Leseoperation: Transaktionen: T1, T2, …, Tn 1RWDWLRQ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Ordnungsrelationen <j der einzelnen Transaktionsabläufe bleiben bewahrt. Seite 327 von 344 Nicht alle Ausführungspläne erzeugen einen konsistenten Datenbankzustand (siehe Beispiele) Verzahnter Ablauf der TAs wird oft auch als parallele Ausführung bezeichnet. Bemerkungen: Durch den Ausführungspan H ist eine Ordnungsrelation <H definiert. – Seien T1,…,Tn Transaktionen. Dann wird eine Folge H aller Operationen der TAs T1,…,Tn ein Ausführungsplan genannt, falls folgende Bedingungen erfüllt sind: – es gibt nur Elementaroperationen vom Typ rj, wj, aj, cj, Definition (Ausführungsplan, Historie): $XVIKUXQJVSODQ+LVWRULH .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV 7UDQVDNWLRQW read(B, b); b := b + 10; write(B, b); read(C, c); c := c-10; write(C, c); commit 7UDQVDNWLRQW read(A, a); a := a + 10; write(A, a); read(B, b); b := b-10; write(B, b); commit; =HLW write(B, b); commit; b := b-10; read(B, b); a:= a + 10; write(A, a); HLQ$EODXI t1 read(A, a); c := c-10; write(C, c); commit; read(C, c); write(B, b); b := b + 10; read(B, b); t2 %HLVSLHO w2(C); c2; w1(B); c1; w2(B); r2(C); w1(A); r1(B); $XVIKUXQJVSODQ r1(A); r2(B); Seite 328 von 344 .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Ein Ausführungsplan muss gewisse Kriterien erfüllen, damit die Isolationseigenschaft garantiert ist. Sonst kann es Probleme geben: Konsistenz der DB ist i.a. nicht verletzt Resultate der Anfragen sind nicht “offenkundig falsch” Seite 329 von 344 Transaktion T1 und T2 erhöhen das Gehalt der Mitarbeiter jeweils um 100,- DM T2 Ausführungsplan T1 read(Gehalt, g); r1(Gehalt); read(Gehalt, h); r2(Gehalt); g := g + 100; write(Gehalt, g); w1(Gehalt); commit; c1 h := h + 100; write(Gehalt, h); w2(Gehalt); commit; c2 Problem des “lost update” 6\QFKURQLVDWLRQVSUREOHPH .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 330 von 344 Transaktion T2 ließt somit inkonsistente Daten aus der Datenbank, obwohl die Datenbank nach T1 wieder in einem konsistenten Zustand ist. A und B seien zwei Kontostände für die A+B=0 gelten soll. T1 und T2 sind zwei Transaktionen, wobei T1 ändert und T2 nur vom Konto ließt. T1 T2 read(A, a); a := a-1; write(A, a); read(A, c); read(B, d); commit; read(B,b); b := b+1; write(B,b); commit; Problem der inkonsistenten Sicht auf die Datenbank .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV A und B seien im folgenden zwei Kontostände, die stets A = B erfüllen. T1 T2 read(A, a); a := a + 10; write(A, a); read(A, c); c := c*1.1; write(A, c); read(B, b); b := b*1.1; write(B, b); commit; read(B, d); d := d +10; write(B,d); commit; Die Datenbank hat dauerhaft einen inkonsistenten Zustand: Aneu = (A+10)*1.1 z B*1.1+10 = Bneu Problem der inkonsistenten Datenbank Seite 331 von 344 .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV strikte, sequentielle Ausführung der Transaktionen – Nachteil: schlechte Systemauslastung, lange Wartezeiten Beschränkung der “Parallelität” auf erlaubte Verarbeitungsreihenfolgen Seite 332 von 344 Wird T2 nach Schritt 1 von T1 ausgeführt, so ist die Kalkulation von T1 veraltet. Lösung der Synchronisationsprobleme: – Transaktion T1 – liest die Daten aller Angestellten, – berechnet, wieviel Gehaltserhöhung möglich ist, – und erhöht das Gehalt. Transaktion T2 fügt einen neuen Angestellten ein. Phantom-Problem: .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV 4. wi(A) <H wj(A) 2. ri(A) <H wj(A) 3. wi(A) <H rj(A) Sei T* = {T1,…,Tn} eine Menge von Transaktionen und H ein dazugehörender Ausführungsplan. Seien Ti und Tj zwei Transaktionen aus T*, die gemeinsam auf ein Datenobjekt A zugreifen. Es werden nun folgende vier Fälle unterschieden: 1. ri(A) <H rj(A) Seite 333 von 344 Bemerkungen: – nur im 1. Fall sind die Operationen vertauschbar, ohne dass sich das Ergebnis des Ausführungsplans ändert. – in allen anderen Fällen ist davon auszugehen, dass ein Vertauschen der Ausführungsreihenfolge zu einem anderen Ergebnis führt. Man spricht dann auch von einem Konflikt. 6HULDOLVLHUXQJYRQ7$V .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV wi(A) <G wj(A) wi(A) <H wj(A) Konflikte: r1(A) <H w2(A) w1(A) <H r2(A) – Seite 334 von 344 Ausführungsplan H = (r1(A),r2(C),w1(A),w2(C),r1(B),w1(B),c1,r2(A),w2(A),c2) – Durch Vertauschen von zwei benachbarte Operationen, die nicht in Konflikt zueinander stehen, kann man sich einen äquivalenten Ausführungsplan erzeugen. Beispiel: – zwei Relationen T1 und T2 wi(A) <G rj(A) wi(A) <H rj(A) Definition: Sei T* = {T1,…,Tn} eine Menge von Transaktionen. Seien H und G zwei dazugehörige Ausführungspläne. Dann sind H und G äquivalent, falls die Konflikte identisch sind, d.h. wenn für alle Relationen Ti und Tj und einem beliebigen Datenobjekt A folgende Bedingungen gelten: ri(A) <H wj(A) ri(A) <G wj(A) bTXLYDOHQ]YRQ$XVIKUXQJVSOlQHQ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV T1 T2 Beweis: siehe Bernstein, Hadzilacos, Goodman Seite 335 von 344 Graph G = (K,U) mit Knotenmenge K und Kantenmenge 8 . u . zu jeder TA gibt es genau einen Knoten (T1,T2) U g.d.w. es gibt ein Objekt O, so dass op1(O) <H op2(O) in Konflikt zueinander stehen. Ein Ausführungsplan ist genau dann serialisierbar, falls G zyklenfrei ist. Satz: – – – Test auf Serialisierbarkeit eines Ausführungsplans. Serialisierbarkeitsgraph Ein Ausführungsplan ist serialisierbar, falls es HLQHQ äquivalenten sequentiellen Ausführungsplan gibt. Definition (Serialisierbarkeit): 6HULDOLVLHUEDUH$XVIKUXQJVSOlQH .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV bislang verwendete Verfahren: – Sperrverfahren – Zeitstempel- und Mehrversionsverfahren Seite 336 von 344 In einem DBS soll stets Serialisierbarkeit garantiert werden zwei prinzipielle Methoden: – verifizierende (“optimistische”) Verfahren: Beobachte ständig die Ausführungspläne (über den Graph G). Falls Serialisierbarkeit nicht garantiert ist, setze eine TA zurück und starte sie neu. – präventive Verfahren: Verhindere nicht-serialisierbare Ausführungspläne. 6\QFKURQLVDWLRQVYHUIDKUHQ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Jede TA sperrt den Teil der DB, auf dem sie arbeiten will. – Solange gesperrt ist, können keine anderen TAs zugreifen Klassifizierung der Sperrverfahren nach – Sperrobjekten: Datensatz, Datenseite, Relation, Datenbank Beachte: je feiner die Sperreinheit, desto mehr Parallelität ist möglich je feiner die Sperreinheit, desto mehr Verwaltungsaufwand – Sperrmodi lock(A) sperrt das Datenobjekt A unlock(A) gibt die Sperre wieder frei – Sperrprotokoll Anforderung: Gewährleistung der Serialisierbarkeit 6SHUUYHUIDKUHQ Seite 337 von 344 .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Sperren Zeit Freigabe Verarbeitung Seite 338 von 344 Bevor auf ein Objekt A zugegriffen wird, muss es mit einem lock gesperrt werden. Insbesondere muss eine Sperre direkt vor dem Lesen des Objekts gesetzt werden. Das gleiche Objekt darf während einer Transaktion bei einem 2PL nur einmal gesperrt und freigegeben (unlock) werden. Wurde das Objekt verändert, muss es vor der Freigabe (unlock) auch geschrieben werden. Eigenschaften: #Sperren 2-Phasen-Sperrprotokoll: Für jede TA darf nach dem ersten unlock kein lock mehr angefordert werden. =ZHL3KDVHQ6SHUUSURWRNROO3/ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Wenn dieser mittels eines 2PL entstanden wäre, dann müßte es Objekte Ai1, …, Ain geben, so dass bzgl. diesen die Transaktionen in Konflikt stehen. Somit muss also ein unlockij(Aij) vor einem lockij(Aij+1) für j= 1, …,n-1 erfolgt sein und zusätzlich noch ein locki1(Ain) nach dem unlock in(Ain) erfolgen. – Seite 339 von 344 Annahme: H ist ein Ausführungsplan mit einem Zyklus Ti1 -> … -> Tin -> Ti1 – Beweisskizze: Jeder durch ein 2-Phasen Sperrprotokoll erzeugte Ausführungsplan ist serialisierbar. Satz: .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV – – – – Verarbeitung Zeit Freigabe keine Verklemmung möglich Objekte müssen bei Beginn der TA bekannt sein häufig wird zu viel und zu lange gesperrt Probleme beim Zurücksetzen einer TA (kaskadierend) #Sperren Preclaiming (konservatives 2PL): – – – – Sperren Verarbeitung Zeit Seite 340 von 344 Verklemmungen sind möglich Objekte müssen beim Beginn der TA noch nicht bekannt sein. bei Freigabe der Sperren ist garantiert, dass auf kein Objekt mehr zugegriffen wird. vermeidet Zurücksetzen von bereits abgeschlossenen TAs #Sperren EOT-Sperren (striktes 2PL) 9DULDQWHQGHV3/ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 341 von 344 Unterscheidung zwischen zwei Sperrmodi – S-Sperre: slockT(A) Das Objekt A darf von der Transaktion T gelesen, aber nicht geschrieben werden. Auf dem Objekt A sind nun mehrere S-Sperren verschiedener Transaktionen erlaubt (S ist eine Abkürzung für 6KDUHG) – X-Sperre: xlockT(A) Die Transaktion T hat nach dem Sperren des Objekts A exklusiven lesenden und schreibenden Zugriff. Es ist somit nur eine X-Sperre auf einem Objekt A erlaubt (X ist eine Abkürung für H;FOXVLFH) RX-Protokoll Das bisherige Vorgehen ist zu restriktiv, da das Sperren von Objekten, die nur gelesen werden, zu restriktiv ist. – Eine Transaktion T2, die ein Objekt A lesen möchte, muss warten bis die Transaktion T1 ein unlock auf A ausführt (obwohl T1 keine Änderungen an A vornimmt). 6SHUUPRGL .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 342 von 344 Motivation – Bisher sind wir davon ausgegangen, dass die Sperren sich auf Objekte der gleichen Hierarchiestufe beziehen (z. B. Seiten) – Sperren auf einer höheren Stufe (z. B. Relation) sind dann sinnvoll, wenn bereits viele Kindobjekte gesperrt wurden. Dadurch kann der Verwaltungsaufwand für die Sperren erheblich reduziert werden. Multiple-granularuty Locking – S: Lesesperre – X Schreibesperre – IS Auf Objekten in der darunterliegenden Hierarchie ist eine Lesesperre beabsichtigt. – IX Auf Objekten in der darunterliegenden Hierarchie ist eine Schreibesperre beabsichtigt. Erwerb von Sperren – Top-Down: Bevor ein Objekt gesperrt wird, muss zuerst das Objekt auf der darüberliegenden Ebene gesperrt sein. Zurückgabe von Sperren – Bottom-up: Feingranulare Sperren werden zuerst zurückgegeben. +LHUDUFKLVFKH6SHUUJUDQXODWH .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV d112 Sätze d111 S11 X1 IX1 x x S Seiten Relationen Datenbank Beispiel: IX IS X S Kompatibilität der Sperrmodi S12 R1 IX1 X R2 D IS2 x x x IS S2 S31 R3 IS2 x x x IX Seite 343 von 344 .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV Seite 344 von 344 In SQL’92 kann das Korrektheitskriterium für die parallele Verarbeitung von Transaktionen durch Angabe eines Isolationslevel abgesenkt werden. – Erhöhung des Parallelitätsgrads – Gefahr einer inkonsistenten Datenbank Isolationslevel – read uncommited Dies erlaubt lesenden Transaktionen den Zugriff auf noch nicht festgeschriebene Daten (d.h. Daten können vor dem commit bereits gelesen werden. – read committed Daten können nur dann gelesen werden, wenn diese tatsächlich über ein commit festgeschrieben wurden. – repeatable reads Identische Leseoperationen innerhalb der gleichen Transaktion liefern zwar das gleiche Ergebnis. Das Phantomproblem wird jedoch nicht verhindert. – serializable Dies entspricht dem in diesem Kapitel erläuterten Serializierbarkeitsbegriff. Dies ist die Defaulteinstellung bei einem DBS. 0HKUEHQXW]HUV\QFKURQLVDWLRQLQ64/ .RRUGLQDWLRQGHV0HKUEHQXW]HUEHWULHEV