Úroveň izolace transakcí v SQL Serveru a jejich vztah k nečistým čtením, neopakovatelným čtením, falešným čtením atd. (argumenty kódu a časové sekvence)
Pochopením těchto problémů, které mohou vzniknout v případě souběžného přístupu k databázi, můžeme pokračovat v chápání konceptu úrovně izolace databáze, jednoduše řečeno: jak chcete izolovat souběžné transakce a do jaké míry? Například pokud lze tolerovat nekvalitní čtení, nebo pokud nechcete, aby souběžné transakce měly špinavé čtení, lze tyto hodnoty nastavit na úroveň izolace, aby byla izolace mezi současnými transakcemi volná nebo závažná.
Čím vyšší úroveň izolace, tím menší je pravděpodobnost čtení špinavých nebo neúplných dat, ale tím vážnější je zhoršení výkonu v systémech s vysokou souběžností. Čím nižší je úroveň izolace, tím větší je zlepšení výkonu v souběžném systému, ale samotná data mohou být neúplná.
V SQL Server 2012 můžete nastavit úroveň izolace transakce (od nízké po vysokou) pomocí této syntaxe:
NASTAVTE ÚROVEŇ IZOLACE TRANSAKCE { ČTI NEROZHODNUTÝ | READ SE ZAVÁZAL | OPAKOVATELNÉ ČTENÍ | MOMENTKA | SERIALIZOVATELNÝ } [ ; ] Nejprve vytvořte nový testovací skript, vytvořte databázi a vložte testovací data, následovně:
Vytvořte nové okno A, otevřete transakci, provedete aktualizační operaci a počkejte 10 sekund před commitem, kód je následující:
Vytvořte nové okno B, nastavte transakci na READ UNCOMMITTED (nezávazné čtení, nejnižší úroveň, snadný problém je dirty reading, protože může číst data upravená jinými transakcemi, ale nejsou commit.) Dělá to samé jako nastavení (NOLOCK) na tabulce objektů příkazu SELECT v transakci. Dotazujte se na data, kód je následující:
Vytvořte nové okno C, přímo dotazuje data následovně:
Na oplátku,Spusť okna A, B a C a zjistíš, že při aktualizaci dat může okno B okamžitě vrátit data (Je možné, že data jsou špinavá), C okno musí počkat, až okno A dokončívrátí data, jak je znázorněno na obrázku níže:
(Okno B)
(Okno C)
(Konec)
|