Az SQL Server tranzakcióinak izolálásának szintje és azok kapcsolata a piszkos olvasásokkal, nem ismételhető olvasásokkal, fantomolvasásokkal stb. (kódargumentumok és idősorok)
A párhuzamos adatbázis-hozzáférés esetén felmerülő problémák megértésével továbbra is megérthetjük az adatbázis-izolációs szint fogalmát, egyszerű: hogyan szeretnénk izolálni az egyidejű tranzakciókat, és milyen mértékben? Például, ha a piszkos olvasások tolerálhatók, vagy ha nem akarjuk, hogy az egyidejű tranzakciók piszkos olvasmányokat kapjanak, akkor ezeket az izolációs szintre állíthatjuk, hogy az egyidejű tranzakciók közötti izoláció lazább vagy súlyosabb legyen.
Minél magasabb az elkülönítési szint, annál kisebb az esélye annak, hogy piszkos vagy hiányos adatokat olvasson, de annál súlyosabb a teljesítményromlás a magas párhuzamos rendszerekben. Minél alacsonyabb az izolációs szint, annál nagyobb a teljesítményjavulás az egyidejű rendszerben, de maga az adatok hiányos lehetnek.
Az SQL Server 2012-ben a tranzakció izolációs szintjét (alacsonytól magasig) beállíthatod az alábbi szintaxissal:
ÁLLÍTSA BE A TRANZAKCIÓS IZOLÁCIÓS SZINTET { OLVASS ELKÖTELEZETTEN | ELKÖTELEZETT OLVASÁS | ISMÉTELHETŐ OLVASMÁNY | PILLANATKÉP | SERIALIZÁLHATÓ } [ ; ] Először hozzon létre egy új tesztszkriptet, hozzon létre egy adatbázist, és helyezze be a tesztadatokat a következők szerint:
Hozzon létre egy új ablakot A, megnyit egy tranzakciót, végrehajtja a frissítési műveletet, és várjon 10 másodpercet a kötelezés előtt, a kód a következő:
Hozzon létre egy új B ablakot, állítsa be a tranzakciót OLVASÁS NEM KÖTELEZETT (kötelezetlen olvasás, a legalacsonyabb szint, a könnyű probléma a piszkos olvasás, mert képes olvasni a más tranzakciók által módosított adatokat, de nem elkötelezett.) Ugyanazt teszi, mint a (NOLOCK) beállítása a SELECT utasítás objektumtáblán egy tranzakcióban. Az adatok lekérdezése esetén a kód a következő:
Hozzon létre egy új ablakot Cközvetlenül lekérdezik az adatokat, az alábbiak szerint:
Cserébe,Futtatjuk az A, B és C ablakokat, és találjuk, hogy adatfrissítéskor a B ablak azonnal visszaküldheti az adatokat (Lehetséges, hogy az olvasat mocskos adat), C ablaknak meg kell várnia, amíg az ablak befejezi a végrehajtástvisszaadja az adatokat, ahogy az alábbi ábrán látható:
(B ablak)
(C ablak)
(Vége)
|