Tranzakciókezelés.

Slides:



Advertisements
Hasonló előadás
Események formális leírása, műveletek
Advertisements

Nevezetes algoritmusok
10. gyakorlat SQL SELECT.
KÉSZÍTETTE: Takács Sándor
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
ADATBÁZISOK.
© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Recovery (helyreállítás) feladatok gyakorlatra
15. tétel Adatbázis felhasználói és jogosultságaik
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Delphi programozás alapjai
Adatbázis kezelés. Hierarchikus modell Legrégebbi modell, ma már nem használatos. Az adatokat fákban tároljuk, ahol minden pont a szegmens adatokat, és.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
A DBMS fő feladatai: - adatstruktúra (adatbázisséma) definiálása,
Konkurenciavezérlés.
INSERT INTO Egy vagy több rekordot ad hozzá a táblához. Egyetlen rekordot hozzáfűző kifejezés: INSERT INTO cél_tábla (mező1,mező2,…) VALUES (érték1, érték2,
KOVÁCS DÁVID. ALAPFOGALMAK Adatbázis: Olyan adatgyűjtemény, amely egy adott feladathoz kapcsolódó adatokat szervezett módon tárolja, és biztosítja az.
Adatbázis alapú rendszerek
Adatbázis rendszerek II.
Készítette: Sárközi Anikó
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
55 kodosszeg FIZETÉS felvitel JUTALOM felvitel 11-es dolgozó kap 200-at 11-es dolgozó kap 50-et SELECT osszeg INTO x FROM d.
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
Adatbázis rendszerek II
ORACLE ORDBMS adminisztrációs feladatok 2. rész dr. Kovács László 2004.
Tranzakciók gyakorlati anyag
Tranzakciók gyakorlati anyag PPKE-ITK, Database Systems, 2010.
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Tematika Helyreállíthatóság (Failure Recovery) (8. fejezet)
Konkurenciavezérlés. Egyszerre több tranzakció is ugyanazt az adatbázist használja. T1T2…Tn Konzisztens adatbázis Az adatbázisnak konzisztensnek kell.
Nézettáblák létrehozása, módosítása és törlése
Adatbázis rendszerek II
Zárolási módszerek blokkolás sorrendiség igény Paraméterek finomság időtartam mód.
Az SQL nyelv alapjai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Tömbök és programozási tételek
Szintaktikai, szemantikai szabályok
Felhasználók és jogosultságok
Készítette: Tóth Ervin
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
Minuet: A Scalable Distributed Multiversion B-Tree Írta: Benjamin Sowell, Wojciech Golab, Mehul A. Shah Feldolgozta: Fokin Miklós, Hodosy Gábor, Tóth Tamás.
GRÁFOK Definíció: Gráfnak nevezzük véges vagy megszámlálhatóan végtelen sok pont és azokat összekötő szintén véges vagy megszámlálhatóan végtelen sok.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
ADATBÁZIS- RENDSZEREK 12. rész: Konkurenciavezérlés.
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
Adatbázisok 1. SQL (alkérdések). Az IN használata Emlékezzünk vissza: Az IN után szereplő multihalmaz elemei lekérdezéssel is megadhatók SELECT nev FROM.
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Adatbázis alapú rendszerek
Információs rendszerek
Algoritmus készítés.
Előadás másolata:

Tranzakciókezelés

Tranzakció - az adatbázison végzett műveletek (parancsok) sorozata, mely az ABKR szempontjából egy egységet alkot, olyan értelemben, hogy vagy az egész tranzakciót végrehajtja, ha ez lehetséges, ha nem lehetséges, akkor egyáltalán semmi változtatást ne végezzen az adatbázison. Lehessen parancsra vagy automatikusan a tranzakciókból elvégzett operációkat visszapörgetni, az adatbázis egy helyes állapotát visszaállítani.

Tranzakcio adatbázis konzisztens (helyes) állapotban adatbázis konzisztens (helyes) állapotban

A tranzakció a konkurencia egysége; A tranzakció a helyesség egysége; A tranzakció a visszaállítás egysége.

Adat Napló Tranzakció- kezelő Napló- Puffer- Helyreállítás- Lekérdezés- feldolgozó Tranzakció- kezelő Napló- Puffer- Helyreállítás-

Adatbázis és tranzakció kölcsönhatása Ennek a kölcsönhatásnak három fontos színhelye van: Az adatbázis elemeit tartalmazó lemezblokkok területe; A pufferkezelő által használt memóriaterület A tranzakció memóriaterülete

Alapműveletek INPUT (X): Az X adatbázis elemet tartalmazó lemezblokk másolása a pufferbe. READ (X, t): Az X adatbáziselem bemásolása a tranzakció t lokális változójába. Ha az X adatbáziselemet tartalmazó blokk nincs a pufferben, akkor előbb végre-hajtódik INPUT (X), azután kapja meg t a változó X értékét. WRITE (X, t): A t lokális változó tartalma az X adatbáziselem pufferbeli tartalmába másolódik. Ha az X adatbáziselemet tartalmazó blokk nincs a pufferben, akkor előbb végrehajtódik az INPUT (X), azután másolódik át a t lokális változó értéke a puffebeli X-be. OUTPUT (X): Az X adatbáziselemet tartalmazó puffer kimásolása lemezre.

Implicit - Explicit tranzakció INSERT INTO Alkalmazottak VALUES (123454, ’Kovács Lehel’, 2, 500) UPDATE Alkalmazottak SET Fizetés = Fizetés * 1.2 CREATE TABLE Activities (ActivID int IDENTITY (1, 1) NOT NULL , TaskID int NOT NULL , CCPersonID int NULL , PlannedStartDate datetime, PlannedEndDate datetime, RealStartDate datetime, … ) Tranzakció kezdete: BEGIN TRANSACTION sikeres befejeződése: COMMIT TRANSACTION sikertelen befejezése: ROLLBACK TRANSACTION

Konkurenciavezérlés az elveszett módosítás (lost update) problémája tranzakció, mely nem véglegesített adatokat olvas (uncommited dependency) helytelen analízis (inconsistent analysis)

Elveszett módosítás problémája

Elveszett módosítás példa1

Elveszett módosítás példa2

„piszkos adat olvasása”

Az inkonzisztens analízis problémája BankSz1 = 40 BankSz2 = 50 BankSz3 = 30 A tranzakció összegzi 3 különböző bankszámlán levő összegeket; B tranzakció áttesz 10 egységet a 3-ik számláról az első bankszámlára

Soros és sorba rendezhető ütemezések

Soros ütemezés Legyen T1 a következő tranzakció: T2 pedig: BEGIN TRANSACTION X:= X – 10; Y:= Y + 10; COMMIT TRANSACTION T2 pedig: X:= X * 2; Y:= Y * 2;

T1 tranzakció megelőzi T2-öt

T2 tranzakció előzi meg T1-et

Sorba rendezhető ütemezések Egy tranzakció megőrzi az adatbázis helyességét. Egymás után, tehát soros ütemezéssel végrehajtott tranzakciók is megőrzik az adatbázis helyességét. A soros ütemezésen kívül, a sorba rendezhető (serializable schedule) ütemezés biztosítja még az adatbázis konzisztenciájának a megmaradását. Egy ütemezés sorba rendezhető, ha ugyanolyan hatással van az adatbázis állapotára, mint valamelyik soros ütemezés.

A T1, T2 soros ütemezésnek, egy sorba rendezhető ütemezése:

A T1, T2 soros ütemezésnek, egy nem sorba rendezhető ütemezése:

Konfliktusok Konkfliktus: olyan egymást követő műveletpár az ütemezésben, amelynek ha a sorrendjét felcseréljük, akkor legalább az egyik tranzakció viselkedése megváltozhat. Nem cserélhetjük fel a műveletek sorrendjét a következő esetekben:

Ugyanannak a tranzakciónak két művelete konfliktus, pl: ri(X); wi(Y) Ugyanannak a tranzakciónak két művelete konfliktus, pl: ri(X); wi(Y) . Egy tranzación belül a műveletek sorrendje rögzített, az ABKR ezt a sorrendet nem rendezheti át. Különböző tranzaciók ugyanarra az adatbáziselemre vonatkozó írása konfliktus. Pl. wi(X); wj(X) . Ebben a sorrendben X értéke az marad, melyet Tj ír, fordított sorrendben pedig az marad, melyet Ti ír. Ezek az értékek pedig nagy valószínüséggel különbözőek.

Különböző tranzacióknak ugyanabból az adatbáziselemből való olvasása és írása konfliktus. Tehát ri(X); wj(X) konfliktus, mivel ha felcseréljük a sorrendet, akkor a Ti által olvasott X-beli érték az lesz, melyet a Tj ír és az nagy valószínűséggel nem egyezik meg az X korábbi értékével. Hasonlóan a wi(X); rj(X) is konfliktus.

A sorbarendezhetőség biztosítása zárakkal

Jelölések ri(X) - a Ti tranzakció olvassa az X adatbáziselemet (r - read) wi(X) - a Ti tranzakció írja az X adatbáziselemet (w -write) sli(X) - a Ti tranzakció osztott zárat kér az X-re xli(X) – a Ti tranzakció kizárólagos zárat kér az X-re ui(X) - a Ti tranzakció feloldja (unlock) X adatbáziselemen tartott zárát.

Kétfázisú lezárás tétel: Ha minden tranzakció betartja a kétfázisú lezárási protokollt, az összes lehetséges ütemezés sorbarendezhető. Kétfázisú lezárási protokoll: A zárolásoknak meg kell előzniük a zárak feloldását: Mielőtt egy tranzakció dolgozna egy objektummal, sikeresen le kell azt zárja; Miután felszabadított egy zárat a tranzakció nem kérhet más zárat.

A tranzakciók kérhetnek különböző zárakat, ha az ütemező nem tudja megadni a kért zárat a tranzakciók egy első-beérkezett-első-kiszolgálása (first-come-first-served) várási listába kerülnek, míg a szükséges adat felszabadul.

Azért, hogy a tranzakciók konzisztenciája megmaradjon, minden Ti tranzakció esetén bevezetjük a következő követelményeket: Az ri(X) olvasási műveletet meg kell előzze egy sli(X) vagy xli(X) úgy, hogy közben nincs ui(X) A wi(X) olvasási műveletet meg kell előzze egy xli(X) úgy, hogy közben nincs ui(X) Ha xli(X) szerepel egy ütemezésben, akkor ezután nem következhet xlj(X) vagy slj(X) valamely i-től különböző j-re anélkül, hogy közben ne szerepelne ui(X) Ha sli(X) szerepel egy ütemezésben, akkor ezután nem következhet xlj(X) i-től különböző j-re anélkül, hogy közben ne szerepelne ui(X)

upgrade lock to exclusive Ha egy tranzakciónak már van osztott zára egy adatbáziselemen, melyet módosítani akar, felminősítheti a zárat kizárólagossá

lezárható az egész adatbázis, annak, akinek sikerült lezárnia könnyű dolga van a programozás szempontjából, de senki más nem férhet hozzá; lezárható egy rekord, általában ez a legkézenfekvőbb megoldás lezárható egy rekordcsoport (egy lemezblokkban lévő rekordok vagy fa szerkezetű indexnek megfelelő rekordcsoport).

Kompatibilitási mátrix

Elveszett módosítás problémája

Tranzakció, mely nem véglegesített adatokat olvas

Az inkonzisztens analízis problémája

Holtpont Holtpont, olyan állapot, mikor két vagy több tranzakció várási állapotban van, mindenik vár a másik által lezárt objektumra. A System R ABKR–el végzett kísérletek azt mutatták, hogy nem jelenik meg kettőnél több tranzakció holtpontban.

A holtpont megoldása Módosítási zárak alkalmazása Várakozási gráf (Wait-For-Graph) Időkorlát mehanizmus

Módosítási zárak Az uli(X) módosítási zár (update lock) a Ti tranzakciónak csak X adatbáziselem olvasására ad jogot, az X írására nem, viszont csak a módosítási zárat lehet később felminősíteni, az olvasásit nem. Ha egy tranzakciónak szándékában áll módosítani az X adatbáziselemet, akkor módosítási zárat kér rá. Módosítási zárat engedélyez a rendszer az X-en akkor is, ha már van osztott zár X-en. Ha már van egy módosítási zár X-en, akkor viszont minden más zárat elutasít a rendszer, legyen az osztott, módosítási vagy kizárólagos.

Osztott(S), kizárólagos (X) és módosítási (U) zárak kompatibilitási mátrixa

Elveszett módosítás problémája

Elveszett módosítás probléma megoldva, 2-es tranzakció késleltetve van, míg 1-es felszabadítja a zárat. “Tranzakció, mely nem véglegesített adatokat olvas” probléma nem oldódik meg. A gond, hogy a zárat túl hamar felszabadítja, később visszatérünk erre a problémára. Az inkonzisztens analízis problémája sem oldódik meg. A gond nem ott van, hogy mind a két tranzakció ugyanazt az adatbáziselemet módosítja.

Várakozási gráf A gráf csúcsait a tranzakciók alkotják. (Legyen T1 tranzakció az egyik csúcsban és T2 tranzakció egy másikban.) T1 és T2 csúcs között élet rajzolunk, ha: T1 lezárva tartja az A adatbáziselemet. T2 kéri az A adatbáziselemet, hogy zárolhassa azt. Az él irányítása a T1-től a T2 felé lesz és A az él címkéje.

Ha a gráf tartalmaz ciklust, azt jelenti, hogy van holtpont. Ebben az esetben valamelyik tranzakciót, mely a körben szerepel meg kell szakítani és visszapörgetni. A rendszer ki kell derítse, hogy holtpont probléma áll fenn. A tranzakciót megszakítani azt jelenti, hogy valamelyik tranzakciót kiválasztja, mely a holtpontban szerepel – ez az áldozat (victim) –– és visszapörgetni, így felszabadul a lock, amit ez a tranzakció adott ki, és lehetősége nyílik a többi tranzakciónak, hogy folytatódjon.

Időkorlát mehanizmus A gyakorlatban nincs minden rendszernek holtpont felfedező mehanizmusa, csak egy időtúllépés (timeout) mehanizmusa, mely feltételezi, ha egy adott idő intervallumban a tranzakció nem dolgozik semmit, azt jelenti, hogy holtponton van. Az áldozatban nem lesz semmi hiba, egy pár rendszer újraindítja a tranzakciót, feltételezve, hogy változtak a feltételek, melyek a holtpontot okozták. Más rendszer olyan hiba kódot ad vissza, hogy “deadlock victim” az applikációnak és a programozó kell megoldja a feladatot, indítsa újra a tranzakciót. Mindkét esetben ajánlatos tudatni a felhasználóval a történteket.

Példa

Példa várási gráfja

Inkonzisztens analízis problémája

Szigorú két-fázisú lezárási protokoll 1. Egy tranzakció nem írhat az adatbázisba, míg nem éri el a COMMIT pontját. 2. Egy tranzakció nem szabadíthatja fel a zárait, míg be nem fejezi az írást az adatbázisba, tehát a zárak felszabadítása is COMMIT pont után történik.

Tehát egy tranzakció, mely betartja a szigorú két-fázisú lezárási protokollt a következő sorrendben hajtja végre a munkát: betartja a két-fázisú lezárási protokollt mikor elérkezik a COMMIT ponthoz beírja az adatbázisba a módosított adatbáziselemeket; majd felszabadítja a zárakat.

“piszkos adat olvasása” megoldása

Tranzakciók az SQL-ben A gyakorlatban általában nem lehet megkövetelni, hogy a műveletek egymás után legyenek végrehajtva, mivel túl sok van belőlük, ki kell használni a párhuzamosság által nyújtott lehetőségeket. Az ABKR-ek biztosítják a sorbarendezhetősé-get, a felhasználó úgy látja, mintha a műveletek végrehajtása sorban történt volna, valójában nem sorban történik.

Csak olvasó tranzakciók Ha a tranzakció csak olvas és nem módosítja az adatbázis tartamát, közölhetjük ezt az ABKR-el és akkor optimálisabb ütemezést valósít meg. Az utasítás amivel ezt közölhetjük az ABKR-el: SET TRANSACTION READ ONLY;

Az elkülönítés szintjei SQL-ben

Nem ismételhető olvasás Nem ismételhető olvasás (Unrepeteable read) akkor fordul elő, ha a tranzakciók párhuzamosan futnak, A tranzakció beolvas egy adatbáziselemet, időközben B tranzakció módosítja ugyanazt az adatbáziselemet, majd A tranzakció ismét beolvassa ugyanazt az adatbáziselemet, tehát A tranzakció “ugyanazt” az adatbáziselemet olvasta kétszer és két különböző értéket látott.

elmélet - gyakorlat Az elmélet szerint a sorba rendezhető elkülönítési szint a biztos, hogy semmilyen konkurencia probléma nem merül fel., vagyis a tranzakció úgy fut le, mintha minden más tranzakció teljes egészében vagy előtte vagy utána ment volna végbe. A gyakorlatban viszont megengednek nagyobb interferenciát a tranzakciók között.

Nem ismételhető olvasás

Fantomok A rendszer csak létező adatbáziselemeket tud zárolni, nem könnyű olyan elemeket zárolni, melye nem léteznek, de később beszúrhatók. T1 olvassa azon sorok halmazát, melyek adott feltételnek eleget tesznek, T2 új sort illeszt a táblába, mely kielégíti a feltételt, így a T1 eredménye helytelen.

Fantom T1: SELECT AVG(Atlag) FROM Diakok WHERE CsopKod = ‘531’ megismétli a kérést fantom-ot lát T2 beszúr egy új diákot a Diakok táblába

Fantom Ez valójában nem konkurencia probléma, ugyanis a (T1, T2) soros sorrend ekvivalens azzal ami történt. Tehát van egy fantom sor a Diakok táblában, melyet zárolni kellett volna, de mivel még nem létezett nem lehetett zárolni. A megoldás, hogy sorok beszúrását és törlését az egész relációra vonatkozó írásnak kell tekinteni és X zárat kell kérni az egész relációra, ezt nem kaphatja meg, csak ha a minden más zár fel van szabadítva, a példa esetén a T1 befejezése után. Egy más megoldás arra, hogy a rendszer megelőzze a fantom megjelenését: le kell zárjnia a hozzáférési utat (Acces Path), mely a feltételnek eleget tevő adathoz vezet

mit tehet a felhasználó? Az izolálási szintet a tranzakciók esetén a felhasználó beállíthatja a: SET TRANZACTION ISOLATION LEVEL TO <elkülönítési szint> a felhasználó nem ad semmi zárolást, rábízza a rendszerre.

Elkülönítési szintek közötti relációk a > erősebb feltételt jelent, akkor az elkülönítés szintjei között fennállnak a következő relációk: SERIALIZABLE > REPEATEBLE READ > > READ COMMITED > READ UNCOMMITED

Ha minden tranzakciónak SERIALIZABLE az elkülőnítés szintje, akkor több tranzakció párhuzamos végrehajtása esetén a rendszer garantálja, hogy az ütemezés sorbarendezhető. Ha egy ennél kisebb elszigeteltségi szinten fut egy tranzakció a sorbarendezhetőség meg van sértve.

SERIALIZABLE a tranzakció betartja a szigorú kétfázisú lezárási protokollt, lezárást alkalmaz, írás és olvasás előtt, tranzakció végéig tartja, úgy az objektum halmazon (indexen) is (ne jelenjen meg fantom)

REPEATABLE READ serializable –től abban különbözik, hogy indexet nem zárol – csak egyedi objektumokat, nem objektum halmazokat is. Olvasás előtt SLOCK, írás előtt XLOCK, tranzakció végéig tartja.

READ COMMITED – implicit – nem enged meg az adatbázisból visszatéríteni olyan adatot, mely nincs véglegesítve (uncommited) (dirty read nem fordulhat elő). Share lock –t kér olvasás előtt a tranzakcióban szereplő objektumokra, utána rögtön felengedi, XLOCK írás előtt, tartja tranzakció végéig.

READ UNCOMMITED share lock –t nem kér olvasás előtt, sem XLOCK –t írás esetén elolvashatja egy futó tranzakció által végzett változtatást, mely még nem volt véglegesítve ha valaki más közben kitörli az adatot, melyet olvasott, hibát sem jelez, vagy törli az egész táblát nem ajánlott egyetlen applikációnak sem esetleg, olyan statisztikai kimutatások esetén, ahol egy-két változtatás nem lényeges.