SQL serverio operacijų izoliavimo lygis ir jų ryšys su nešvariais skaitymais, nepakartojamais skaitymais, fantominiais skaitymais ir kt. (kodo argumentai ir laiko sekos)
Suprasdami šias problemas, kurios gali kilti tuo pačiu metu prieigai prie duomenų bazės, galime ir toliau suprasti duomenų bazės izoliacijos lygio sąvoką: kaip ir kokiu mastu norite izoliuoti lygiagrečius sandorius? Pavyzdžiui, jei nešvarūs skaitymai gali būti toleruojami arba jei nenorite, kad vienu metu atliekamos operacijos būtų nešvarios, juos galima nustatyti į izoliacijos lygį, kad izoliacija tarp lygiagrečių operacijų būtų laisva arba griežta.
Kuo aukštesnis izoliacijos lygis, tuo mažesnė tikimybė nuskaityti nešvarius duomenis arba neišsamius duomenis, tačiau tuo didesnis našumo pablogėjimas yra didelio lygiagrečiumo sistemose. Kuo žemesnis izoliacijos lygis, tuo didesnis lygiagrečios sistemos našumo pagerėjimas, tačiau patys duomenys gali būti neišsamūs.
SQL Server 2012 galite nustatyti operacijos izoliacijos lygį (nuo žemo iki aukšto) naudodami šią sintaksę:
NUSTATYTI OPERACIJOS IZOLIAVIMO LYGĮ { SKAITYTI NEĮSIPAREIGOJĘS | SKAITYTI ĮSIPAREIGOJO | PAKARTOJAMAS SKAITYMAS | MOMENTINĖ NUOTRAUKA | NUOSEKLIAI } [ ; ] Pirmiausia sukurkite naują testavimo scenarijų, sukurkite duomenų bazę ir įterpkite bandomuosius duomenis taip:
Sukurti naują langą A, atidarykite operaciją, atlikite atnaujinimo operaciją ir palaukite 10 sekundžių prieš įsipareigodami, kodas yra toks:
Kurti naują langą B, nustatykite operaciją READ UNCOMMITTED (neįpareigotas skaitymas, žemiausias lygis, lengva problema yra nešvarus skaitymas, nes jis gali nuskaityti duomenis, modifikuotus kitų operacijų, bet neįsipareigojo.) Jis daro tą patį, kaip ir operacijos SELECT sakinio objekto lentelės nustatymas (NOLOCK). Užklauskite duomenų, kodas yra toks:
Sukurti naują langą C, tiesiogiai pateikite duomenų užklausą, kaip nurodyta toliau.
Savo ruožtuVykdykite langus A, B ir C ir pastebėkite, kad atnaujinant duomenis langas B gali iš karto grąžinti duomenis (Gali būti, kad rodmenys yra nešvarūs duomenys), C langas turi palaukti, kol A langas baigs vykdytipateiks duomenis, kaip parodyta paveikslėlyje žemiau:
(B langas)
(C langas)
(Pabaiga)
|