Sperrverfahren Marc Monecke [email protected] Praktische Informatik Fachbereich Elektrotechnik und Informatik Universität Siegen, D-57068 Siegen 2. Juli 2003 Inhaltsverzeichnis 1 Einleitung und Motivation 2 Serialisierbarkeit 2.1 Concurrency Control 2.2 Serialisierbarkeit . . 2.3 Konfliktfreiheit . . . 2.4 On-line Scheduler . . 1 . . . . 1 1 1 2 2 3 Sperrverfahren 3.1 Wechselseitiger Ausschluß . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Sperrmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Schreib- und Lesesperren . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2 4 Sperrprotokolle 4.1 Wechselseitiger Ausschluß: XPE 4.1.1 Beispiel . . . . . . . . . 4.2 Wechselseitiger Ausschluß: SPE 4.2.1 Beispiel . . . . . . . . . 4.3 Höhere Parallelität: SE . . . . . 4.3.1 Beispiel . . . . . . . . . . . . . . . 3 3 3 3 4 4 4 5 Zwei-Phasen-Protokoll: 2PL 5.1 Variante: Sperren bis EOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Variante: Preclaiming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 Isolationsstufen 6 7 Zusammenfassung 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Einleitung und Motivation – oft arbeiten viele Benutzer parallel auf der Datenbank → parallele Transaktionen – Probleme, Fehler möglich – einfache Lösung: Transaktionen seriell ausführen – Problem dabei: geringere Parallelität, schlechtere Antwortzeiten – Ziel: Transaktionen parallel ausführen, dabei Interferenzen vermeiden 2 Serialisierbarkeit – Aktion: – lesender oder schreibender Zugriff auf die Datenbank – atomar – im Kern seriell ausgeführt Benutzer: T1 --- a11 --------- a12 ----------- a13 T2 --------- a21 ---------- a22 ------------ a23 ---- a24 .......................................................... DBMS-Kern: a11 a12 a13 a21 a22 a23 a24 – Verzahnung der Transaktionen T1 und T2 2.1 Concurrency Control – Aufgabe des DBMS: Transaktionen ohne Interferenzen ausführen: Nebenläufigkeitssteuerung, Concurrency Control – Transaktionen scheinbar nacheinander, also seriell ausführen – dazu Aktionen verschieben a11 <-- a12 <-- a13 a21 --> a22 --> a23 a24 .......................................................... a11 a12 a13 a21 a22 a23 a24 2.2 Serialisierbarkeit – Verzahnung der Transaktionen serialisierbar, wenn Aktionen ohne Konflikte verschoben werden können – Transaktion wird scheinbar zu einem Zeitpunkt, dem Serialisierungspunkt, ausgeführt 1 a11 a12 a13 a21 a22 a23 a24 .......................................................... S1 S2 – Voraussetzung: Aktionen können konfliktfrei dahin verschoben werden 2.3 Konfliktfreiheit – beim Verschieben wird Reihenfolge von Aktionen geändert – nur möglich, wenn Ergebnis der Aktionsausführung gleich bleibt – Voraussetzung für Konfliktfreiheit: – Aktionen arbeiten auf verschiedenen Objekten – beide Aktionen greifen nur lesend auf die Datenbank zu – Abstraktion: nur Aktionen read(X) und write(X) betrachten 2.4 On-line Scheduler – Serialisierbarkeit bezieht sich auf vollständige Transaktionen – Problem: DBMS muß on-line prüfen, ob Aktion ausgeführt werden kann → on-line scheduler – überführt Aufrufsequenz in Ausführungssequenz 3 3.1 Sperrverfahren Wechselseitiger Ausschluß – Ziel: Serialisierungspunkte garantieren – Ansatz: alle benutzten DB-Objekte exklusiv für Transaktion reservieren – Transaktion sperrt Objekte; nur Inhaber von Sperre darf zugreifen 3.2 Sperrmodi → Arten von Sperren klassifizieren: – Zugriffsrechte des Inhabers – Verträglichkeit mit anderen Sperren 3.2.1 Schreib- und Lesesperren – Schreibsperre, exclusive lock, X-Sperre – Lesesperre, shared lock, S-Sperre 2 Veträglichkeitsmatrix vorhandene Sperre 4 beantragte Sperre S-Sperre X-Sperre keine + + S-Sperre + - X-Sperre - - Sperrprotokolle → legen Vorgehen beim Anfordern und Freigeben von Sperren fest 4.1 Wechselseitiger Ausschluß: XPE – zu Beginn jeder Transaktion (TA) alle relevanten Objekte exklusiv gesperrt (preclaiming) X P – am Ende der TA (EOT) wieder freigeben E 4.1.1 Beispiel Aufrufsequenz: T1 r(X) ------------------------ w(X) T2 r(Y) --------- w(X) T3 r(Y) ------------- w(Z) Ausführungssequenz: T1 r(X) ------------------------ w(X) T2 ? ......................... r(Y) --------- w(X) T3 ? ...................................... r(Y) ---------- w(Z) – Ausführungssequenz seriell – geringere Parallelität – Verbesserung möglich: Y wird nur gelesen → T2, T3 müßten eigentlich nicht warten! 4.2 Wechselseitiger Ausschluß: SPE – wie XPE, aber zusätzlich Lesesperren (shared locks) 3 S 4.2.1 Beispiel Aufrufsequenz: T1 r(X) ------------------------ w(X) T2 r(Y) --------- w(X) T3 r(Y) -------------------- w(Z) Ausführungssequenz: T1 r(X) ------------------------ w(X) T2 ? ......................... r(Y) --------- w(X) T3 r(Y) -------------------- w(Z) – Lesesperren an Y für T2 und T3 sind kompatibel → werden sofort zugeteilt – keine serielle Ausführung, aber serialisierbar – Problem: Endlosblockierung möglich (T2) 4.3 Höhere Parallelität: SE – wie SPE, aber Objekte erst unmittelbar vor erster Benutzung sperren – also kein preclaiming – höhere Parallelität – geringere Wartezeiten 4.3.1 Beispiel → T2 muß nicht unnötig auf Zuteilung von Sperre an Y warten Aufrufsequenz: T1 r(X) ------------------------ w(X) T2 r(Y) --------- w(X) T3 r(Y) --------------- w(Z) Ausführungssequenz: T1 r(X) ------------------------ w(X) T2 r(Y) ----- ?.............. ------- w(X) T3 r(Y) --------------- w(Z) Problem: Deadlocks möglich – zyklische Wartesituation – muß vom DBMS überwacht/aufgelöst werden → Aufwand T1 T2 r(X) ------------------ w(Y) r(Y) -------------------- w(X) 4 5 Zwei-Phasen-Protokoll: 2PL – Zeitdauer, während der Objekt gesperrt ist, möglichst kurz halten und – Serialisierbarkeit gewährleisten – Wenn Sperre freigegeben wurde, werden keine neuen Sperren angefordert Zahl gehaltener Sperren ^ | | /------------------------\ | / \ | / \ | / \ | / \ | / \ -+--------------------------------------------> Zeit Wachstumsphase 5.1 Verarbeitungsphase Schrumpfungsphase Variante: Sperren bis EOT Zahl gehaltener Sperren ^ | | /------------------------| | / | | / | | / | | / | | / | -+--------------------------------------------> Zeit – verlängerte Sperrzeit → geringere Parallelität – geringerer Verwaltungsaufwand – keine unsicheren Werte (dirty reads) → keine Cascading Rollbacks 5 5.2 Variante: Preclaiming Zahl gehaltener Sperren ^ | | |------------------------\ | | \ | | \ | | \ | | \ | | \ -+--------------------------------------------> Zeit – verlängerte Sperrzeit – Deadlock-frei – Problem: Sperranforderung im voraus 6 Isolationsstufen Aufweichen der Isolation von TAen → höhere Parallelität Isolationsstufen in SQL: 1. read uncommitted: Lesetransaktionen, nicht vor parallelen TAen geschützt → dirty reads möglich 2. read committed: keine unsicheren Werte lesen; aber keine Lesesperren anfordern → nichtwiederholbares Lesen möglich 3. repeatable read: Lesesperren anfordern 4. serializable: garantiert Serialisierbarkeit 7 Zusammenfassung 1. Sperrverfahren verhindern Probleme beim parallelen Zugriff auf Datenbanken 2. einfach: wechselseitiger Ausschluß 3. 2-Phasen-Protokoll ist allgemeinstes Sperrprotokoll 4. Sperren bis EOT und Preclaiming sind Sonderfälle 5. in SQL kann Isolationsstufe von TA angegeben werden 6