Next six chapters added (79.25% done)

This commit is contained in:
Toldi Balázs Ádám 2021-01-05 10:05:32 +01:00
parent 3cd2791890
commit 4486413223

131
db.org
View file

@ -1053,13 +1053,7 @@ semmi sem.
egyedül futna csak le egyedül futna csak le
- tartósság (durability): Ha egy tranzakció már sikeresen lefutott, akkor annak - tartósság (durability): Ha egy tranzakció már sikeresen lefutott, akkor annak
hatása ``nem veszhet el''. 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 * 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) ** Lost update (elveszett frissítés)
Két tranzakció egyszerre ugyan azt az adategységet módosítani, úgy hogy az egyik 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. 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 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ó. 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.