Transakcie Flashcards
Rozvrh je kompletný keď…
Rozvrh je kompletný, ak v ňom všetky transakcie končia buď operáciou COMMIT alebo ABORT
Transakcia je v danom čase aktívna ak…
Transakcia je v danom čase aktívna, ak v tom čase už začala (t.j. bola vykonaná jej operácia START) a zároveň v tom čase ešte neskončila (t.j. nebola vykonaná jej operácia COMMIT či ABORT)
V histórii sú dve operácie konfliktné ak …
V histórii sú dve operácie konfliktné ak patria rôznym
transakciám, ich operandom je rovnaký objekt a aspoň jedna z tých operácií je write
Dve histórie sú konflikt-ekvivalentné ak…
Dve histórie sú konflikt-ekvivalentné ak
• pozostávajú z rovnakých operácií a
• relatívne poradie každých dvoch konfliktných operácií je rovnaké v oboch históriách
Sériový rozvrh
Rozvrh je sériový ak je kompletný (t.j. každá transakcia
v tom rozvrhu končí commitom alebo abortom) a pre každú dvojicu transakcií T1, T2 platí, že buď všetky operácie T1 v tom rozvrhu predchádzajú operáciám T2 alebo naopak
Konflikt-sériovateľný rozvrh
Rozvrh je konflikt-sériovateľný ak jeho projekcia na
commitované transakcie je konflikt-ekvivalentná niektorému sériovému rozvrhu tých commitovaných transakcií
Precedenčný graf
orientovaný graf, vrcholy sú transakcie, z V1 do V2 je hrana keď existuje konfliktná operácia medzi V1 a V2 a operácia v V1 je skôr ako V2
Ako vieme testovať sériovateľnosť pomocou precedenčného grafu?
Rozvrh je konflikt-sériovateľný práve vtedy, ak jeho
precedenčný graf je acyklický
Opíš Izoláciu: Zamykanie (locking)
Idea: do rozvrhu sa pridajú operácie lock a unlock, ktorými sa zamykajú resp. odomykajú dátové objekty. Transakcia smie dátový objekt čítať/písať len v momente, keď vlastní potrebný zámok na ten objekt. Commit je triviálny, netreba nič kontrolovať
Aké sú základne typy zámkov?
Základné typy zámkov:
• Read-lock (RL): dovoľuje iba čítať
• Write-lock (WL), exclusive-lock: dovoľuje čítať aj písať
Aké zámky sú kompatibilné a prečo?
RL a RL
Dokáž: Two-phase locking generuje len konflikt-sériovateľné rozvrhy
slide 33
Dá sa každý konflikt-sériovateľný rozvrh vygenerovať two-phase locking algoritmom?
Nie, pozri slide 33
r1(X), r2(X), r1(X), w2(X), c1, c2
Načo sú dobré a dôležité transkacie?
Musíme počítať s prístupom k db viac ľudí naraz
Aké sú podmienky transakcií?
- spránve výsledky
- obnoviteľnosť
- konzistentnosť
Transakcia je program, ktorý …
Transakcia je program, ktorý pristupuje k
databáze
Aká je postupnosť operácií v transakcii?
- START
- READ,WRITE, DELETE, INSERT
- COMMIT/ABORT
Čo je ACID?
Požiadavka na transakčný DB systém
Atomicita, Konzistencia, Izolácia, Durabilita
Kto/čo sa stará o usmerňovanie transakcií a čo robí?
Transakčný databázový systém
poradie vykonávania operácií
riešenie výpadkov a pod.
Dôvody pre ABORT transakcie
Výpadok na strane klienta, servera, medzi klientom a serverom
Transakcia sa sama rozhodne pre ABORT
Čo je rozvrh?
postupnosť, ktorá vznikne premiešaním operácií niekoľkých transakcií, vo všeobecnosti nekompletných. Toto premiešanie nie je ľubovoľné—zachováva
poradie operácií jednotlivých transakcií
Aký je sériový rozvrh?
Transakcie za sebou
Aký je sériovateľný rozvrh?
Sériovateľný rozvrh má na transakcie a stav databázy
rovnaký efekt ako niektorý zo sériových rozvrhov, nezávisle od stavu databázy a štruktúry transakcií
transakcia T2 číta X od transakcie T1
w1(X) je posledná operácia na X pred r2(X)
Kedy sú rozvrhy view-ekvivalentné?
rozvrhy sú view-ekvivalentné, ak majú rovnaký efekt na
transakcie (čítania) aj na databázu (zápisy)
Ako vieme generovať konflikt-sériovateľné rozvrhy?
Algoritmus zámkov (lock na dátové objekty), Algoritmus časových pečiatok, Multiversion algoritmus (zapisovanie najprv do lokálnej db), Validačný algoritmus (easy pohoda ale prísne kontroluje commit)
Čo je two-phase locking?
Dvojfázové zamykanie
- Ak transakcia už niekedy urobila unlock, nesmie už nikdy žiadať o ďalší lock.
- Transakcia musí vlastniť potrebný zámok keď sa pokúša o čítanie/písanie dátového objektu.
Čo je UPGL lock?
Upgrade lock, kedykoľvek vie požiadať o upgrade na write lock alebo read lock
Ako funguje timestamp izolácia?
Každá transakcia Tdostane pri svojom štarte timestamp.
Každý objekt má dve pečiatky: jedna sa aktualizuje keď sa X číta, druhá sa aktualizuje keď sa do X zapisuje.
Transakcia nesmie čítať hodnoty, ktoré písala neskôr začatá transakcia
Transakcia nesmie písať hodnoty, ktoré čítala alebo písala neskôr začatá transakcia
Čo je Multiversion concurrency control (MVCC)?
slide 40
Čo je predpokladom pre obnovu? Čo treba robiť počas behu?
Logovať!
Aké operácie v obnove robíme pre abortované a aké pre commitované transakcie?
UNDO (pre abortované transakcie) a REDO (pre commitované transakcie)
Čo je latch?
Zámok ktorý sa drží len chvíľu, v tomto prípade:
synchronizácia medzi hardwarom (DMA) a softwarom
(cache manager).
Treba riešiť aj read v obnove?
Nie, stačí len write
Aké dáta sú v log file?
- Začiatok transakcie Ti:
- Write-operácie transakcie Ti:
- Commit transakcie Ti:
Ako riešime obnovu? Čo robíme vzostupne a čo zostupne?
Undo (necomittnuté) ideme zostupne, teda od konca logu a zapisujeme do db staré hodnoty vo writeoch
Potom redo comitnuté a dávame nové hodnoty
zapisujeme najprv do logu alebo do db?
do logu
Čo je Oneskorený zápis dát (deferred data modification)
write(X) sa síce zapíše do log-file aj do databázy, ale nie do dát na disk, to až po commite.
Potom Operáciu UNDO netreba vôbec implementovať.
Ako checkpointing skracuje log file?
zahoď časť pred záznamom najstaršej
aktívnej transakcie T
Kedy je rozvrh obnoviteľný?
keď pre každú commitovanú transakciu T2 čítajúcu necommitovanú hodnotu od T1 (dirty read) platí, že T1 commituje tiež—a zároveň commit T1 je v tom rozvrhu
skôr ako commit T2.
Kedy sa rozvrh vyhýba kaskádovým abortom?
Rozvrh sa vyhýba kaskádovým abortom (avoids
cascading aborts, ACA) práve vtedy, ak neobsahuje dirty read
Aký rozvrh je striktný?
Rozvrh je striktný (strict) práve vtedy, ak neobsahuje
dirty read ani dirty write
Čo je dirty write?
dirty write je prepisovanie necommitovanej hodnoty zapísanej inou transakciou, ktorá v momente zápisu nebola commitovaná
Kedy sú transakcie v deadlocku?
Transakcie (niektoré) sú v deadlocku práve vtedy, ak
wait-for graf obsahuje cyklus.