560 likes | 633 Views
Tranzakciók gyakorlati anyag. PPKE-ITK, Database Systems, 2010. Definíció: tranzakciók. Pl. bank, wiki , jegyfoglalás, neptun , stb …. Olyan program-végrehajtási egységek, amik az adatbázison valamilyen műveleteket végeznek. olvasás : vö. SELECT, X: adattagon read (X)
E N D
Tranzakciókgyakorlati anyag PPKE-ITK, Database Systems, 2010.
Definíció: tranzakciók Pl. bank, wiki, jegyfoglalás, neptun, stb… • Olyan program-végrehajtási egységek, amik az adatbázison valamilyen műveleteket végeznek. • olvasás: vö. SELECT, X: adattagon • read(X) • írás, törlés, módosítás: vö. INSERT, DELETE, UPDATE • write(X) 2 Database Systems - Tranzakciók (gyakorlat)
Elvárások tranzakciókezeléskor: ACID • Atomosság (Atomicity) • A tranzakció vagy teljes egészében, vagy egyáltalán ne hajtódjon végre. – helyreállító egység (recovery manager) • Adatbázis helyessége (Consistency)(konzisztencia, következetesség) • A tranzakció hatására az adatbázis a kezdeti konzisztens állapotból egy másik konzisztens állapotba jut. – programozó feladata • Elkülönítés (Isolation) • A tranzakció befejeződése után az adatbázis állapota csak olyan lehet, mintha a tranzakció egyedül futott volna, nem párhuzamosan a többivel. – tranzakció kezelő (ütemező) • Tartósság(Durability) • A tranzakció befejeződése után annak eredménye nem veszhet el, be kell jegyezni az adatbázisba. – tranzakció kezelő (ütemező), helyreállító egység 3 Database Systems - Tranzakciók (gyakorlat)
Tranzakció példa – sörösüvegek • x: kamrában lévő üvegek száma (adattag) • y: hűtőben lévő üvegek száma (adattag) • T1: a kamrából N db-ot átteszek a hűtőbe (tranzakció) • T2: apu hozott M db üveggel a kamrába (tranzakció) • T3: megiszunk O db üveggel a hűtőből (tranzakció) 4 Database Systems - Tranzakciók (gyakorlat)
Ütemezés (Scheduling) • Olyan szekvenciák, amik megmutatják az időbeli sorrendjét az egyidejűleg futó tranzakciók műveleteinek • Soros ütemezés: egymás után futnak le a tranzakciók • T1, T2, T6, T3, … • az ilyen mindig konzisztens • Párhuzamos ütemezés: egyszerre több tranzakció fut párhuzamosan • egy tranzakció egyik művelete megelőzhet, egy másik művelete követheti egy másik tranzakció egy műveletét… 5 Database Systems - Tranzakciók (gyakorlat)
Ütemezés – példa • Mi lesz x és y, ha a kezdőértékek: • x=15; y=5; N=5; M=10; O=2 • Ha T1 lefut, majd T2 és T3? (soros ütemezés) • T1 után x=10,y=10, T2 után x=20,y=10, T3 után x=20,y=8 • Ha T2 fut le először, majd T3 és végül T1? (soros) • T2 után x=25,y=5, T3 után x=25,y=3, T1 után x=20,y=8 • Egyéb sorrendben, ahol egymás után futnak le a tranzakciók? (soros) • végül mindig: x=20,y=8 • És ha párhuzamosan, akkor veszítünk adatot? • lásd a következő ábrán: 6 Database Systems - Tranzakciók (gyakorlat)
Párhuzamos ütemezés – példa Kezdőértékek:x=15; y=5; N=5; M=10; O=2 x=25, y=3 • igen veszítünk adatot, mivel az x és y változok sem lesznek kiírva a következő olvasás előtt • Veszítünk adatot? 7 Database Systems - Tranzakciók (gyakorlat)
Konfliktus, ekvivalencia, sorosíthatóság • Conflicting tranzakciók: • azok a tranzakciók, amelyek ugyanazon az adattagon dolgoznak, és legalább az egyik írni szeretné • Ha egy S ütemezés átalakítható egy S’ ütemezésre non-conflicting műveletek cseréjével, akkor: • S és S’ konfliktus ekvivalens. • Két művelet non-conflicting: • Ha különböző adattagon dolgoznak, vagy ha ugyanazon, de mindkettő csak olvassa. • Ha egy S ütemezés konfliktus ekvivalens egy S’ soros ütemezéssel, akkor • az S ütemezés konfliktus sorosítható. 8 Database Systems - Tranzakciók (gyakorlat)
Konfliktus-ekvivalencia – példa • Konfliktus-ekvivalens, konfliktus sorosítható: 9 Database Systems - Tranzakciók (gyakorlat)
Nézet ekvivalencia – definíció • Legyen S és S’ két ütemezés ugyanazon tranzakciós műveletekkel. Ezek nézet ekvivalensek, ha: • minden X adatelemre, ha Ti olvassa S-ben X- kezdőértékét, akkor S’-ben is ugyanúgy kell olvasnia Ti-nek X kezdőértékét ÉS • minden X adatelemre, ha Ti S-ben olvassa X-et, amely X egy létező Tj tranzakciótól származik, akkor Ti-nek S’ ütemezésben ugyanúgy egy létező Tj által adott értéket kell olvasnia, ÉS • minden X adatelemre, ha egy tranzakció S-ben az utolsó write(X) utasítást hajtja végre, akkor S’-ben ugyancsak write(X)-et kell csinálnia. 11 Database Systems - Tranzakciók (gyakorlat)
Példa – Nézet ekvivalensek-e? Nem. S ütemezés S’ ütemezés 13 Database Systems - Tranzakciók (gyakorlat)
Nézet és konfliktus ekvivalencia • Ami konfliktus ekvivalens, az nézet ekvivalens is. • Ami nézet ekvivalens, az nem biztos, hogy konfliktus ekvivalens is. Pl.: • vakonírás N-E. K-E. 14 Database Systems - Tranzakciók (gyakorlat)
Sorosíthatóság eldöntése, biztosítása • megelőzési gráf (gyakorlatban nem alkalmas) • különböző protokollok • kétfázisú protokoll • időbélyegzési protokoll (timestamping) 15 Database Systems - Tranzakciók (gyakorlat)
T1 T2 Megelőzési (precedencia) gráf • irányított gráf, melynek csúcsai maguk a tranzakciók, • élei: (~ a conflicting műveleteknél:) • TiTk között fut él, ha Ti ugyanazt az adatot írta, amit Tk olvasni fog • TiTk ---------------| | --------------- olvasta -----| |---- írni fog • TiTk ---------------| | --------------- írta -----| |---- írni fog • Példa (1): • A precedencia-gráfja: • Sorosítható-e? • Sorosítható. A, B 16 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 Példák megelőzési gráfra (2) A B B • Sorosítható-e? • Igen. Ha a gráf körmentes, akkor sorosítható. 18 Database Systems - Tranzakciók (gyakorlat)
T1 T2 Példák megelőzési gráfra (3) A, B A, B Nem körmentes, ezért nem sorosítható. 20 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T6 T4 T5 T7 Példák megelőzési gráfra (4) • Döntse el a gráf alapján, hogy sorosítható-e? • Ha igen, adjon meg legalább két sorrendet! Sorosítható. Megoldások pl: T1-T2-T3-T4-T5-T6-T7 T1-T2-T3-T5-T4-T6-T7 21 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T6 T5 T4 T7 T8 T9 Példák megelőzési gráfra (5) Megoldás: Nem körmentes! T4-T5-(T3-T6-T8)-T7-T4 22 Database Systems - Tranzakciók (gyakorlat)
Zárolási technikák (Locking) • Minden adatelemhez hozzárendelünk egy állapotjelzőt, amivel megadjuk,hogy mire használhatjuk az adatot, vagy, hogy használhatjuk-e. • lock(X): a tranzakció lock-ol egy adatot, így azt addig nem érheti el semmilyen tranzakció • unlock(X): lock feloldása • ha csak ezeket használjuk, nem lesz optimális a rendszerünk teljesítménye. • vezessünk be új lock-okat • lock-x(X): exclusivelock : csak az adott tranzakció által használható az adat, mindenki más számára hozzáférhetetlen • lock-s(X): sharedlock: (~ readonly) mindegyik tranzakció csak olvashatja őt. 23 Database Systems - Tranzakciók (gyakorlat)
Zárolási technikák (Locking) (folyt.) • és tételezzük fel ezekről a lockokról, hogy: • a tranzakciónak kötelezően mindig küldenie kell egy kérelmet (request), ha írni/olvasni akar egye adatelemet • ha már nincs szüksége az adatelemre, unlockolja • a tranzakció nem lockolja, ha már egyszer őnála van • ugyanígy, ne unlockolja, ha nincs nála 24 Database Systems - Tranzakciók (gyakorlat)
Példa – zárolási technikára – 1. • X=20, Y=10 • Ütemezés: T1, T2 Eredmény:X=15, Y=25 • Ütemezés: T2, T1 Eredmény:X= 5, Y=30 25 Database Systems - Tranzakciók (gyakorlat)
Példa – zárolási technikára – 2. Határozd meg a lockokat a következő ütemezésben: 26 Database Systems - Tranzakciók (gyakorlat)
Kétfázisú zárolási protokoll Növekvő (growing) fázis: ebben a fázisban kell minden lock-ot kiadnia a tranzakciónak Csökkenő (shrinking) fázis: a zárolások feloldhatók, de új zárolás már semmiképp sem adható ki ebben a fázisban 27 Database Systems - Tranzakciók (gyakorlat)
Kétfázisú zárolási protokoll GrowingPhase: ShrinkingPhase: GrowingPhase ShrinkingPhase MJ: Tranzakciónként külön kell megállapítani a két fázist! 28 Database Systems - Tranzakciók (gyakorlat)
Add locks, unlocks, denotethetwophase! Database Systems - Tranzakciók (gyakorlat)
Tétel: A kétfázisú protokoll szerint futó tranzakciók tetszőleges ütemezése sorbarendezhető. Kétfázisú zárolási protokoll tétele 30 Database Systems - Tranzakciók (gyakorlat)
Lefut-e az alábbi összefésült kétfázisú ütemezés? Mi lesz a végeredmény A=100, B=20 esetén? Jelöld be a fázisokat! Megoldás: Dead-Lock a lock-x(B)—lock-s(A)—lock-s(B)—lock-x(A) miatt. Példa 1. – Kétfázisú zárolási protokoll Growing Phase: Shrinking Phase: 31 Database Systems - Tranzakciók (gyakorlat)
Példa 2. – Kétfázisú zárolási protokoll • Lefut-e az alábbi összefésült kétfázisú ütemezés? • Mi lesz a végeredmény A=100, B=20 esetén? • Jelöld be a fázisokat! • Megoldás: • Igen, lefut. • Avégeredmény:A=70, B=20 lesz. Growing Phase: Shrinking Phase: 32 Database Systems - Tranzakciók (gyakorlat)
Időbélyegzési technika, TimeStamping • Példa: bankautomata, tranzakciószám, stb… • Minden tranzakció kap egy időbélyeget: • TS(Ti): i a tranzakció fiatalságát jelenti • kisebb TS ~ öregebb! (vö. szül. évszám…) • Minden adat is kap egy írási és egy olvasási időbélyeget: • read-timestamp: RTS(X) – X az adat • write-timestamp: WTS(X) – X az adat • lényegében legutóbb/legfiatalabbként kiolvasó/beíró tranzakció TS-je • mindig a fiatalabb van előnyben, ha az öregebb akar olvasni, az elavult 35 Database Systems - Tranzakciók (gyakorlat)
Szabályok – Időbélyegzési technika • 1. Legyen Tj tranzakció, mely read(X) műveletet szeretne • Ha TS(Tj) < W-timestamp(X), akkor Tj X-nek olyan értékét olvasná ki, amit már fölülírtak azóta, így ezt a read-et elutasítjuk (+Tj rollback) • Ha TS(Tj) ≥ W-timestamp(X), akkor megtörténik az olvasás, és a R-timestamp(X) értékét az R-timestamp(X) és a TS(Tj) közül a legnagyobb értékére állítjuk max{r-timestamp(x),TS(Ti)} • 2. Legyen Tj tranzakció olyan, mely write(X) műveletet hajtana végre • Ha TS(Tj) < W-timestamp(X), akkor Tj egy elavult adatot írna, így ezt a write-ot elutasítjuk (+Tj rollback) • Ha TS(Tj) < R-timestamp(X), akkor Tj olyanra állítaná be X-et, amit azóta már kiolvastak, így ezt a write-ot elutasítjuk (+Tj rollback) • Egyébként az írás végrehajtódik, és W-timestamp(X) értékét TS(Tj)-re állítjuk 36 Database Systems - Tranzakciók (gyakorlat)
Szabályok – Időbélyegzési technika • 1. Legyen Tj tranzakció, mely read(X) műveletet szeretne • Ha TS(Tj) < W-timestamp(X), akkor Tj X-nek olyan értékét olvasná ki, amit már fölülírtak azóta, így ezt a read-et elutasítjuk (+Tj rollback) • Ha TS(Tj) ≥ W-timestamp(X), akkor megtörténik az olvasás, és a R-timestamp(X) értékét az R-timestamp(X) és a TS(Tj) közül a legnagyobb értékére állítjuk max{r-timestamp(x),TS(Ti)} • 2. Legyen Tj tranzakció olyan, mely write(X) műveletet hajtana végre • Ha TS(Tj) < W-timestamp(X), akkor Tj egy elavult adatot írna, így ezt a write-ot elutasítjuk (+Tj rollback) • Ha TS(Tj) < R-timestamp(X), akkor Tj olyanra állítaná be X-et, amit azóta már kiolvastak, így ezt a write-ot elutasítjuk (+Tj rollback) • Egyébként az írás végrehajtódik, és W-timestamp(X) értékét TS(Tj)-re állítjuk • Thomas’ Writing Rule: • 2. a) ~vakoníráskor: Tj-ben write(X) igény => • ha RTS(X) < TS(Tj) < WTS(X), akkor a write(X) művelet nem futhat le, de a tranzakció folytatódhat, mégsincs abort és rollback. 37 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1. 38 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 1. lépés RTS(X)=null WTS(X)=null TS(T2)=2 1. b) szabály RTS(X)=2 39 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 2. lépés RTS(Z)=null WTS(Z)=null TS(T3)=3 RTS(X)=2 2. c) szabály WTS(Z)=3 40 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 3. lépés RTS(X)=2 WTS(X)=null TS(T1)=1 RTS(X)=2 WTS(Z)=3 1. b) szabály TS(T1) ? RTS(X) 1 < 2 RTS(X)=2 41 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 4. lépés RTS(X)=2 WTS(X)=null TS(T4)=4 RTS(X)=2 WTS(Z)=3 RTS(X)=2 1. b) szabály TS(T4) ? RTS(X) 4 > 2 RTS(X)=4 42 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 5. lépés RTS(X)=2 RTS(X)=4 WTS(X)=null TS(T3)=3 WTS(Z)=3 RTS(X)=2 1. b) szabály RTS(X)=4 TS(T3) ? RTS(X) 3 < 4 RTS(X)=4 43 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 6. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(Y)=null WTS(Y)=null TS(T2)=2 RTS(X)=4 RTS(X)=4 2. c) szabály WTS(Y)=2 44 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 7. lépés RTS(X)=2 RTS(Y)=null WTS(Y)=2 TS(T4)=4 WTS(Z)=3 RTS(X)=2 RTS(X)=4 1. read-kérdés: TS(T4) ? WTS(Y) 4 > 2 RTS(X)=4 WTS(Y)=2 1. b) szabály RTS(Y)=4 45 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 8. lépés RTS(X)=2 WTS(Z)=3 RTS(Z)=null WTS(Z)=3 TS(T2)=2 RTS(X)=2 RTS(X)=4 RTS(X)=4 1. read-kérdés: TS(T2) ? WTS(Z) 2 < 3 WTS(Y)=2 RTS(Y)=4 1. a) szabály T2 abortál + rollback:WTS(Y):=null 46 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 9. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 WTS(X)=null TS(T1)=1 RTS(X)=4 RTS(X)=4 WTS(Y)=2 2. write-kérdés: TS(T1) ? RTS(X) 1 < 4 RTS(Y)=4 2. b) szabály T1 abortál (+ rollback: nincs mit) 47 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 10. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(X)=4 RTS(X)=4 WTS(X)=null TS(T5)=5 RTS(Y)=4 1. b) szabály TS(T5) ? RTS(X) 5 > 4 RTS(X)=5 48 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 11. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(Y)=4 WTS(Y)=2 null TS(T3)=3 RTS(X)=4 RTS(Y)=4 1. read-kérdés: TS(T3) ? WTS(Y) 3 > null RTS(X)=5 1. b) szabály TS(T3) ? RTS(Y) 3 < 4 RTS(Y)=4 49 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 12. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(Y)=4 WTS(Y)=2 null TS(T5)=5 RTS(X)=4 WTS(Y)=2 2. write-kérdés: TS(T5) ? WTS(Y) 5 > null TS(T5) ? RTS(Y) 5 > 4 RTS(Y)=4 RTS(X)=5 RTS(Y)=4 2.c) szabály WTS(Y)=5 50 Database Systems - Tranzakciók (gyakorlat)