Príznaky
Zoberme si nasledujúcu situáciu:
-
Máte databázu Microsoft SQL Server 2012, ktorá má povolené možnosti ALLOW_SNAPSHOT_ISOLATION a READ_COMMITTED_SNAPSHOT .
-
Máte aspoň tri súčasné dotazy spustené v rovnakej tabuľke.
-
Dotazy používajú pomôcku dotaz (TABLOCK, UPDLOCK) .
-
Každý dotaz je zabalený v príkaze explicitné begin Tran , ale príkaz commit Tran sa nespustí.
Keď je prvý dotaz potvrdený v tomto scenári, jeden z ostatných dotazov sa zablokuje. Keď je READ_COMMITTED_SNAPSHOT zapnutá spolu s tipmi na TABLOCK a UPDLOCK dotaz, relácie sa v tabuľke zablokujú na IX. Zablokovanie sa vyskytuje vtedy, keď sa dve súčasné relácie pokúsia skonvertovať IX zámky na X zámky v rovnakom čase. Ak je READ_COMMITTED_SNAPSHOT vypnutá, relácie získajú šesť zámkov, ktoré sa pri konverzii na X zámky nezablokujú. Rýchla oprava rieši toto správanie poskytnutím LCK_M_SCH_S zámkov namiesto IX zámkov pri použití READ_COMMITTED_SNAPSHOT s TABLOCK a UPDLOCK tipmi.Poznámka: Tento problém sa vyskytuje aj v Microsoft SQL Server 2008 R2. Rýchla oprava pre SQL Server 2008 R2 sa čoskoro uvoľní.
Riešenie
Tento problém bol najskôr vyriešený v nasledujúcej kumulatívnej aktualizácii SQL servera.
Kumulatívna aktualizácia balíka 8 pre SQL Server 2012 SP1 /en-us/help/2917531
Každá nová Kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej kumulatívnej aktualizácie. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.