Az adatbázis-tranzakciók kulcsfontosságú elemei az adatintegritás és megbízhatóság biztosításának a modern adatbázis-rendszerekben. Ez a cikk átfogó elemzést nyújt az adatbázis-tranzakciókról, az SQL-ről és az architektúrákról, amelyek elengedhetetlenek az adatok kezeléséhez és helyreállításához, különösen elosztott környezetben. Megvizsgáljuk az alapvető tulajdonságokat, a párhuzamosság-kezelést, a problémamegoldást és az SQL-ben való gyakorlati alkalmazást.
Mik azok az adatbázis-tranzakciók? Alapvető összefoglaló diákoknak
Az adatbázis-tranzakció logikailag összefüggő műveletek sorozata, amely az adatbázist egyik konzisztens állapotból egy másikba viszi át. Ez a hibakezelés és a párhuzamos feldolgozás alapegysége. Ha a tranzakcióban minden művelet sikeresen befejeződik, a változások tartósan tárolódnak. Ellenkező esetben az összes végrehajtott változás visszavonódik, és az adatbázis az eredeti állapotában marad.
A tranzakciók kulcsfontosságú tulajdonságai (ACID)
Az adatok megbízhatóságának és integritásának biztosítása érdekében a tranzakciók négy alapvető tulajdonságnak felelnek meg, amelyeket gyakran ACID mozaikszóval jelölnek:
- Atomicitás (Atomicity): A műveletek teljes sorozata egyetlen logikai egységnek tekintendő. Vagy a teljes tranzakció végrehajtódik, vagy annak egyetlen része sem. Hiba esetén az összes változás visszavonódik (ROLLBACK).
- Izoláció (Isolation): A tranzakció által végrehajtott változások nem lehetnek láthatók más tranzakciók számára, amíg a globális tranzakció sikeresen be nem fejeződött (véglegesítésre nem került). Az izoláció megakadályozza, hogy az egyik tranzakcióban fellépő hibák átterjedjenek másokra, vagy hogy a párhuzamosan futó tranzakciók kölcsönösen befolyásolják egymást. Az indukált visszavonás hatását kaszkádolt visszavonásnak (cascading rollback) vagy dominóhatásnak nevezik.
- Tartósság (Durability): Amint egy tranzakciót sikeresen véglegesítettek (COMMIT), a végrehajtott változások tartósan tárolódnak az adatbázisban, és rendszerhiba esetén sem veszhetnek el.
- Szerializálhatóság (Serializability): A tranzakciók párhuzamos feldolgozásának eredménye meg kell, hogy egyezzen azzal az eredménnyel, mintha a tranzakciókat sorosan (egymás után) hajtották volna végre valamilyen sorrendben. Ez különösen fontos az elosztott adatbázisokban.
Adatbázis-rendszer architektúrák és tranzakciótípusok
Az adatok terjedelmétől és elhelyezkedésétől függően különböző tranzakciótípusokat és architektúrákat különböztetünk meg.
Elosztott adatbázis-rendszerek és globális tranzakciók
Az elosztott adatbázis-rendszer hálózaton keresztül összekapcsolt csomópontok halmazából áll, ahol a globális adatbázis részleges részekre van osztva, amelyeket különböző csomópontokon allokáltak. A globális tranzakció egy csomóponton indul, és szükség szerint terjed tovább más csomópontokra. Részleges (lokális) tranzakciókra bomlik, amelyek részfeladatokat látnak el a megfelelő csomópontokon. Ezeket a résztranzakciókat az elsődleges tranzakció irányítja.
Tranzakciókezelő modulok elosztott rendszerekben
Az elosztott rendszer minden csomópontjának része a következő kulcsfontosságú modul:
- Tranzakciókezelő modul: Feldolgozza a felhasználói kéréseket, felosztja a tranzakciókat az adatok elosztása szerint, összeállítja a résztranzakciók eredményeit és átadja azokat a felhasználónak.
- Adatkezelő modul: Felelős az értékek olvasásáért és írásáért a lokális adatbázisba, valamint a tranzakciókezelő modullal való kommunikációért.
Lokális vs. globális tranzakciók
- Lokális tranzakció: Csak egyetlen csomóponton lévő adatokhoz igényel hozzáférést, és nem igényel együttműködést más csomópontokkal.
- Globális tranzakció: Túllépi egyetlen csomópont hatókörét, és több csomópont közötti koordinációt igényel, ahol résztranzakciókra bomlik.
Kétfázisú véglegesítési protokoll (2PC): Elosztott tranzakciók kezelése
A Kétfázisú Véglegesítési Protokoll (Two-Phase Commit Protocol) alapvető mechanizmus a globális tranzakciók atomicitásának biztosítására az elosztott adatbázisokban. Célja, hogy az összes résztranzakció vagy véglegesítésre kerüljön, vagy megszakadjon.
1. fázis: Készenléti jelentés (Szavazási fázis)
- Az elsődleges tranzakció (koordinátor) lekérdezést küld az összes résztranzakciónak, hogy készen állnak-e a véglegesítésre.
- Minden résztranzakció végrehajtja az összes műveletét, és ideiglenesen tárolja a változásokat. Ha sikeres, RC (Ready to Commit) üzenetet küld a koordinátornak. A végrehajtott változásokat még nem teszi elérhetővé más tranzakciók számára.
- Ha valamelyik résztranzakció meghibásodik, vagy nem éri el az RC-pontot a megadott időintervallumon belül (time out), ABORT üzenetet küld.
2. fázis: Véglegesítési fázis (Commit Phase)
- Az elsődleges tranzakció koordinátora összegyűjti az összes RC jelentést a résztranzakcióktól.
- Ha AZ ÖSSZES résztranzakció RC-t jelentett: A koordinátor engedélyt ad az összes résztranzakciónak a GLOBÁLIS VÉGLEGESÍTÉSRE (COMMIT). Az ABKR gondoskodik a változások tényleges tárolásáról. Ezt követően a tranzakciók elérhetővé tehetik a változásokat más tranzakciók számára.
- Ha LEGALÁBB EGY résztranzakció ABORT-ot jelentett, vagy időtúllépés történt: A koordinátor ABORT üzenetet küld az összes résztranzakciónak. A teljes globális tranzakció visszavonásra kerül.
Csomópont-kiesések kezelése 2PC esetén
Csomópont-kiesések a protokoll különböző fázisaiban fordulhatnak elő. Íme a kulcsfontosságú helyzetek és azok megoldásai:
- Az altranzakció nem inicializálható: Az elsődleges tranzakció megpróbál altranzakciót inicializálni egy másik csomóponton. Ha ez nem lehetséges, vagy az eredeti csomópont RC-t jelent (amit nem szabadna), az elsődleges tranzakció ABORT üzenetet küld az összes érintett csomópontnak.
- Az elsődleges tranzakció nem kap RC üzenetet: Az elsődleges tranzakció nem tudja, hogy az altranzakció az RC-pont előtt vagy után hibásodott-e meg. ABORT üzenetet küld az összes érintett altranzakciónak.
- A lokális csomópont nem tudja jelezni az RC-pontot: Hasonló megoldás, mint fent, az elsődleges tranzakció ABORT üzenetet küld.
- Az elsődleges tranzakció megkapta az RC/ABORT üzenetet, de nem tudja elküldeni a globális üzenetet: Az elsődleges tranzakciónak aktívnak kell maradnia, amíg az üzenetet nem kézbesíti. Ha az összes altranzakció RC-t jelentett, az elsődleges tranzakció helyreállítására várnak. Ha legalább egy ABORT-ot jelentett, a többi végrehajthat lokális abortot.
Szinkronizáció és tranzakciók párhuzamosságának kezelése
A szinkronizáció elengedhetetlen a párhuzamosan futó tranzakciók megfelelő kezeléséhez. Biztosítja, hogy a műveletek olyan sorrendben legyenek végrehajtva, hogy az eredmény megegyezzen egy soros ütemezés eredményével.
Kétfázisú zárolási protokoll (2PL)
A szinkronizáció alapját a zárolási protokollok képezik. A kétfázisú zárolási protokoll biztosítja, hogy minden hozzáférni kívánt objektumot először zárolni kell. A zárolási modul megvizsgálja a zárolási táblát, hogy fennáll-e konfliktus veszélye. A zárolások a globális COMMIT-ig vagy ABORT-ig érvényesek.
- Központi zárolás: Egy csomópont tartja fenn a központi zárolási táblát az összes érintett csomópont számára. Ez lehetővé teszi a holtpontok központi felismerését.
- Decentralizált zárolás: Minden csomópont saját zárolási táblát vezet. Ez kevésbé kommunikációigényes, de megnehezíti a globális holtpontok felismerését.
Holtpont (Deadlock) és megoldása
Holtpont akkor következik be, amikor a tranzakciók ciklikusan várnak a zárolt objektumok vagy más rendszererőforrások felszabadítására. Például, amikor a T1 tranzakció tartja az A zárat és B-re vár, miközben a T2 tartja a B zárat és A-ra vár.
Holtpont felismerése
A holtpontokat várakozási gráfok (wait-for graphs) alapján ismerik fel. A tranzakciók a gráf csomópontjai, és a „vár valakire” kapcsolatok irányított élek. A gráfban lévő körök megtalálása holtpontot jelez.
- Vizsgálati indokok: Várakozási idő túllépése, zárolási kérelem elutasítása, időszakos vizsgálat.
Holtpont elkerülése időbélyegek segítségével
Az időbélyeg-módszerek megelőzik a holtpontokat azáltal, hogy időbélyegeket (TS) rendelnek a tranzakciókhoz. Egy globális tranzakció összes résztranzakciója az elsődleges tranzakció időbélyegét viseli. Ha az R tranzakció zárat kér egy O tranzakció által tartott objektumra, összehasonlítják az időbélyegeiket:
- „Wait-Die” módszer:
if TS(R) < TS(O) then wait else die(A fiatalabb tranzakció meghal és visszavonódik, ha megpróbálja zárolni egy idősebb tranzakció objektumát.) - „Wound-Wait” módszer:
if TS(R) < TS(O) then wound else wait(Az idősebb tranzakció „megsebzi” a fiatalabb tranzakciót, ha az tartja a kért zárat, és a fiatalabb tranzakció visszavonódik.)
Wait: Várakozás az O tranzakció befejezésére vagy megszakítására. Die / Wound: Az R tranzakció megszakítása és azt követő visszavonása.
Tranzakciók SQL-ben
Az SQL nyelvben a tranzakció parancsok sorozata, amely hibakezelési és párhuzamos feldolgozási egységet alkot. Az első SQL parancs implicit módon indít egy tranzakciót.
Kulcsfontosságú SQL parancsok a tranzakciók kezelésére
- COMMIT: A tranzakció normális befejezése. Minden változás tartósan tárolódik az adatbázisban.
SQL> COMMIT - ROLLBACK: A tranzakció visszavonása. Az összes, a tranzakció kezdete óta (vagy az utolsó savepoint óta) végrehajtott változás törlődik, és az adatbázis visszatér az előző állapotba.
SQL> ROLLBACK - SAVEPOINT: Egy pontot állít be, amelyre a tranzakció visszavonható a
ROLLBACK TO SAVEPOINTparanccsal.SAVEPOINT pont_neve;A savepointra történő visszavonás nem szabadítja fel a LOG fájlokat. A savepoint megadása nélküli visszavonás felszabadítja a LOG fájlokat.
Flashcards
Tap to flip · Swipe to navigate
Hibakezelés: Hogyan működnek a naplófájlok és az UNDO/REDO algoritmusok
A hibakezelés az adatbázis konzisztens állapotának helyreállítási folyamata egy hiba után. Célja a megszakított tranzakciók visszavonása, a véglegesített tranzakciók megismétlése és a visszavont tranzakciók automatikus elindítása.
Naplófájlok (Log Files)
A naplófájlok kulcsfontosságú fájlok, amelyek a tranzakciók előrehaladásáról tárolnak információkat, és a helyreállításhoz szolgálnak. A hálózat minden csomópontjának van egy saját naplófájlja, amely a tranzakciók teljes történetét leíró bejegyzéseket tartalmaz (pl. T, START; T, attribútum_név, régi_érték, új_érték; T, COMMIT).
Tranzakció állapotok
Egy tranzakció több állapotban is lehet:
- Aktív (A): A tranzakció végrehajtásának kezdetétől.
- Részlegesen véglegesített (PC): A tranzakció utolsó műveletének végrehajtása után.
- Hibás (F): Nem lehet folytatni a tranzakció normális lefolyását.
- Megszakított (AB): A ROLLBACK művelet befejezése után.
- Véglegesített (C): A sikeres COMMIT végrehajtása után.
Ellenőrzőpontok (Checkpoints)
Az ellenőrzőpontok olyan tc pontok, amikor a pufferek tartalma lemezre íródik, és egy ellenőrző rekord kerül a naplófájlba. Ez tartalmazza az összes olyan tranzakció listáját, amelyek a tc időpontban aktívak voltak (elkezdődtek, de nem voltak véglegesítve).
UNDO / REDO algoritmus a helyreállításhoz
Ez az algoritmus az azonnali adatbázis-frissítéseken alapul, amikor az adatbázis frissítése a PC állapot elérése előtt megtörténik. A helyreállításhoz naplófájlt használnak, ahol minden változást rögzíteni kell az adatbázis frissítése előtt.
Az algoritmus menete:
- Két lista jön létre: UNDO és REDO. Az UNDO tartalmazza az ellenőrzőpontból származó tranzakciókat, a REDO üres.
- A naplófájlt
tc-től előre haladva keresik. - A
START Tmegtalálásakor a T tranzakció hozzáadódik az UNDO listához. - A
COMMIT Tmegtalálásakor a T átkerül az UNDO listából a REDO listába. - A naplófájl végén az UNDO (nem véglegesített tranzakciók) és a REDO (véglegesített tranzakciók, amelyeket meg kell ismételni) listák teljesek.
Helyreállítás:
- UNDO lista: Visszafelé feldolgozás a naplófájlban (a nem véglegesített változások visszavonása).
- REDO lista: Előre haladó feldolgozás (a véglegesített változások megismétlése).
Késleltetett változásmegvalósítási stratégia (REDO algoritmus)
Alternatíva a késleltetett változásmegvalósítási stratégia, amikor a pufferek tartalma csak a tranzakció globális véglegesítése után íródik lemezre. Ha a tranzakció nem éri el a globális véglegesítést, a lemezen lévő változások nem valósulnak meg. A naplófájlba csak az attribútumok új értékei kerülnek bejegyzésre az előrehaladáshoz. Ez a megközelítés az úgynevezett REDO algoritmust használja.
Gyakran Ismételt Kérdések (GYIK) adatbázis-tranzakciókról
Mi a különbség a COMMIT és a ROLLBACK között SQL-ben?
A COMMIT tartósan elmenti a tranzakció által végrehajtott összes változást az adatbázisba, és befejezi azt. Az adatbázis így új, konzisztens állapotba kerül. Ezzel szemben a ROLLBACK visszavonja a tranzakció kezdete óta (vagy az utolsó SAVEPOINT óta) végrehajtott összes változást, és visszaállítja az adatbázist a tranzakció előtti eredeti állapotába. Így semmilyen változás nem kerül mentésre.
Miért fontosak a tranzakciók ACID tulajdonságai?
Az ACID tulajdonságok (Atomicitás, Izoláció, Tartósság, Szerializálhatóság) alapvetőek az adatok megbízhatóságának, integritásának és konzisztenciájának biztosításához az adatbázis-rendszerekben. Nélkülük az adatbázis hajlamos lenne hibákra, adatvesztésre, inkonzisztens állapotokra és a párhuzamos feldolgozás során felmerülő problémákra, ami megbízhatatlan információkhoz és az alkalmazások működésképtelenségéhez vezetne.
Mi az a holtpont, és hogyan védekezik ellene az adatbázis?
Holtpont (deadlock) akkor következik be, amikor két vagy több tranzakció kölcsönösen vár egymás által tartott erőforrások felszabadítására, és így egyik sem tud továbbhaladni. Például, amikor a T1 tranzakció tartja az A zárat és B-re vár, miközben a T2 tartja a B zárat és A-ra vár.
Holtpont felismerése
A holtpontokat várakozási gráfok (wait-for graphs) alapján ismerik fel. A tranzakciók a gráf csomópontjai, és a „vár valakire” kapcsolatok irányított élek. A gráfban lévő körök megtalálása holtpontot jelez.
- Vizsgálati indokok: Várakozási idő túllépése, zárolási kérelem elutasítása, időszakos vizsgálat.
Holtpont elkerülése időbélyegek segítségével
Az időbélyeg-módszerek megelőzik a holtpontokat azáltal, hogy időbélyegeket (TS) rendelnek a tranzakciókhoz. Egy globális tranzakció összes résztranzakciója az elsődleges tranzakció időbélyegét viseli. Ha az R tranzakció zárat kér egy O tranzakció által tartott objektumra, összehasonlítják az időbélyegeiket:
- „Wait-Die” módszer:
if TS(R) < TS(O) then wait else die(A fiatalabb tranzakció meghal és visszavonódik, ha megpróbálja zárolni egy idősebb tranzakció objektumát.) - „Wound-Wait” módszer:
if TS(R) < TS(O) then wound else wait(Az idősebb tranzakció „megsebzi” a fiatalabb tranzakciót, ha az tartja a kért zárat, és a fiatalabb tranzakció visszavonódik.)
Wait: Várakozás az O tranzakció befejezésére vagy megszakítására. Die / Wound: Az R tranzakció megszakítása és azt követő visszavonása.