Transakcije i mehanizmi njihove kontrole

Transakcije

Transakcija je niz operacija nad podacima koji imaju početak i kraj.

Transakcija je sekvencijalno izvršavanje operacija čitanja i pisanja. Kraj transakcije može biti ili spremanje promjena (commit) ili poništavanje promjena (rollback). U odnosu na bazu podataka, transakcija se sastoji od nekoliko zahtjeva koji se tretiraju kao jedan zahtjev.

Transakcije moraju zadovoljiti ACID svojstva

Valentnost. Transakcija je ili u potpunosti dovršena ili nije uopće izvršena.

Dosljednost. Prilikom dovršetka transakcije ne smiju se prekršiti ograničenja nametnuta podacima (na primjer, ograničenja u bazi podataka). Dosljednost podrazumijeva da će sustav biti prebačen iz jednog ispravnog stanja u drugo ispravno stanje.

Izolacija. Transakcije koje se izvode paralelno ne bi trebale utjecati jedna na drugu, na primjer, mijenjati podatke koje koristi druga transakcija. Rezultat izvršavanja paralelnih transakcija trebao bi biti isti kao da su transakcije izvršene uzastopno.

Održivost. Jednom izvršene promjene ne smiju se izgubiti.

Dnevnik transakcija

Dnevnik pohranjuje promjene napravljene transakcijama, osigurava atomičnost i stabilnost podataka u slučaju kvara sustava

Dnevnik sadrži vrijednosti koje su podaci imali prije i nakon što su promijenjeni transakcijom. Strategija zapisnika unaprijed zahtijeva dodavanje unosa dnevnika o prethodnim vrijednostima prije početka i o konačnim vrijednostima nakon dovršetka transakcije. U slučaju iznenadnog zaustavljanja sustava, baza podataka čita log obrnutim redoslijedom i poništava promjene napravljene transakcijama. Nakon što naiđe na prekinutu transakciju, baza podataka je izvršava i o njoj unosi izmjene u zapisnik. Budući da je u stanju u trenutku kvara, baza podataka čita zapisnik prema naprijed i vraća promjene napravljene transakcijama. Na taj način se čuva stabilnost transakcija koje su već izvršene i atomičnost prekinute transakcije.

Jednostavno ponovno izvršavanje neuspjelih transakcija nije dovoljno za oporavak.

Primjer. Korisnik ima 500 dolara na svom računu i odlučuje ih podići na bankomatu. U tijeku su dvije transakcije. Prvi očitava vrijednost stanja i ako ima dovoljno sredstava na stanju, izdaje novac korisniku. Drugi oduzima traženi iznos od stanja. Recimo da se sustav srušio i prva operacija nije uspjela, ali druga jest. U tom slučaju ne možemo ponovno izdati novac korisniku bez vraćanja sustava u prvobitno stanje s pozitivnim saldom.

Razine izolacije

Čitaj Predano

Problem prljavog čitanja je u tome što transakcija može pročitati međurezultat druge transakcije.

Primjer. Početna vrijednost stanja je 0 USD. T1 dodaje 50 USD na vaš saldo. T2 očitava vrijednost stanja ($50). T1 odbacuje promjene i izlazi. T2 nastavlja izvršenje s netočnim podacima o stanju.

Rješenje je čitanje fiksnih podataka (Read Committed), što zabranjuje čitanje podataka promijenjenih transakcijom. Ako je transakcija A promijenila određeni skup podataka, tada je transakcija B, kada pristupa tim podacima, prisiljena čekati da se transakcija A završi.

Ponovljivo čitanje

Problem s izgubljenim ažuriranjima. T1 sprema promjene povrh promjena T2.

Primjer. Početna vrijednost stanja je 0 USD, a dvije transakcije istovremeno nadopunjuju stanje. T1 i T2 očitavaju stanje od 0 USD. T2 tada dodaje 200 USD na 0 USD i sprema rezultat. T1 dodaje $100 na $0 i sprema rezultat. Konačni rezultat je 100 dolara umjesto 300 dolara.

Neponovljiv problem čitanja. Čitanje istih podataka više puta vraća različite vrijednosti.

Primjer. T1 očitava vrijednost bilance od 0 USD. T2 zatim dodaje 50 USD na stanje i završava. T1 ponovno čita podatke i pronalazi nepodudarnost s prethodnim rezultatom.

Repeatable Read osigurava da će drugo čitanje vratiti isti rezultat. Podaci koje čita jedna transakcija ne mogu se mijenjati u drugim dok se transakcija ne završi. Ako je transakcija A pročitala određeni skup podataka, tada je transakcija B, kada pristupa tim podacima, prisiljena čekati da se transakcija A završi.

Naručeno čitanje (serializable)

Problem s fantomskim čitanjem. Dva upita koji odabiru podatke na temelju određenog uvjeta vraćaju različite vrijednosti.

Primjer. T1 traži broj svih korisnika čiji je saldo veći od 0 USD, ali manji od 100 USD. T2 oduzima 1 USD od korisnika sa saldom od 101 USD. T1 ponovno izdaje zahtjev.

Uređeno čitanje (Serializable). Transakcije se izvršavaju potpuno sekvencijalno. Zabranjeno je ažurirati ili dodavati zapise koji su obuhvaćeni uvjetima zahtjeva. Ako je transakcija A zatražila podatke iz cijele tablice, tada je cijela tablica zamrznuta za druge transakcije dok se transakcija A ne završi.

Planer

Postavlja redoslijed kojim se operacije trebaju izvoditi tijekom paralelnih transakcija.

Pruža određenu razinu izolacije. Ako rezultat operacija ne ovisi o njihovom redoslijedu, onda su takve operacije komutativne (Permutable). Operacije čitanja i operacije nad različitim podacima su komutativne. Operacije čitanja-pisanja i pisanja-pisanja nisu komutativne. Zadatak planera je ispreplesti operacije koje izvode paralelne transakcije tako da rezultat izvršenja bude ekvivalentan sekvencijalnom izvršavanju transakcija.

Mehanizmi za kontrolu paralelnih poslova (Concurrency Control)

Optimistički se temelji na otkrivanju i rješavanju sukoba, pesimistički se temelji na sprječavanju nastanka sukoba.

U optimističnom pristupu, više korisnika ima na raspolaganju kopije podataka. Prva osoba koja završi uređivanje sprema promjene, dok ostali moraju spojiti promjene. Optimistični algoritam dopušta pojavu sukoba, ali se sustav mora oporaviti od sukoba.

S pesimističnim pristupom, prvi korisnik koji uhvati podatke sprječava druge da prime podatke. Ako su sukobi rijetki, mudro je odabrati optimističnu strategiju, jer ona pruža višu razinu konkurentnosti.

Zaključavanje

Ako jedna transakcija ima zaključane podatke, tada druge transakcije moraju čekati dok se ne otključa kada pristupaju podacima.

Blok se može preklopiti na bazu podataka, tablicu, redak ili atribut. Zajedničko zaključavanje može se nametnuti na iste podatke pomoću nekoliko transakcija, dopušta čitanje svim transakcijama (uključujući onu koja ga je nametnula), zabranjuje modificiranje i isključivo snimanje. Ekskluzivno zaključavanje može se nametnuti samo jednom transakcijom, dopušta bilo koje radnje nametnute transakcije, zabranjuje bilo koje radnje drugih.

Zastoj je situacija u kojoj transakcije završavaju u stanju čekanja koje traje neograničeno dugo.

Primjer. Prva transakcija čeka da se objave podaci koje je uhvatila druga, dok druga čeka da se objave podaci koje je uhvatila prva.

Optimistično rješenje problema zastoja dopušta da se zastoj dogodi, ali zatim oporavlja sustav vraćanjem jedne od transakcija uključenih u zastoj.

Zastoji se traže u određenim intervalima. Jedna od metoda detekcije je po vremenu, odnosno smatrajte da je došlo do zastoja ako transakcija traje predugo da se završi. Kada se pronađe zastoj, jedna od transakcija se vraća natrag, dopuštajući ostalim transakcijama uključenim u zastoj da se dovrše. Odabir žrtve može se temeljiti na vrijednosti transakcija ili njihovoj seniornosti (sheme Wait-Die i Wound-wait).

Svaka transakcija T dodijeljena je vremenska oznaka TS koji sadrži vrijeme početka transakcije.

Čekaj-Umri.

Ako TS(Ti) < TS(Tj)tada Ti čeka, inače Ti vraća se unatrag i ponovno počinje s istom vremenskom oznakom.

Ako je mlada transakcija stekla resurs, a starija transakcija zahtijeva isti resurs, tada je starijoj transakciji dopušteno čekati. Ako je starija transakcija stekla resurs, tada će se mlađa transakcija koja zahtijeva taj resurs vratiti nazad.

Rana-čekaj.

Ako TS(Ti) < TS(Tj)tada Tj vraća se unatrag i ponovno počinje s istom vremenskom oznakom, inače Ti čekajući.

Ako je mlađa transakcija stekla resurs, a starija transakcija zahtijeva isti resurs, tada će se mlađa transakcija vratiti nazad. Ako je starija transakcija stekla resurs, tada je mlađoj transakciji koja zahtijeva taj resurs dopušteno čekati. Odabir žrtve na temelju prioriteta sprječava zastoje, ali vraća transakcije koje nisu zastoja. Problem je u tome što se transakcije mogu vratiti mnogo puta jer... starija transakcija može zadržati resurs dulje vrijeme.

Pesimističko rješenje problema zastoja ne dopušta da se transakcija započne izvršavati ako postoji rizik od zastoja.

Da bi se otkrio zastoj, konstruira se graf (graf čekanja, graf čekanja), čiji su vrhovi transakcije, a rubovi su usmjereni od transakcija koje čekaju puštanje podataka do transakcije koja je uhvatila te podatke. Smatra se da je došlo do zastoja ako graf ima petlju. Konstruiranje grafa čekanja, posebno u distribuiranim bazama podataka, skup je postupak.

Dvofazno zaključavanje - sprječava zastoje tako što zauzima sve resurse koje koristi transakcija na početku transakcije i oslobađa ih na kraju

Sve operacije blokiranja moraju prethoditi prvoj operaciji otključavanja. Ima dvije faze - fazu rasta, tijekom koje se hvatišta nakupljaju, i fazu smanjivanja, tijekom koje se hvatišta otpuštaju. Ako je nemoguće uhvatiti jedan od resursa, transakcija počinje ispočetka. Moguće je da transakcija neće moći steći potrebne resurse, na primjer, ako se nekoliko transakcija natječe za iste resurse.

Dvofazno predavanje osigurava da se izvršenje izvršava na svim replikama baze podataka

Svaka baza podataka upisuje podatke o podacima koji će se mijenjati u dnevnik i odgovara koordinatoru OK (Faza glasovanja). Nakon što su svi odgovorili OK, koordinator šalje signal koji obvezuje sve na obvezu. Nakon predaje, poslužitelji odgovaraju OK; ako barem jedan ne odgovori OK, tada koordinator šalje signal za otkazivanje promjena svim poslužiteljima (Faza završetka).

Metoda vremenskog žiga

Starija transakcija vraća se unatrag pri pokušaju pristupa podacima uključenim u mlađu transakciju

Svakoj se transakciji dodjeljuje vremenska oznaka TS koji odgovara vremenu početka izvršenja. Ako Ti starije Tjtada TS(Ti) < TS(Tj).

Kada se transakcija vrati, dodjeljuje joj se nova vremenska oznaka. Svaki podatkovni objekt Q uključen u transakciju označen je s dvije oznake. W-TS(Q) — vremenska oznaka najmlađe transakcije koja je uspješno završila zapis Q. R-TS(Q) — vremenska oznaka najmlađe transakcije koja je izvršila zapis čitanja Q.

Kada transakcija T zahtjeva za čitanje podataka Q Postoje dvije mogućnosti.

Ako TS(T) < W-TS(Q), odnosno podaci su ažurirani mlađom transakcijom, tada transakcijom T kotrlja se natrag.

Ako TS(T) >= W-TS(Q), zatim se izvodi očitavanje i R-TS(Q) postaje MAX(R-TS(Q), TS(T)).

Kada transakcija T zahtijeva izmjene podataka Q Postoje dvije mogućnosti.

Ako TS(T) < R-TS(Q), odnosno podatke je već pročitala mlađa transakcija i ako se napravi promjena, doći će do sukoba. Transakcija T kotrlja se natrag.

Ako TS(T) < W-TS(Q), to jest, transakcija pokušava prebrisati noviju vrijednost, transakcija T se vraća natrag. U drugim slučajevima, promjena se provodi i W-TS(Q) postaje jednaka TS(T).

Nije potrebna skupa konstrukcija grafa čekanja. Starije transakcije ovise o novijima, tako da u grafikonu čekanja nema ciklusa. Nema zastoja jer se transakcije ne čekaju, već se odmah vraćaju. Moguća su kaskadna vraćanja. Ako Ti otkotrljao se i Tj Pročitao sam podatke koje sam promijenio Titada Tj također treba vratiti natrag. Ako u isto vrijeme Tj već počinjeno, tada će doći do povrede načela stabilnosti.

Jedno od rješenja kaskadnog vraćanja. Transakcija završava sve operacije pisanja na kraju, a ostale transakcije moraju čekati da se ta operacija završi. Transakcije čekaju da budu izvršene prije čitanja.

Thomasovo pravilo pisanja - varijacija metode vremenskog žiga u kojoj je zabranjeno da starija transakcija prebriše podatke ažurirane mlađom transakcijom

Transakcija T zahtijeva izmjene podataka Q, ako TS(T) < W-TS(Q), odnosno transakcija pokušava prebrisati noviju vrijednost, transakcija T se ne vraća kao u metodi vremenske oznake.

Izvor: www.habr.com

Dodajte komentar