Adatbázis-tranzakciók, SQL és architektúrák

Részletes útmutató az adatbázis-tranzakciókról, SQL-ről és architektúrákról. Ismerje meg az ACID tulajdonságokat, a 2PC protokollt, a holtpontok feloldását és a hibákból való helyreállítást. Ideális diákoknak!

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)

  1. 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.
  2. 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.
  3. 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)

  1. Az elsődleges tranzakció koordinátora összegyűjti az összes RC jelentést a résztranzakcióktól.
  2. 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.
  3. 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 SAVEPOINT paranccsal. 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

1 / 81

Mi az a tranzakció egy relációs adatbázis-rendszer kontextusában?

Logikailag összetartozó műveletek csoportja, amely az adatbázist egyik konzisztens állapotból a másikba viszi át; vagy minden művelet végrehajtódik, v

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:

  1. 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.
  2. A naplófájlt tc-től előre haladva keresik.
  3. A START T megtalálásakor a T tranzakció hozzáadódik az UNDO listához.
  4. A COMMIT T megtalálásakor a T átkerül az UNDO listából a REDO listába.
  5. 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.

Sign up to access full content

Create a free account to unlock all study materials, take interactive tests, listen to podcasts and more.

Create free account

Related topics