Úroveň izolácie transakcií v SQL Serveri a ich vzťah k špinavým čítaniam, neopakovateľným čítaniam, fantómovým čítaniam a podobne (argumenty kódu a časové sekvencie)
Pochopením týchto problémov, ktoré môžu vzniknúť v prípade súbežného prístupu k databáze, môžeme pokračovať v chápaní konceptu úrovne izolácie databázy, jednoducho povedané: ako chcete izolovať súbežné transakcie a do akej miery? Napríklad, ak je možné tolerovať špinavé čítania, alebo ak nechcete, aby súbežné transakcie mali nečisté čítania, potom sa tieto hodnoty môžu nastaviť na úroveň izolácie, aby bola izolácia medzi súbežnými transakciami voľná alebo prísna.
Čím vyššia je úroveň izolácie, tým menšia je pravdepodobnosť čítania nečistých alebo neúplných dát, ale tým vážnejšie je zhoršenie výkonu v systémoch s vysokou súbežnosťou. Čím nižšia je úroveň izolácie, tým väčšie zlepšenie výkonu v súbežnom systéme, ale samotné údaje môžu byť neúplné.
V SQL Server 2012 môžete nastaviť úroveň izolácie transakcie (od nízkej po vysokú) pomocou tejto syntaxe:
NASTAVTE ÚROVEŇ IZOLÁCIE TRANSAKCIÍ { ČÍTAJTE NEZÁVÄZNÝ | READ SA ZAVIAZAL | OPAKOVATEĽNÉ ČÍTANIE | MOMENTKA | SERIALIZOVATEĽNÉ } [ ; ] Najprv vytvorte nový testovací skript, vytvorte databázu a vložte testovacie dáta nasledovne:
Vytvoriť nové okno A, otvorte transakciu, vykonáte aktualizačnú operáciu a počkajte 10 sekúnd pred commitom, kód je nasledovný:
Vytvorte nové okno B, nastavte transakciu na READ UNCOMMITTED (nezáväzné čítanie, najnižšia úroveň, jednoduchý problém je špinavé čítanie, pretože dokáže čítať dáta upravené inými transakciami, ale nie commited). Robí to isté ako nastavenie (NOLOCK) v tabuľke objektov príkazu SELECT v transakcii. Dotazujte sa na dáta, kód je nasledovný:
Vytvoriť nové okno C, priamo dotazuje dáta nasledovne:
Na oplátku,Spustite okná A, B a C a zistite, že pri aktualizácii dát môže okno B okamžite vrátiť dáta (Je možné, že údaje sú špinavé), C okno musí počkať, kým sa okno A dokončívráti údaje, ako je znázornené na obrázku nižšie:
(Okno B)
(Okno C)
(Koniec)
|