Stopnja izolacije transakcij v SQL Serverju in njihov odnos do umazanih branj, neponovljivih branj, fantomskih branj itd. (argumenti kode in časovne zaporedja)
Z razumevanjem teh težav, ki se lahko pojavijo pri sočasnem dostopu do baze podatkov, lahko še naprej razumemo koncept izolacije baze podatkov, preprosto povedano: kako želite izolirati sočasne transakcije in v kolikšni meri? Na primer, če so umazana branja dovoljena ali če ne želite, da imajo sočasne transakcije umazane branja, jih lahko nastavite na raven izolacije, da je izolacija med sočasnimi transakcijami ohlapna ali huda.
Višja kot je stopnja izolacije, manjša je možnost branja umazanih ali nepopolnih podatkov, vendar je hujša degradacija zmogljivosti v sistemih z visoko sočasnostjo. Nižja kot je raven izolacije, večja je izboljšava zmogljivosti v sočasnem sistemu, vendar so podatki sami lahko nepopolni.
V SQL Server 2012 lahko nastavite stopnjo izolacije transakcije (od nizke do visoke) z uporabo te sintakse:
NASTAVITE STOPNJO IZOLACIJE TRANSAKCIJ { PREBERITE NEZAVEZANO | READ SE ZAVEZAL | PONOVLJIVO BRANJE | POSNETEK | SERIJSKO RAZLIČLJIVO } [ ; ] Najprej ustvarite nov testni skript, ustvarite bazo podatkov in vstavite testne podatke, kot sledi:
Ustvari novo okno A, odpri transakcijo, izvede posodobitev in počaka 10 sekund pred potrditvijo, koda je naslednja:
Ustvari novo okno B, nastavi transakcijo READ UNCOMMITTED (neobvezano branje, najnižja raven, lažja težava je umazano branje, ker lahko prebere podatke, spremenjene z drugimi transakcijami, a niso zabeležene.) Naredi enako kot nastavitev (NOLOCK) na tabeli objektov ukaza SELECT v transakciji. Poizvedite podatke, koda je naslednja:
Ustvarite novo okno C, neposredno poizveduje podatke, kot sledi:
V zameno,Zagnajte okna A, B in C ter ugotovite, da lahko ob posodobitvi podatkov okno B takoj vrne podatke (Možno je, da so podatki umazani), C okno mora počakati, da se A okno zaključibo vrnil podatke, kot je prikazano na spodnji sliki:
(Okno B)
(Okno C)
(Konec)
|