Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 12282|Odpověď: 0

[Zdroj] SQL Server nastavuje úroveň izolace transakce

[Kopírovat odkaz]
Zveřejněno 05.02.2021 11:53:34 | | | |
Optimalizace dotazů v rámci entity s POMOCÍ NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Databázové zámky NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Ú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)





Předchozí:Rozdíl v perzistenci mezi RDB a AOF v Redisu
Další:MySQL exportuje výsledky dotazu do souboru
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com