diff --git a/db.org b/db.org index 6517029..f32cfe1 100644 --- a/db.org +++ b/db.org @@ -1053,13 +1053,7 @@ semmi sem. egyedül futna csak le - tartósság (durability): Ha egy tranzakció már sikeresen lefutott, akkor annak hatása ``nem veszhet el''. -** Ütemezés -Tranzakciók elemi műveleteinek összessége, melyben a műveletek időbeli sorrendje -is egyértelműen meghatározott. * lost update, non-repetable read, phantom read, dirty data -** Sorosíthatóság -Egy ütemezés pontosan akkor sorosítható, ha létezik olyan soros ütemezés, -amelyek minden hatása a módosított adatokra azonos az adott ütemezéssel. ** Lost update (elveszett frissítés) Két tranzakció egyszerre ugyan azt az adategységet módosítani, úgy hogy az egyik felülírja a másik tranzakciót, így a az első módosítás elveszik. @@ -1077,3 +1071,128 @@ $T_1$ tranzakció azelőtt írt az adatbázisba, hogy sikeresen befejeződött volna. Ha a $T_1$ tranzakció végül valóban sikertelennek bizonyul, akkor a piszkos adat az adatbázisból mihamarabb eltávolítandó. +* Problémák a zárakkal: pattok és éhezés +** Zár (lock) +Hozzáférési privilégium egy adategységen, amely adható és visszaadható. +** Legális ütemezés +Legális az ütemezés, amelyben +- a lockolt adategységet fel is szabadítják +- ha egy adategység már foglalt - mert egy másik tranzakció zárat tart fenn + rajta -, akkor a tranzakció a zár feloldásáig várakozik +** Problémák zárakkal +*** Patt +Ha egy $T_m$ tranzakció azért nem tud továbblépni, mert egy olyan $A$ +adategységre vár, amin egy olyan $T_n\neq T_m$ tranzakció tart fenn zárat, ami +azért nem tud továbblépni mert, ehhet olyan adategységhez kéne hozzáférnie, amin +már $T_m$ tart fenn zárat, akkor pattról, holtpontról (deadlock) beszélünk. +**** Megoldási lehetőségek +- A tranzakcióhoz szüséges összes adategységet már a kezdéskor lefoglalja. Ha + valamely zárat nem kapja meg, akkor meg sem próbálkozhat egyetlen művelettel sem. +- Ha egy tranzakció túl sokat várakozik, akkor valószínűleg patt-helyzetbe + került, ezért abortálandó +- Valamilyen egyértelmű sorrendet rendelünk az adategységekhez és zárat csak + ennek sorrendjében lehet kérni. +- Folyamatosan monitorozzuk a zárak elhelyezkedését, és ha valahol patthelyzetet + érzékelünk akkor valamely trancakciót, amely a pattot okozza, megszakítjuk. +**** Várakozási gráf +Olyan irányított gráf, ahol a csomópontjai a trancakciók, egy élt pedig akkor +rajzolunk a $T_i$ csomópontól a $T_j$ csomópont felé, ha $T_i$ tranzakció +bármely okból várakoztatja $T_j$ tranzakciót úgy, hogy nem tud továbbmenni. +**** Tétel +Adott időpillanatban nincs patt $\Leftrightarrow$ a várakozási gráfban nincs +kör, azaz a gráf DAG. +*** Éhezés (starving,livelock) +Ha egy tranzakció egy adategység lockolására vár, de közben más tranzakciók +mindig lockolják előtte a kédéses adategységet, akkor éhezésről beszélünk. + +Egy lehetőség az éhezés elkerülésére, ha feljegyezzük a sikertelen zárkéréseket, +és ha egy adategység felszabadul, akkor zárat csak a zárkérések sorrendjében +ítélünk oda (FIFO stratégia) +* Ütemezések fajtái +** Ütemezés +Tranzakciók elemi műveleteinek összessége, melyben a műveletek időbeli sorrendje +is egyértelműen meghatározott. +** Sorosíthatóság +Egy ütemezés pontosan akkor sorosítható, ha létezik olyan soros ütemezés, +amelyek minden hatása a módosított adatokra azonos az adott ütemezéssel. +** Izolációs elv +Feltételezzük, hogy egy tranzakció elvárt, korrekt eredménye az, amit akkor +kapunk, ha a tranzakció futása közben más tranzakció nem fut. +** Korrekt +Egy ütemezés pontosan akkor korrekt, ha sorosítható. +** Ütemező +A DBMS azon része, amely az adatelérési igények megítékése felett dönt (pl +sorosíthatóság biztosítása). Ennek során +- Engedélyezheti az egyes műveleteket +- Ha ennek feltételei nem állnak fent, akkor + - várakozásra kényszerítheti + - abortálhatja +* Tranzakció modellek +** Egyszerű tranzakció modell + Egyszerű tranzakció modellről beszélünk ha: + - csak egy fajta zár léztezik + - egy adatelemen egy időben csak egyetlen zár lehet. +** sorosítási gráf, precedenciagráf +Olyan irányított gráf, amely csomópontjai tranzakciók és egy $T_i$ csomópontból +egy $T_j$ csomópontba akkor húzunk élt, ha van olyan $A$ adategység, amely egy +adott $S$ ütemezésben a $T_i$ tranzakció zárat helyezett el, majd a zár +felszabadítása után először a $T_j$ tranzakció helyez el zárat. +** Tétel +Egy $S$ ütemezés sorosítható $\Leftrightarrow$ a sorosítási gráf DAG. +* Kétfázísú zárolás (2PL) +** Kétfázísú zárolás (2PL) +Egy tranzakció a kétfázisú zárolás protokollt követi, ha az első +zárfelszabadítást megelőzni mindegyik zárkérés. +** Tétel +Ha egy legális ütemezés minden tranzakciója a $2PL\text{-t}$ követi, akkor az +ütemezés sorosítható. +** Zárpont +Az az időpont, amikor egy kétfázisú protokoll szerinti tranzakció az utolsó +zárját is megkapja. +** RLOCK-WLOCK modell +A modell két fajta zárt definiál: +- RLOCK: ha $T:RLOCK$ $A$ érvényes, akkor más tranzakció is olvashatja + $A\text{-t}$, de írni egy sem írhatja +- WLOCK: ha $T:WLOCK$ $A$ érvényes, akkor $T\text{-n}$ kívül más tranzakció nem + fér hozzá $A\text{-hoz}$, sem írásra , sem olvasásra. +** Tétel +Egy $RLOCK-WLOCK$ modellbeli $S$ ütemezés sorosítható $\Leftrightarrow$ a fenti +szabályok szerint rajzolt sorosítási gráf DAG. +** Definíció +Egy $RLOCK-WLOCK$ modell szerinti tranzakció kétfázisú, ha minden $RLOCK$ és +$WLOCK$ megelőzi az első $UNLOCK\text{-ot}$ +** Tétel +Ha egy ütemezésben csak kétfázísú, $RLOCK-WLOCK$ modell szerinti tranzakciók +vannak, akkor az ütemezés sorosítható. +* A fa protokoll +Az egyszerű tranzakció modellt követjük és egy csomópont +zárolása nem jelenti a gyerekek zárolását is. +** Szabályai +1. Egy tranzakció az első $LOCK\text{-ot}$ akárhová teheti +2. A további $LOCK\text{-ok}$ csak akkor helyezhetők el, ha az adategység + szűlőjére az adott tranzakció már rakott zárat +3. Egyazon tranzakció kétszer ugyanazt az adategységet nem zárolhatja +** Tétel +A fa protolollnak eleget tevő legális ütemezések sorosíthatók. +* Figyelmesztető protokol +Az egyszerű tranzakció modellt követjük, de egy csomópont zárolása a gyerek és +az összes leszármazott csomópontok zárolását is jelenti(impicit zár). +** Zárkonfliktus +Egy $T_2$ tranzakció, egy olyan adategységre tesz lockot, amely leszármazottját +már egy $T_1$ tranzakció lezárt magáának. +** Figyelmeztető protokol zárművei +- $LOCK$ $A$: zárolja $A\text{-t}$ és az összes leszármazott csomópontot is. Két + különböző tranzakció nem tarthat fent zárat ugyanazon adategységen. +- $WARN$ $A$: $A\text{-ra}$ figyelmeztetést rak. Ekkor $A\text{-t}$ más + tranzakció nem zárolhatja +- $UNLOCK$ $A$: eltávolítja a zárat vagy az $UNLOCK\text{-ot}$ kiadó tranzakció + áltak elhelyezett figyelmeztetést $A\text{-ról}$ +** További szabályok +1. Egy tranzakció első művelete kötelezően $LOCK$ gyökér vagy $WARN$ gyökér +2. $LOCK$ $A$ vagy $WARN$ $A$ akkor helyezhető el, ha $A$ szülőjén ugyanaz a + tranzakció már helyezett el $WARN\text{-t}$. +3. $UNLOCK$ $A$ akkor lehetséges, ha gyerekein már ugyanaz a tranzakció nem tart + fenn sem $LOCK\text{-ot}$ sem $WARN\text{-t}$ +4. Kétfázisú: az első $UNLOCK$ után nem következhet $LOCK$ vagy $WARN$ +** Tétel +A figyelmeztető protokollt követő legális ütemezs zárkonfliktusmentesek és sorosíthatóak.