Příznaky
Zvažte následující scénář:
-
Máte databázi Microsoft SQL Server 2012 s povolenými možnostmi ALLOW_SNAPSHOT_ISOLATION a READ_COMMITTED_SNAPSHOT .
-
Máte aspoň tři souběžné dotazy, které se spouštějí na stejné tabulce.
-
Dotazy používají pomocný parametr dotazu (TABLOCK, UPDLOCK) .
-
Každý dotaz je zabalen do explicitního příkazu BEGIN TRAN , ale příkaz Commit Tran se neprovede.
Po potvrzení prvního dotazu v tomto scénáři bude jeden z ostatních dotazů zablokovaný. Pokud je READ_COMMITTED_SNAPSHOT povolen společně s doporučeními pro dotazy na TABLOCK a UPDLOCK , relace v tabulce zabírají. Zablokování nastává, když se dvě souběžné relace pokusí převést zámky IX na X zámky najednou. Pokud je READ_COMMITTED_SNAPSHOT zakázaná, budou relace získávat šest zámků, které se při převodu do zámků X nezmění. Tato oprava hotfix řeší toto chování tím, že udělí LCK_M_SCH_S zámky namísto IX, když se READ_COMMITTED_SNAPSHOT používá s tipy pro TABLOCK a UPDLOCK .PoznámkaK tomuto problému dochází taky v Microsoft SQL serveru 2008 R2. Oprava hotfix pro SQL Server 2008 R2 bude brzy vydána.
Řešení
Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
Kumulativní aktualizace 8 pro SQL Server 2012 SP1 /en-us/help/2917531
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.