Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Pozdravljeni vsi skupaj. Vladislav Rodin je v stiku. Trenutno sem vodja tečaja za High Workload Architect pri OTUS-u in poučujem tudi tečaje o arhitekturi programske opreme.

Poleg poučevanja, kot ste morda opazili, pišem izvirno gradivo za blog OTUS na Habréju in želim sovpadati z današnjim člankom, da sovpada z začetkom tečaja "PostgreSQL", ki je trenutno odprta za vpis.

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Predstavitev

В prejšnjič govorili smo o tem, da transakcije v bazah podatkov služijo reševanju dveh problemov: zagotavljanju tolerance na napake in dostopu do podatkov v konkurenčnem okolju. Za popolno izvedbo teh nalog mora imeti transakcija lastnosti ACID. Danes bomo podrobneje govorili o pismu jaz (izolacija) v tej kratici.

Izolacija

Izolacija rešuje problem dostopa do podatkov v konkurenčnem okolju in v bistvu zagotavlja zaščito pred tekmovalnimi pogoji. V idealnem primeru izolacija pomeni serializacijo, ki je lastnost, ki zagotavlja, da je rezultat vzporednega izvajanja transakcij enak, kot če bi bile izvedene zaporedno. Glavna težava te lastnosti je, da jo je tehnično zelo težko zagotoviti in posledično pomembno vpliva na delovanje sistema. Zato je izolacija pogosto oslabljena in sprejema tveganje določenih anomalij, o katerih bomo govorili v nadaljevanju. Možnost pojava določenih anomalij natančno označuje stopnjo izolacije transakcije.

Najbolj znane anomalije so: umazano branje, neponovljivo branje, fantomsko branje, v resnici pa jih je še 5: umazano pisanje, izgubljena posodobitev kazalca, izgubljena posodobitev, poševno branje, poševno pisanje.

Umazano pisanje

Bistvo anomalije je v tem, da lahko transakcije prepišejo nepotrjene podatke.

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Ta anomalija ni nevarna samo zato, ker lahko pride do spora med podatki po izvršitvi obeh transakcij (kot na sliki), ampak tudi zato, ker je kršena atomičnost: ker dovolimo prepis nepooblaščenih podatkov, ni jasno, kako vrniti eno transakcijo, ne da bi vplivali na drugo .

Anomalijo je mogoče obravnavati povsem preprosto: zapisu pripnemo ključavnico, preden začnemo s snemanjem, s čimer drugim transakcijam prepovedujemo spreminjanje zapisa, dokler ključavnice ne odstranimo.

Umazano branje

Umazano branje pomeni branje nepotrjenih podatkov.

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Težave nastanejo, ko je treba ukrepati ali se odločiti na podlagi vzorca.

Če želite popraviti anomalijo, lahko pritrdite bralno ključavnico, vendar bo to močno vplivalo na zmogljivost. Precej preprosteje je reči, da je za povrnitev transakcije potrebno začetno stanje podatkov (pred začetkom beleženja) shraniti v sistem. Zakaj ne bi brali od tam? Je dovolj poceni, da večina baz podatkov privzeto odstrani umazano branje.

Izgubljena posodobitev

Izgubljena posodobitev pomeni izgubljene posodobitve in prevod precej natančno odraža bistvo problema:

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Dejansko je bil rezultat transakcije T2 obrnjen. To situacijo je mogoče popraviti z eksplicitnimi ali implicitnimi zaporami pisanja. To pomeni, da preprosto posodobimo zapis in nato pride do implicitnega zaklepanja ali pa izvedemo izberite za posodobitev, kar povzroči zaklepanje branja in pisanja. Upoštevajte, da je takšna operacija precej nevarna: s svojim "nedolžnim" branjem blokiramo druge odčitke. Nekatere zbirke podatkov nudijo večjo varnost izberite za skupno rabo, ki omogoča branje podatkov, vendar ne spreminjanje.

Kazalec je izgubil posodobitev

Za natančnejši nadzor lahko baze ponujajo druga orodja, kot je kazalec. Kazalec je struktura, ki vsebuje niz vrstic in omogoča ponavljanje po njih. deklariraj cursor_name za select_statement. Vsebina kazalca je opisana z izbiro.

Zakaj potrebujete kazalec? Dejstvo je, da nekatere baze podatkov ponujajo zaklepanje vseh zapisov, izbranih z izbiro (stabilnost branja), ali samo zapisa, na katerem se trenutno nahaja kazalec (stabilnost kazalca). Pri stabilnosti kazalca je implementirano kratko zaklepanje, ki nam omogoča zmanjšanje števila zaklepanj, če ponavljamo velik vzorec podatkov. Zato je anomalija izgubljene posodobitve izolirana ločeno za kazalec.

Neponovljivo branje

Neponovljivo branje pomeni, da bosta med izvajanjem naše transakcije 2 zaporedni branji istega zapisa privedli do različnih rezultatov, ker je med tema dvema branjem posegla druga transakcija, spremenila naše podatke in bila odobrena.

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Zakaj je to sploh problem? Predstavljajte si, da je cilj transakcije T2 na sliki izbrati vse blago, katerega cena je nižja od 150 USD. Nekdo drug je posodobil ceno na 200 $. Tako nameščeni filter ni deloval.

Te anomalije se prenehajo pojavljati, ko so dodane dvofazne zapore ali ko je uporabljen mehanizem MVCC, o čemer bi rad ločeno razpravljal.

Fantomsko branje

Fantom je branje podatkov, ki jih je dodala druga transakcija.

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Kot primer lahko opazimo napačno izbiro najcenejšega izdelka, ko se pojavi ta anomalija.

Znebiti se fantomskih branj je že precej težko. Redna blokada ni dovolj, saj ne moremo blokirati nečesa, kar še ne obstaja. Sistemi 2PL uporabljajo prediktivno zaklepanje, medtem ko imajo sistemi MVCC razporejevalnik transakcij, ki povrne transakcije, ki bi jih lahko motil vstavek. Tako prvi kot drugi mehanizem sta precej težka.

Preberite poševno

Branje se pojavi, ko delamo z več tabelami, katerih vsebina se mora dosledno spreminjati.

Recimo, da imamo tabele, ki predstavljajo objave in njihove meta informacije:

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Ena transakcija bere iz tabel, druga jih spreminja:

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Kot rezultat transakcije T1 ima objava title = Good in updated_by = T2, kar je neke vrste nedoslednost.

Pravzaprav gre za neponovljivo branje, vendar kot del več tabel.

Da bi to popravil, lahko T1 zaklene vse vrstice, ki jih bo prebral, kar bo preprečilo transakciji T2 spreminjanje informacij. V primeru MVCC bo transakcija T2 preklicana. Zaščita pred to anomalijo lahko postane pomembna, če uporabljamo kazalce.

Pišite poševno

Tudi to anomalijo je lažje razložiti s primerom: predpostavimo, da bi moral v našem sistemu dežurati vsaj en zdravnik, pa sta se oba odločila za odpoved dežurstva:

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Anomalija je pomenila, da nobeden od zdravnikov ne bo dežural. Zakaj se je to zgodilo? Ker je transakcija preverjala pogoj, ki bi ga lahko kršila druga transakcija, in zaradi izolacije te spremembe nismo videli.

To je isto neponovljivo branje. Izbrani lahko tudi zaklenejo te zapise.

Napake pri pisanju in pri branju so kombinacije prejšnjih anomalij. Lahko razmislite o poševnem pisanju, ki je v bistvu fantomsko branje. Razmislite o tabeli, ki vsebuje imena zaposlenih, njihove plače in projekt, na katerem delajo:

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Kaj lahko povzroči oslabitev ravni izolacije transakcij v bazah podatkov?

Posledično dobimo naslednjo sliko: vsak vodja je menil, da njegova zamenjava ne bo privedla do prekoračitve proračuna, zato sta izvedla kadrovske spremembe, ki so skupaj povzročile prekoračitev stroškov.

Vzrok težave je popolnoma enak kot pri fantomskem branju.

Ugotovitve

Sprostitev ravni izolacije transakcij v bazi podatkov je kompromis med varnostjo in zmogljivostjo; k izbiri te ravni je treba pristopiti na podlagi možnih tveganj za podjetje, če pride do določenih nepravilnosti.

Izvedite več o tečaju.

Vir: www.habr.com

Dodaj komentar