Tehingute isoleerimise tase SQL Serveris ja nende seos räpaste lugemiste, mittekorduvate lugemiste, fantoomlugemiste jms (koodiargumendid ja ajajärjestused)
Mõistes neid probleeme, mis võivad tekkida samaaegse juurdepääsu korral andmebaasile, saame jätkata andmebaasi isolatsioonitaseme mõiste mõistmist, lihtsustatult: kuidas soovite samaaegseid tehinguid isoleerida ja kui suurel määral? Näiteks, kui räpaseid lugemisi saab taluda või kui sa ei soovi, et samaaegsetel tehingutel oleks mustad lugemised, siis saab need seada isolatsioonitasemele, et muuta samaaegsete tehingute isolatsioon lõdvemaks või tõsiseks.
Mida suurem on isolatsioonitase, seda väiksem on tõenäosus, et loetakse musta või puudulikku andmet, kuid seda tõsisem on jõudluse langus kõrge samaaegsusega süsteemides. Mida madalam on isolatsioonitase, seda suurem on paralleelsüsteemi jõudluse paranemine, kuid andmed ise võivad olla puudulikud.
SQL Server 2012-s saad määrata tehingu isoleerimistaseme (madalalt kõrgele) selle süntaksi abil:
SEA TEHINGUTE ISOLATSIOONITASE { LOE TÜHISTATUD | LOE PÜHENDUNUD | KORDUV LUGEMINE | HETKEPILT | SERIAALISEERITAV } [ ; ] Esmalt loo uus testskript, loo andmebaas ja sisesta testandmed järgmiselt:
Loo uus aken A, avades tehingu, teostades uuendustoimingu ja ootama 10 sekundit enne kinnitamist, on kood järgmine:
Loo uus aken B, seadista tehing READ UNCOMMITTED (uncommitted read, madalaim tase, lihtne probleem on räpane lugemine, sest see suudab lugeda teiste tehingute poolt muudetud, kuid mitte pühendunud andmeid.) See teeb sama, mis seadistada (NOLOCK) SELECT lause objektitabelis tehingus. Andmete päringu korral on kood järgmine:
Loo uus aken C, pärida andmeid otse järgmiselt:
Omakorda,Käivita aknad A, B ja C ning avasta, et andmete uuendamisel saab aken B kohe andmeid tagastada (Võimalik, et lugemine on räpane andmestik), C aken peab ootama, kuni A aken lõpetab täitmisetagastab andmed, nagu alloleval joonisel näidatud:
(Aken B)
(Aken C)
(Lõpp)
|