330 likes | 459 Views
CS 245: Database System Principles Notes 10: More TP. Hector Garcia-Molina Pavel Rychl ý. Další oblasti souběžného zpracování. kaskádový rollback, obnovitelný rozvrh uváznutí prevence detekce. Řízení souběžného zpracování a obnova. …. …. Příklad: T j T i W j (A)
E N D
CS 245: Database System PrinciplesNotes 10: More TP Hector Garcia-Molina Pavel Rychlý Notes 10
Další oblasti souběžného zpracování • kaskádový rollback, obnovitelný rozvrh • uváznutí • prevence • detekce Notes 10
Řízení souběžného zpracování a obnova … … Příklad: Tj Ti Wj(A) ri(A) Commit Ti Abort Tj … … … … Kaskádový rollback (raději ne!) Notes 10
Rozvrh je konfliktně serializovatelný • Tj Ti • ale ne obnovitelný Notes 10
Pro každou transakci potřebujeme dělat konečné rozhodnutí: • commit - systém zajistí, že transakce je nebo bude dokončena • abort - systém zajistí, že transakce je nebo bude zrušena (nebude mít žádný efekt) Notes 10
Přidáme další dvě akce: • Ci - commit Ti • Ai - abort Ti Notes 10
Zpět k příkladu: Tj Ti Wj(A) ri(A) Cimůže být tady commit? ... ... ... ... Notes 10
Definice Ti čte z Tj v S (Tj STi) pokud (1) wj(A)<S ri(A) (2) aj <S ri(A) (< : není před) (3) If wj(A)<Swk(A)<Sri(A) then ak <S ri(A) Notes 10
Definice Rozvrh S jeobnovitelnýpokud kdykoliv TjS Ti a j i a Ci S tak Cj <S Ci Notes 10
Poznámka: v transakcích jsou čtení i zápisy před commit nebo abort If Ci Ti, then ri(A) < Ci wi(A) < Ci If Ai Ti, then ri(A) < Ai wi(A) < Ai • a navícprávě jedna akce Ci nebo Ai na transakci Notes 10
Jak zajistit obnovitelnérozvrhy? Notes 10
striktní 2PL:zámky pro zápis držíme až do commit Tj Ti Wj(A) Cj uj(A) ri(A) ... ... ... ... ... ... ... Notes 10
Kontroly(validation) beze změny! Notes 10
S jeobnovitelnýpokud má každá transakce commitaž po dokončení (commit) všech transakcí, ze kterých čte. • S zamezuje kaskádovému rollbackpokud každá transakcečte hodnoty pouze dokončených transakcí. Notes 10
Rozvrh S jestriktní pokud každá transakcečte a zapisuje hodnoty pouze dokončených transakcí. RC Avoids cascading rollback ST SERIAL ACR Notes 10
Příklady • Obnovitelný: • w1(A) w1(B) w2(A) r2(B) c1 c2 • Zamezuje kaskádovému Rollback: • w1(A) w1(B) w2(A) c1 r2(B) c2 • Striktní: • w1(A) w1(B) c1 w2(A) r2(B) c2 Předpokl. w2(A) děláme bez čtení Notes 10
Uváznutí (Deadlocks) • detekce • graf čekání • prevence • upořádání zdrojů • časový limit • čekej-zemři • Wound-wait Notes 10
Detekce uváznutí • vytváříme (inkrementálně nebo opakovaně) graf čekání • používáme zámky • pokud najdeme cyklus, rollback viníka T5 T2 T1 T7 T4 T6 T3 Notes 10
Uspořádání zdrojů • uspořádáme všechny elementy A1, A2, …, An • transakceT může zamknout Aipo Ajpouze pokud i > j Problém : žádosti o zámky jsou nepřirozené Notes 10
Časový limit • Pokud transakce čeká více než L sec.,zrušit! • jednoduché schéma • těžká volba L Notes 10
Čekej-zemři • Transakce dostávají časovou známku ts(Ti) při svém startu • Ti může čekat na Tj pouze pokud ts(Ti)< ts(Tj)jinak umírá (je zrušena) Notes 10
wait? Příklad: T1 (ts =10) T2 (ts =20) T3 (ts =25) wait wait Notes 10
Druhýpříklad: žádá A: čeká na T2nebo T3? T1 (ts =22) T2 (ts =20) T3 (ts =25) Pozn.: ts mezi 20 a 25. wait(A) Notes 10
Druhýpříklad (pokračování): Jedna možnost: T1čeká pouze na T3. Jakmile T2získá zámek, T1musí zemřít! T1 (ts =22) T2 (ts =20) T3 (ts =25) wait(A) wait(A) Notes 10
Druhýpříklad (pokračování): Jiná možnost: T1získá zámek na A ažpo dokončení T2i T3, tedy T1čeká na T2i T3 T1umírá okamžitě! T1 (ts =22) T2 (ts =20) T3 (ts =25) wait(A) wait(A) wait(A) Notes 10
Druhýpříklad (pokračování): Další možnost: T1má být před T2, tedy T1čeká pouze na T3; T2tedy čeká na T3i T1... T2může strádat? T1 (ts =22) T2 (ts =20) T3 (ts =25) wait(A) wait(A) wait(A) redundantní hrana Notes 10
zraň-čekej • Transakce dostávají časovou známku ts(Ti) při svém startu • Ti zraňuje Tj pokud ts(Ti)< ts(Tj)jinak čeká “zraň”: rollback na Tj a přiděl zámekproTi Notes 10
wait Příklad: T1 (ts =25) T2 (ts =20) T3 (ts =10) wait wait Notes 10
Druhýpříklad: requests A: wait for T2 or T3? T1 (ts =15) T2 (ts =20) T3 (ts =10) Pozn.: ts mezi 10 a 20. wait(A) Notes 10
Druhýpříklad (pokračování): Jedna možnost: T1čeká pouze na T3. Alejakmile T2dostane zámek, T1čeká na T2 a zraňuje T2. T1 (ts =15) T2 (ts =20) T3 (ts =10) wait(A) wait(A) Notes 10
Druhýpříklad (pokračování): Jiná možnost: T1získá zámek na A ažpo dokončení T2i T3, tedy T1čeká na T2i T3 T2 zraní okamžitě! T1 (ts =15) T2 (ts =20) T3 (ts =10) wait(A) wait(A) wait(A) Notes 10
Druhýpříklad (pokračování): Jiná možnost: T1má být před T2, tedy T1čeká pouze na T3; T2tedy čeká na T3 a T1... T2otočen! T1 (ts =15) T2 (ts =20) T3 (ts =10) wait(A) wait(A) wait(A) Notes 10
Uživatelské příkazy Mnoho různých variant, obecně • Begin_work • Commit_work • Abort_work Notes 10