Příznaky
Zvažte následující scénář:
-
Máte databázi s možnostmi ALLOW_SNAPSHOT_ISOLATION a READ_COMMITTED_SNAPSHOT v Microsoft SQL serveru 2008 R2 povolené.
-
Spustíte příkaz Select , který obsahuje rady TABLOCK a UPDLOCK v tabulce v databázi.
-
Příkaz Select je zabalen v explicitním počátečním Tran, ale neprovádí se to.
-
V explicitní transakci jsou uvedené další dva stejné dotazy, které jsou zahájené se stejnými tipy pro dotazy.
V tomto scénáři bude při každém potvrzení prvního dotazu jeden z ostatních dotazů zablokovaný.
Příčina
K tomuto problému dochází, protože SQL Server nesprávně hlásí zablokování v jednom z následujících scénářů:
-
Když jsou pro databázi povolené ALLOW_SNAPSHOT_ISOLATION a READ_COMMITTED_SNAPSHOT , může být po dokončení jednoho z nich více dotazů na stejnou transakci označeno jako nesprávné.
-
Pokud je povolená ALLOW_SNAPSHOT_ISOTION a použijí se TABLOCK a UPDLOCK , použije se druhý a třetí příkaz Select , který se dá převést na X. Po provedení pokusu o převod na X se zámky IX ukončí.
-
Pokud ALLOW_SNAPSHOT_ISOLATION zakázán, druhý a třetí dotaz obdrží šest zámek. V této situaci, když je šest zámek převedený na X, jde jenom o blokující scénář, ne zablokování.
Řešení
Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru. Po instalaci této opravy hotfix SQL Server tento problém vyřeší, pokud se u databáze a dotazu vyskytne Nápověda pro čtení nebo NOLOCK . Tyto informace slouží k vybrání správného typu zámků pro správné zpracování situace namísto nesprávné sestavy zablokování.
Kumulativní aktualizace 11 pro SQL Server 2008 R2 SP2 /en-us/help/2926028
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.