Darījumu izolācijas līmenis SQL serverī un to saistība ar netīriem lasījumiem, neatkārtojamiem lasījumiem, fantoma lasījumiem utt.
Izprotot šīs problēmas, kas var rasties vienlaicīgas piekļuves datu bāzei gadījumā, mēs varam turpināt izprast datu bāzes izolācijas līmeņa jēdzienu: kā jūs vēlaties izolēt vienlaicīgus darījumus un cik lielā mērā? Piemēram, ja var pieļaut netīrus lasījumus vai ja nevēlaties, lai vienlaicīgām transakcijām būtu netīri lasījumi, tos var iestatīt izolācijas līmenī, lai izolācija starp vienlaicīgām transakcijām būtu brīva vai smaga.
Jo augstāks izolācijas līmenis, jo mazāka iespēja nolasīt netīrus datus vai nepilnīgus datus, bet jo smagāka ir veiktspējas pasliktināšanās sistēmās ar augstu vienlaicīgumu. Jo zemāks izolācijas līmenis, jo lielāks ir veiktspējas uzlabojums vienlaicīgajā sistēmā, bet paši dati var būt nepilnīgi.
Programmā SQL Server 2012 var iestatīt transakcijas izolācijas līmeni (no zema līdz augstam), izmantojot šādu sintaksi:
TRANSAKCIJU IZOLĀCIJAS LĪMEŅA IESTATĪŠANA { LASĪT NESAISTĪTU | LASĪT APŅEMŠANOS | ATKĀRTOJAMA LASĪŠANA | MOMENTUZŅĒMUMS | SĒRIJVEIDA IZVEIDE } [ ; ] Vispirms izveidojiet jaunu testa skriptu, izveidojiet datu bāzi un ievietojiet testa datus šādi:
Izveidot jaunu logu A, atveriet darījumu, veiciet atjaunināšanas darbību un pagaidiet 10 sekundes pirms apņemšanās, kods ir šāds:
Jauna loga B izveide, iestatiet darījumu READ UNCOMMITTED (nesaistītā lasīšana, zemākais līmenis, vienkāršā problēma ir netīra lasīšana, jo tā var nolasīt datus, ko modificējuši citi darījumi, bet nav saistīti.) Tas dara to pašu, kas iestatījums (NOLOCK) SELECT priekšraksta objekta tabulā transakcijā. Vaicājiet datus, kods ir šāds:
Izveidojiet jaunu logu C, tieši vaicājiet datus šādi:
SavukārtIzpildiet logus A, B un C un konstatējiet, ka, atjauninot datus, B logs var nekavējoties atgriezt datus (Iespējams, ka rādījums ir netīri dati), C logam ir jāgaida, līdz A logs pabeidz izpildiatgriezīs datus, kā parādīts zemāk redzamajā attēlā:
(B logs)
(C logs)
(Beigas)
|