Doslednost baze podatkov je prav tako eden pomembnih kazalnikov za merjenje uspešnosti DBMS. Trenutno večina komercialnih baz podatkov (DB2, SQL Server) uporablja protokol Two-Phase Locking (2PL) za nadzor sočasnosti, ki zagotavlja serializacijo izvajanja sočasnih transakcij. Vendar pa mora 2PL zakleniti vse podatke, preden jih lahko bere ali piše. V matriki združljivosti blokiranja so S ključavnice (Share Locks) in X ključavnice (Exclusive Locks) nezdružljive, zato ko transakcija 1 izvaja operacijo branja podatkov A (plus S ključavnica), transakcija 2 pa želi zapisovati podatke (dodati X ključavnico), mora transakcija 2 počakati, da transakcija 1 sprosti S zaklep na podatke A, preden nadaljuje. Multi-Version Conconsistency Control (MVCC) ta problem dobro rešuje. V sistemu z več različicami vsak zapisovalni podatek ustvari novo različico, pri čemer lahko operacija branja prebere ustrezno različico po potrebi, zato se operacije branja in pisanja med seboj ne blokirajo. MVCC poveča sočasnost, hkrati pa uvaja tudi obremenitev shranjevanja z vzdrževanjem več različic.
Podatkovni pogon Microsoft SQL Server uvaja novo implementacijo obstoječe ravni izolacije transakcij – zabeležena branja, ki zagotavljajo posnetke na ravni ukazov z uporabo verzioniranja vrstic. Podatkovni pogon SQL Server uvaja tudi novo stopnjo izolacije transakcij – posnetke, ki omogočajo posnetke na ravni transakcij, ki prav tako uporabljajo verzioniranje vrstic.
Nastavitev možnosti READ_COMMITTED_SNAPSHOT baze podatkov na ON omogoča namensko izolacijo branja z uporabo verzioniranja vrstic. Nastavitev možnosti ALLOW_SNAPSHOT_ISOLATION baze podatkov na ON omogoča izolacijo posnetkov. Ko je omogočena katera koli možnost za bazo podatkov, podatkovni pogon ohrani različico vsake spremenjene vrstice. Kadar koli transakcija spremeni vrstico, se slika vrstice pred spremembo kopira na stran v različici shrambe. Shranjevanje različic je zbirka podatkovnih strani v tempdb. Če je več vrstic za spremembo transakcij, bo več različic te vrstice povezanih v verigi različic. Operacija branja, ki uporablja verzioniranje vrstic, bo pridobila zadnjo različico vsake vrstice, ki je bila potrjena ob začetku transakcije ali izkaža.
Aplikacije, napisane za SQL Server 2008 ali nove za SQL Server, izvajajo izolacijo read-commitov z uporabo verzioniranja vrstic z določitvijo ravni izolacije transakcij za read-commite, ko je možnost READ_COMMITTED_SNAPSHOT baze podatkov vklopljena. Vsa branja bodo gledala različico vrstice, ki je bila potrjena ob začetku izjave. To bo zagotovilo posnetek podatkov na ravni izreka.
Aplikacije, napisane za SQL Server, bodo implementirale izolacijo posnetkov tako, da določijo raven izolacije transakcij posnetkov, ko je možnost ALLOW_SNAPSHOT_ISOLATION podatkovne baze vklopljena. Vsa branja v snapshot transakciji bodo gledala različico vrstice, ki je bila potrjena ob začetku transakcije. To bo zagotovilo posnetek podatkov na ravni transakcije.
Za transakcije, ki uporabljajo izolacijske ravni na osnovi vrstic, branje ne zahteva skupnih zaklepov podatkov. To pomeni, da bralci, ki uporabljajo verzioniranje vrstic, ne preprečujejo drugim bralcem ali piscem dostopa do istih podatkov. Podobno pisec ne ovira bralca. Vendar pa si pisci med seboj motijo (tudi če delujejo na ravni izolacije, ki temelji na verziji vrstic). Dve operaciji zapisovanja ne moreta hkrati spreminjati istih podatkov.
Funkcija Snapshot Isolation razširja okvir zaklepanja v SQL Server 2008 tako, da aplikacijam omogoča ogled vrednosti pred kakršnimi koli spremembami podatkov. To preprečuje, da bi bila aplikacija zaklenjena, hkrati pa zagotavlja resnično oddane podatke. Read Committed Snapshot v SQL Server 2008 zahteva aktivacijo skrbnika baze podatkov, kar omogoča branje podatkov prek transakcij samo za branje. Torej je SI-jev nadzor sočasnosti pri transakcijah samo za branje zelo dober, vendar ni jasno, ali to velja za posodobitvene transakcije. Manj ugodno je, če dolgotrajne posodobitvene transakcije tekmujejo s kratkoročnimi transakcijami na visoki ravni. Če transakcija med bazami poskuša uporabiti standard Snapshot Isolation (SI) namesto vseh nastavljenih baz podatkov, transakcija spodleti. To nedvomno ustvarja določene ovire za razširljivost. Zdi se, da ima Microsoft še dolgo pot do doseganja lastnega SI, ki je močnejši od specifikacije SQL 92.
Pred kakršnokoli spremembo naredite kopijo prejšnje različice, vse nadaljnje operacije branja pa bodo prebrale kopirano različico, sprememba pa ustvari novo različico. Na ta način,Operacije branja in pisanja se med seboj ne blokirajo. Prednost uporabe tega mehanizma verzioniranja vrstic je, da je sočasnost programa razmeroma visoka, slabost pa je, da čeprav uporabnik ne bere umazanih podatkov, je lahko podatkovna vrednost, ki se spreminja in bo kmalu potekla. Če podatke spremenite na podlagi te potekle vrednosti, bo to povzročilo logično napako。
SQL ukazi:
Referenčne povezave:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
|