Transaktioiden eristämisen taso SQL Serverissä ja niiden suhde likaisiin lukuihin, ei-toistettaviin lukuihin, haamulukemiin jne. (koodiargumentit ja aikajaksot)
Ymmärtämällä nämä ongelmat, joita voi ilmetä samanaikaisessa tietokantaan pääsyssä, voimme jatkaa tietokannan eristystason käsitteen ymmärtämistä yksinkertaisella kielellä: miten haluat eristää samanaikaiset transaktiot ja missä määrin? Esimerkiksi, jos likaiset lukemat voidaan sietää tai jos et halua samanaikaisten transaktioiden olevan likaisia lukemia, ne voidaan asettaa eristystasolle, jotta samanaikaisten transaktioiden eristäminen on löyhä tai vakava.
Mitä korkeampi eristystaso on, sitä pienempi riski lukea likaista tai keskeneräistä dataa, mutta sitä vakavampi suorituskyvyn heikkeneminen on korkean samanaikaisuuden järjestelmissä. Mitä alhaisempi eristystaso, sitä suurempi suorituskyvyn parannus rinnakkaisessa järjestelmässä, mutta itse data voi olla puutteellista.
SQL Server 2012:ssa voit asettaa transaktion eristystason (matalasta korkeaan) tällä syntaksilla:
ASETA TRANSAKTIOIDEN ERISTYSTASO { LUE SITOUTUMATON | LUETTU SITOUTUNUT | TOISTETTAVAA LUKUA | SNAPSHOT | SARJOITETTAVANA } [ ; ] Luo ensin uusi testiskripti, luo tietokanta ja lisää testitiedot seuraavasti:
Luo uusi ikkuna A, avaa transaktio, suorittaa päivitysoperaatio ja odottaa 10 sekuntia ennen sitoutumista, koodi on seuraava:
Luo uusi ikkuna B, aseta transaktioksi LUKU SITOUTUMATON (sitoutumaton luku, alin taso, helppo ongelma on likainen lukeminen, koska se voi lukea muiden transaktioiden muokattuja mutta sitoutumattomia tietoja.) Se tekee saman kuin asettamalla (NOLOCK) SELECT-lauseen objektitaululle transaktiossa. Kysy dataa, koodi on seuraava:
Luo uusi ikkuna C, hakea tietoja suoraan seuraavasti:
Vastavuoroisesti,Suorita ikkunat A, B ja C ja huomaa, että dataa päivittäessä ikkuna B voi välittömästi palauttaa tiedot (On mahdollista, että lukema on likaista dataa), C-ikkunan täytyy odottaa, että A ikkuna suorittaapalauttaa tiedot, kuten alla olevassa kuvassa on esitetty:
(Ikkuna B)
(Ikkuna C)
(Loppu)
|