Tranzakciók és ellenőrzési mechanizmusaik

ügyletek

A tranzakció az adatokkal végzett műveletek sorozata, amelynek van kezdete és vége.

A tranzakció olvasási és írási műveletek egymás utáni végrehajtása. A tranzakció vége lehet a változtatások mentése (commit), vagy a módosítások visszavonása (visszaállítás). Egy adatbázissal kapcsolatban egy tranzakció több kérésből áll, amelyeket a rendszer egyetlen kérelemként kezel.

A tranzakcióknak meg kell felelniük az ACID tulajdonságoknak

Atomos állapot. A tranzakció vagy teljesen befejeződött, vagy egyáltalán nem.

Következetesség. A tranzakció lebonyolítása során nem szabad megsérteni az adatokra támasztott korlátozásokat (pl. megszorítások az adatbázisban). A következetesség azt jelenti, hogy a rendszer egyik helyes állapotból egy másik helyes állapotba kerül.

Elkülönítés. A párhuzamosan futó tranzakciók nem befolyásolhatják egymást, például megváltoztathatják egy másik tranzakció által használt adatokat. A párhuzamos tranzakciók végrehajtásának eredményének meg kell egyeznie azzal, mintha a tranzakciókat szekvenciálisan hajtanák végre.

Fenntarthatóság. Ha egyszer elkötelezte magát, a változtatásokat nem szabad elveszíteni.

Tranzakciós napló

A napló tárolja a tranzakciók változásait, rendszerhiba esetén biztosítja az adatok atomitását és stabilitását

A napló azokat az értékeket tartalmazza, amelyekkel az adatok rendelkeztek a tranzakció általi módosítás előtt és után. Az előreírási naplóstratégia megköveteli, hogy naplóbejegyzést adjon hozzá a korábbi értékekről a kezdés előtt, és a végső értékekről a tranzakció befejezése után. A rendszer hirtelen leállása esetén az adatbázis fordított sorrendben olvassa be a naplót, és törli a tranzakciók által végrehajtott változtatásokat. Ha egy megszakadt tranzakcióval találkozott, az adatbázis végrehajtja azt, és módosítja a naplót. Az adatbázis a meghibásodás időpontjában lévő állapotban előremenő sorrendben beolvassa a naplót, és visszaadja a tranzakciók által végrehajtott változtatásokat. Így megmarad a már lekötött tranzakciók stabilitása és a megszakadt tranzakció atomitása.

A sikertelen tranzakciók egyszerű ismételt végrehajtása nem elegendő a helyreállításhoz.

Példa. A felhasználó számláján 500 dollár van, és a felhasználó úgy dönt, hogy kiveszi azt egy ATM-ből. Két tranzakció van folyamatban. Az első leolvassa az egyenleg értékét, és ha elegendő pénz van az egyenlegen, pénzt bocsát ki a felhasználónak. A második levonja a szükséges összeget az egyenlegből. Tegyük fel, hogy a rendszer összeomlott és az első művelet meghiúsult, de a második igen. Ebben az esetben nem tudunk újra pénzt kiadni a felhasználónak anélkül, hogy a rendszert vissza nem állítanánk az eredeti állapotba pozitív egyenleggel.

Szigetelési szintek

Olvassa el az Elkötelezett

A Dirty Read probléma az, hogy egy tranzakció be tudja olvasni egy másik tranzakció közbenső eredményét.

Példa. A kezdeti egyenleg értéke 0 USD. A T1 50 dollárt ad az egyenlegéhez. A T2 leolvassa az egyenleg értékét (50 USD). A T1 elveti a változtatásokat és kilép. A T2 hibás egyenlegadatokkal folytatja a végrehajtást.

A megoldás a rögzített adatok olvasása (Read Committed), ami tiltja a tranzakció által megváltoztatott adatok beolvasását. Ha az A tranzakció megváltoztatott egy bizonyos adatkészletet, akkor a B tranzakció, amikor hozzáfér ezekhez az adatokhoz, kénytelen megvárni az A tranzakció befejezését.

Ismételhető olvasmány

Elveszett frissítések probléma. A T1 elmenti a változtatásokat a T2 módosításain felül.

Példa. A kezdeti egyenleg értéke 0 USD, és egyidejűleg két tranzakció tölti fel az egyenleget. T1 és T2 0 dolláros egyenleget olvasott. A T2 ezután hozzáad 200 dollárt 0 dollárhoz, és elmenti az eredményt. T1 hozzáad 100 dollárt 0 dollárhoz, és elmenti az eredményt. A végeredmény 100 dollár helyett 300 dollár.

Megismételhetetlen olvasási probléma. Ugyanazon adatok ismételt olvasása különböző értékeket ad vissza.

Példa. T1 egyenleg értéke 0 $. Ezután T2 hozzáad 50 dollárt az egyenleghez, és véget ér. A T1 újra beolvassa az adatokat, és eltérést talál az előző eredménnyel.

Az ismételhető olvasás biztosítja, hogy a második leolvasás ugyanazt az eredményt adja vissza. Az egyik tranzakció által beolvasott adatok a tranzakció befejezéséig nem módosíthatók a többinél. Ha az A tranzakció beolvasott egy bizonyos adathalmazt, akkor a B tranzakció, amikor hozzáfér ezekhez az adatokhoz, kénytelen megvárni az A tranzakció befejezését.

Rendezett olvasmány (sorozható)

Phantom Reads probléma. Két olyan lekérdezés, amelyek egy bizonyos feltétel alapján választanak ki adatokat, különböző értékeket adnak vissza.

Példa. A T1 lekéri azon felhasználók számát, akiknek egyenlege nagyobb, mint 0 USD, de kevesebb, mint 100 USD. A T2 1 USD-t von le a 101 USD egyenlegű felhasználótól. T1 újra kiadja a kérést.

Rendezett olvasmány (Serializálható). A tranzakciókat teljesen szekvenciálisan hajtják végre. Tilos a kérés feltételeinek megfelelő rekordokat frissíteni vagy hozzáadni. Ha az A tranzakció adatokat kért a teljes táblából, akkor a teljes tábla lefagy a többi tranzakció számára, amíg az A tranzakció be nem fejeződik.

Ütemező

Beállítja, hogy a párhuzamos tranzakciók során milyen sorrendben kell végrehajtani a műveleteket.

Meghatározott szintű szigetelést biztosít. Ha a műveletek eredménye nem függ a sorrendjüktől, akkor az ilyen műveletek kommutatívak (Permutable). Az olvasási műveletek és a különböző adatokon végzett műveletek kommutatívak. Az írás-olvasás és írás-írás műveletek nem kommutatívak. Az ütemező feladata a párhuzamos tranzakciók által végrehajtott műveletek átlapolása úgy, hogy a végrehajtás eredménye egyenértékű legyen a tranzakciók szekvenciális végrehajtásával.

Mechanizmusok párhuzamos jobok vezérlésére (Concurrency Control)

Az optimista a konfliktusok felismerésén és megoldásán, a pesszimista a konfliktusok kialakulásának megakadályozásán alapszik.

Az optimista megközelítésben több felhasználó is rendelkezik az adatok másolatával. Az első személy, aki befejezi a szerkesztést, elmenti a módosításokat, míg a többieknek össze kell vonniuk a módosításokat. Az optimista algoritmus lehetővé teszi a konfliktus létrejöttét, de a rendszernek ki kell épülnie a konfliktusból.

Pesszimista megközelítéssel az első felhasználó, aki rögzíti az adatokat, megakadályozza, hogy mások megkapják az adatokat. Ha ritkák a konfliktusok, akkor érdemes az optimista stratégiát választani, mert az magasabb szintű egyidejűséget biztosít.

Záró

Ha az egyik tranzakció zárolt adatokat tartalmaz, akkor a többi tranzakciónak meg kell várnia, amíg feloldásra kerül az adatokhoz való hozzáféréskor.

Egy blokk lefedhető adatbázisra, táblára, sorra vagy attribútumra. A Shared Lock ugyanazon adatokon több tranzakcióval is érvényesíthető, minden tranzakció (beleértve azt is, amelyik kiszabta) olvasását engedélyezi, tiltja a módosítást és a kizárólagos rögzítést. Az exkluzív zárolás csak egy tranzakcióval vethető ki, engedélyezi az előíró tranzakció bármely műveletét, megtiltja mások bármely tevékenységét.

A holtpont az a helyzet, amikor a tranzakciók függőben lévő állapotba kerülnek, amely határozatlan ideig tart.

Példa. Az első tranzakció a második által rögzített adatok kiadására vár, míg a második az első által rögzített adatok kiadására.

A holtponti probléma optimista megoldása lehetővé teszi a patthelyzet előfordulását, de aztán helyreállítja a rendszert a holtpontban érintett tranzakciók egyikének visszaállításával.

A holtpontokat bizonyos időközönként keresik. Az egyik észlelési módszer az idő alapján, azaz úgy tekintse, hogy holtpont lépett fel, ha a tranzakció túl sokáig tart. Amikor holtpontot talál, az egyik tranzakciót visszaállítja, lehetővé téve a holtpontban érintett többi tranzakció befejezését. Az áldozat megválasztása alapulhat a tranzakciók értéke vagy a szenioritás alapján (Wait-Die és Wound-wait séma).

Minden tranzakció T időbélyeg van hozzárendelve TS tartalmazza a tranzakció kezdő időpontját.

Várj, halj meg.

Ha TS(Ti) < TS(Tj), Akkor Ti vár, különben Ti visszagörgeti és újraindul ugyanazzal az időbélyeggel.

Ha egy fiatal tranzakció erőforrást szerzett, és egy régebbi tranzakció ugyanazt az erőforrást kéri, akkor a régebbi tranzakció várhat. Ha egy régebbi tranzakció szerzett erőforrást, akkor az erőforrást kérő fiatalabb tranzakció visszaállításra kerül.

Seb-vár.

Ha TS(Ti) < TS(Tj), Akkor Tj visszagörgeti és újraindul ugyanazzal az időbélyeggel, ellenkező esetben Ti várakozás.

Ha egy fiatalabb tranzakció erőforrást szerzett, és egy régebbi tranzakció ugyanazt az erőforrást kéri, akkor a fiatalabb tranzakció visszaállításra kerül. Ha egy régebbi tranzakció szerzett erőforrást, akkor az erőforrást kérő fiatalabb tranzakció várhat. Az elsőbbség alapú áldozatválasztás megakadályozza a holtpontokat, de visszaállítja azokat a tranzakciókat, amelyek nincsenek holtponton. A probléma az, hogy a tranzakciókat sokszor vissza lehet vonni, mert... egy régebbi tranzakció hosszú ideig megtarthatja az erőforrást.

A holtponti probléma pesszimista megoldása nem teszi lehetővé a tranzakció végrehajtásának megkezdését, ha fennáll a holtpont kockázata.

A holtpont észlelésére egy gráfot (waiting graph, wait-for-graph) készítünk, melynek csúcsai tranzakciók, az élek pedig az adatok kiadására váró tranzakcióktól az adatokat rögzítő tranzakcióhoz irányítják. Patthelyzet akkor tekinthető megtörténtnek, ha a gráfnak van ciklusa. Várakozási gráf készítése, különösen elosztott adatbázisokban, költséges eljárás.

Kétfázisú zárolás – megakadályozza a holtpontokat azáltal, hogy a tranzakció elején lefoglalja a tranzakció által használt összes erőforrást, majd a végén felszabadítja

Minden blokkoló műveletnek meg kell előznie az első feloldást. Két fázisa van: a növekedési fázis, amely során a fogantyúk felhalmozódnak, és a zsugorodási fázis, amely során a fogantyúk elengednek. Ha az egyik erőforrást nem lehet lefoglalni, a tranzakció elölről kezdődik. Előfordulhat, hogy egy tranzakció nem tudja megszerezni a szükséges erőforrásokat, például ha több tranzakció verseng ugyanazért az erőforrásért.

A kétfázisú véglegesítés biztosítja, hogy a véglegesítés minden adatbázis-replikán végrehajtásra kerüljön

Minden adatbázis beírja a módosítandó adatokra vonatkozó információkat a naplóba, és válaszol a koordinátornak OK (szavazási fázis). Miután mindenki helyesen válaszolt, a koordinátor jelzést küld, amelyben mindenkit kötelezettségvállalásra kötelez. A véglegesítés után a szerverek OK választ adnak, ha legalább az egyik nem válaszol OK, akkor a koordinátor jelzést küld az összes szervernek a változtatások törlésére (Befejezési fázis).

Időbélyegző módszer

Egy régebbi tranzakció visszaállításra kerül, amikor egy fiatalabb tranzakció által érintett adatokhoz próbál hozzáférni

Minden tranzakcióhoz időbélyeg van hozzárendelve TS a végrehajtás kezdő időpontjának megfelelő. Ha Ti idősebb Tj, Akkor TS(Ti) < TS(Tj).

Amikor egy tranzakciót visszaállítanak, új időbélyegző kerül hozzárendelésre. Minden adatobjektum Q az ügyletben részt vevő két címkével van megjelölve. W-TS(Q) — a legfiatalabb tranzakció időbélyege, amely sikeresen befejezte a rekordot Q. R-TS(Q) — a legfiatalabb tranzakció időbélyege, amely olvasási rekordot hajtott végre Q.

Amikor a tranzakció T kéri az adatok olvasását Q Két lehetőség van.

Ha TS(T) < W-TS(Q), vagyis egy fiatalabb tranzakció frissítette az adatokat, akkor a tranzakció T visszagurul.

Ha TS(T) >= W-TS(Q), akkor a leolvasás végrehajtásra kerül és R-TS(Q) egyre MAX(R-TS(Q), TS(T)).

Amikor a tranzakció T adatmódosítást kér Q Két lehetőség van.

Ha TS(T) < R-TS(Q), vagyis egy fiatalabb tranzakció már beolvassa az adatokat és ha változtatás történik, konfliktus keletkezik. Tranzakció T visszagurul.

Ha TS(T) < W-TS(Q), vagyis a tranzakció megpróbál egy újabb értéket felülírni, a T tranzakció visszagurul. Más esetekben a változtatást végrehajtják és W-TS(Q) egyenlővé válik TS(T).

Nincs szükség drága várakozási grafikon készítésre. A régebbi tranzakciók az újabbaktól függenek, így a várakozási grafikonon nincsenek ciklusok. Nincsenek holtpontok, mert a tranzakciókat nem várják meg, hanem azonnal visszaállítják. Lépcsőzetes visszagörgetés lehetséges. Ha Ti elgurult és Tj Elolvastam a módosított adatokat Ti, Akkor Tj vissza is kell gurulnia. Ha ugyanakkor Tj már elkövették, akkor megsértik a stabilitás elvét.

A lépcsőzetes visszagörgetés egyik megoldása. A tranzakció az összes írási műveletet befejezi a végén, és a többi tranzakciónak meg kell várnia a művelet befejezését. A tranzakciók végrehajtásra várnak, mielőtt elolvasnák őket.

Thomas írási szabály – az időbélyegző módszer egy változata, amelyben egy fiatalabb tranzakció által frissített adatok nem írhatók felül egy régebbi tranzakcióval

Tranzakció T adatmódosítást kér Q... Ha TS(T) < W-TS(Q), azaz a tranzakció megpróbál egy újabb értéket felülírni, a T tranzakció nem kerül visszagörgetésre, mint az időbélyeg módszernél.

Forrás: will.com

Hozzászólás