Transakcije in mehanizmi njihovega nadzora

Posel

Transakcija je zaporedje operacij s podatki, ki ima začetek in konec.

Transakcija je zaporedna izvedba operacij branja in pisanja. Konec transakcije je lahko shranjevanje sprememb (zaveza) ali preklic sprememb (povrnitev). V zvezi z bazo podatkov je transakcija sestavljena iz več zahtev, ki se obravnavajo kot ena zahteva.

Transakcije morajo izpolnjevati lastnosti ACID

Atomičnost. Transakcija je dokončana v celoti ali pa sploh ni.

Doslednost. Pri zaključku transakcije ne smejo biti kršene omejitve, ki veljajo za podatke (na primer omejitve v bazi podatkov). Konsistentnost pomeni, da bo sistem prestavljen iz enega pravilnega stanja v drugo pravilno stanje.

Izolacija. Transakcije, ki potekajo vzporedno, ne smejo vplivati ​​ena na drugo, na primer spreminjati podatkov, ki jih uporablja druga transakcija. Rezultat izvajanja vzporednih transakcij mora biti enak, kot če bi bile transakcije izvedene zaporedno.

Trajnost. Ko so spremembe enkrat potrjene, se ne smejo izgubiti.

Dnevnik transakcij

Dnevnik shranjuje spremembe transakcij, zagotavlja atomičnost in stabilnost podatkov v primeru okvare sistema

Dnevnik vsebuje vrednosti, ki so jih imeli podatki pred in po tem, ko jih je transakcija spremenila. Strategija dnevnika zapisovanja vnaprej zahteva dodajanje vnosa v dnevnik o prejšnjih vrednostih pred začetkom in o končnih vrednostih po zaključku transakcije. V primeru nenadne zaustavitve sistema baza podatkov prebere dnevnik v obratnem vrstnem redu in prekliče spremembe, ki so jih naredile transakcije. Ko naleti na prekinjeno transakcijo, jo baza podatkov izvede in o njej spremeni dnevnik. Ker je baza podatkov v stanju v času napake, bere dnevnik v naprej in vrne spremembe, ki so jih naredile transakcije. Na ta način se ohranita stabilnost že opravljenih transakcij in atomičnost prekinjene transakcije.

Preprosto ponovno izvajanje neuspelih transakcij ne zadostuje za obnovitev.

Primer. Uporabnik ima na svojem računu 500 dolarjev in se odloči, da jih bo dvignil na bankomatu. V teku sta dve transakciji. Prvi odčita vrednost stanja in če je na stanju dovolj sredstev, uporabniku izda denar. Drugi odšteje zahtevani znesek od stanja. Recimo, da se je sistem zrušil in prva operacija ni uspela, druga pa je. V tem primeru uporabniku ne moremo ponovno izdati denarja, ne da bi vrnili sistem v prvotno stanje s pozitivnim stanjem.

Stopnje izolacije

Preberi Zavezano

Težava z umazanim branjem je, da lahko transakcija prebere vmesni rezultat druge transakcije.

Primer. Začetna vrednost stanja je 0 USD. T1 vašemu stanju doda 50 USD. T2 odčita vrednost stanja (50 USD). T1 zavrže spremembe in zapusti. T2 nadaljuje z izvajanjem z nepravilnimi podatki o stanju.

Rešitev je branje fiksnih podatkov (Read Committed), ki prepoveduje branje podatkov, spremenjenih s transakcijo. Če je transakcija A spremenila določen nabor podatkov, mora transakcija B pri dostopu do teh podatkov počakati, da se transakcija A zaključi.

Ponovljivo branje

Težava z izgubljenimi posodobitvami. T1 shrani spremembe poleg sprememb T2.

Primer. Začetna vrednost stanja je 0 $ in dve transakciji hkrati dopolnita stanje. T1 in T2 odčitata stanje 0 USD. T2 nato doda 200 $ k 0 $ in shrani rezultat. T1 doda 100 $ k 0 $ in shrani rezultat. Končni rezultat je 100 $ namesto 300 $.

Neponovljiva težava pri branju. Večkratno branje istih podatkov vrne različne vrednosti.

Primer. T1 prebere bilančno vrednost 0 USD. T2 nato na stanje doda 50 $ in konča. T1 ponovno prebere podatke in ugotovi neskladje s prejšnjim rezultatom.

Ponovljivo branje zagotavlja, da bo drugo branje vrnilo enak rezultat. Podatkov, ki jih bere ena transakcija, ni mogoče spremeniti v drugih, dokler transakcija ni dokončana. Če je transakcija A prebrala določen nabor podatkov, mora transakcija B pri dostopu do teh podatkov počakati, da se transakcija A zaključi.

Urejeno branje (Serializable)

Težava s fantomskim branjem. Dve poizvedbi, ki izbereta podatke na podlagi določenega pogoja, vrneta različne vrednosti.

Primer. T1 zahteva število vseh uporabnikov, katerih stanje je večje od 0 USD, vendar manjše od 100 USD. T2 odšteje 1 $ od uporabnika s stanjem 101 $. T1 ponovno izda zahtevo.

Urejeno branje (Serializable). Transakcije se izvajajo popolnoma zaporedno. Posodabljanje ali dodajanje zapisov, ki sodijo v pogoje zahteve, je prepovedano. Če je transakcija A zahtevala podatke iz celotne tabele, je celotna tabela zamrznjena za druge transakcije, dokler se transakcija A ne zaključi.

Razporejevalnik

Nastavi vrstni red, v katerem naj se izvajajo operacije med vzporednimi transakcijami.

Zagotavlja določeno stopnjo izolacije. Če rezultat operacij ni odvisen od njihovega vrstnega reda, so takšne operacije komutativne (permutabilne). Bralne operacije in operacije na različnih podatkih so komutativne. Operacije branja-pisanja in pisanja-pisanja niso komutativne. Naloga razporejevalnika je prepletanje operacij, ki jih izvajajo vzporedne transakcije, tako da je rezultat izvajanja enakovreden zaporednemu izvajanju transakcij.

Mehanizmi za nadzor vzporednih opravil (Concurrency Control)

Optimistični temelji na odkrivanju in reševanju konfliktov, pesimistični na preprečevanju nastajanja konfliktov.

Pri optimističnem pristopu ima več uporabnikov na voljo kopije podatkov. Tisti, ki prvi zaključi urejanje, shrani spremembe, ostali pa morajo spremembe združiti. Optimistični algoritem dovoli nastanek konflikta, vendar se mora sistem iz konflikta opomoči.

Pri pesimističnem pristopu prvi uporabnik, ki zajame podatke, prepreči drugim, da bi jih prejeli. Če so konflikti redki, je pametno izbrati optimistično strategijo, saj zagotavlja višjo stopnjo sočasnosti.

Zaklepanje

Če ima ena transakcija zaklenjene podatke, morajo druge transakcije pri dostopu do podatkov počakati, da se odklenejo.

Blok je mogoče prekriti z bazo podatkov, tabelo, vrstico ali atributom. Skupno zaklepanje lahko za iste podatke uvede več transakcij, omogoča branje vsem transakcijam (vključno s tisto, ki jo je uvedla), prepoveduje spreminjanje in izključni zajem. Ekskluzivno zaklepanje lahko uvede samo ena transakcija, dovoljuje vsa dejanja uvedbe transakcije, prepoveduje vsa dejanja drugim.

Zastoj je situacija, ko se transakcije končajo v stanju čakanja, ki traja nedoločen čas.

Primer. Prva transakcija čaka, da se sprostijo podatki, ki jih je zajela druga, medtem ko druga čaka, da se sprostijo podatki, ki jih je zajela prva.

Optimistična rešitev težave z zastojem omogoča, da pride do zastoja, vendar nato obnovi sistem s povrnitvijo ene od transakcij, vključenih v zastoj.

Zastoji se iščejo v določenih intervalih. Eden od načinov zaznavanja je časovni, kar pomeni, da je prišlo do zastoja, če transakcija traja predolgo, da se zaključi. Ko se odkrije zastoj, se ena od transakcij povrne nazaj, kar omogoči dokončanje drugih transakcij, vključenih v zastoj. Izbira žrtve lahko temelji na vrednosti transakcij ali njihovi starosti (sheme Wait-Die in Wound-wait).

Vsaka transakcija T je dodeljen časovni žig TS ki vsebuje začetni čas transakcije.

Počakaj-Umri.

če TS(Ti) < TS(Tj), Potem Ti počaka, drugače Ti vrne nazaj in začne znova z istim časovnim žigom.

Če je mlada transakcija pridobila vir in starejša transakcija zahteva isti vir, lahko starejša transakcija počaka. Če je starejša transakcija pridobila vir, bo mlajša transakcija, ki zahteva ta vir, povrnjena nazaj.

Rana - počakaj.

če TS(Ti) < TS(Tj), Potem Tj vrne nazaj in začne znova z istim časovnim žigom, drugače Ti čakajo.

Če je mlajša transakcija pridobila vir in starejša transakcija zahteva isti vir, bo mlajša transakcija povrnjena nazaj. Če je starejša transakcija pridobila vir, lahko mlajša transakcija, ki zahteva ta vir, počaka. Izbira žrtve na podlagi prednosti preprečuje zastoje, vendar povrne transakcije, ki niso zastojne. Težava je v tem, da je mogoče transakcije večkrat vrniti nazaj, ker ... starejša transakcija lahko zadrži vir dlje časa.

Pesimistična rešitev problema zastoja ne dovoljuje, da bi se transakcija začela izvajati, če obstaja nevarnost zastoja.

Za odkrivanje zastoja se zgradi graf (čakajoči graf, graf čakanja), katerega oglišča so transakcije, robovi pa so usmerjeni od transakcij, ki čakajo na sprostitev podatkov, do transakcije, ki je te podatke zajela. Šteje se, da je prišlo do zastoja, če ima graf zanko. Izdelava čakalnega grafa, zlasti v porazdeljenih bazah podatkov, je drag postopek.

Dvofazno zaklepanje - preprečuje zastoje tako, da na začetku transakcije zaseže vse vire, ki jih uporablja transakcija, in jih sprosti na koncu

Vse operacije blokiranja morajo biti pred prvim odklepanjem. Ima dve fazi - fazo rasti, med katero se prijemi kopičijo, in fazo krčenja, med katero se prijemi sprostijo. Če enega od virov ni mogoče zajeti, se transakcija začne znova. Možno je, da transakcija ne bo mogla pridobiti zahtevanih virov, na primer, če več transakcij tekmuje za iste vire.

Dvofazna potrditev zagotavlja, da se potrditev izvede na vseh replikah baze podatkov

Vsaka baza podatkov vnese podatke o tem, katere podatke bo spremenila v dnevnik in odgovori koordinatorju OK (Faza glasovanja). Ko se vsi odzovejo OK, koordinator pošlje signal, ki vse obvezuje, da se zavežejo. Po potrditvi se strežniki odzovejo OK; če se vsaj eden ne odzove OK, potem koordinator pošlje signal za preklic sprememb vsem strežnikom (faza zaključka).

Metoda časovnega žiga

Starejša transakcija se povrne nazaj, ko poskuša dostopati do podatkov, ki jih vključuje mlajša transakcija

Vsaki transakciji je dodeljen časovni žig TS ki ustreza času začetka izvajanja. če Ti starejši Tj, Potem TS(Ti) < TS(Tj).

Ko se transakcija povrne nazaj, ji je dodeljen nov časovni žig. Vsak podatkovni objekt Q udeležen v transakciji je označen z dvema oznakama. W-TS(Q) — časovni žig najmlajše transakcije, ki je uspešno zaključila zapis Q. R-TS(Q) — časovni žig najmlajše transakcije, ki je izvedla zapis branja Q.

Ko transakcija T zahteve za branje podatkov Q Obstajata dve možnosti.

če TS(T) < W-TS(Q), to pomeni, da je podatke posodobila mlajša transakcija, nato transakcija T prevrne nazaj.

če TS(T) >= W-TS(Q), nato se izvede branje in R-TS(Q) postaja MAX(R-TS(Q), TS(T)).

Ko transakcija T zahteva spremembo podatkov Q Obstajata dve možnosti.

če TS(T) < R-TS(Q), to pomeni, da je podatke že prebrala mlajša transakcija in če pride do spremembe, bo prišlo do konflikta. Transakcija T prevrne nazaj.

če TS(T) < W-TS(Q), kar pomeni, da transakcija poskuša prepisati novejšo vrednost, transakcija T se povrne nazaj. V drugih primerih se sprememba izvede in W-TS(Q) postane enaka TS(T).

Ni potrebna izdelava dragega čakalnega grafa. Starejše transakcije so odvisne od novejših, zato v grafu čakanja ni ciklov. Zastojev ni, ker se transakcije ne čakajo, temveč se takoj vrnejo nazaj. Možni so kaskadni povratki. če Ti odkotalila in Tj Prebral sem podatke, ki sem jih spremenil Ti, Potem Tj se mora tudi vrniti nazaj. Če hkrati Tj že storjeno, potem bo prišlo do kršitve načela stabilnosti.

Ena od rešitev za kaskadne povrnitve. Transakcija zaključi vse operacije pisanja na koncu, druge transakcije pa morajo počakati, da se ta operacija zaključi. Transakcije čakajo na izvedbo, preden se preberejo.

Thomasovo pravilo pisanja - različica metode časovnega žiga, pri kateri je prepovedano, da bi podatke, posodobljene z mlajšo transakcijo, prepisala starejša.

Transakcija T zahteva spremembo podatkov Q. Če TS(T) < W-TS(Q), kar pomeni, da transakcija poskuša prepisati novejšo vrednost, transakcija T ni povrnjena nazaj kot pri metodi časovnega žiga.

Vir: www.habr.com

Dodaj komentar