Симптоми
Обмислете следния сценарий:
-
Разполагате с база данни на Microsoft SQL Server 2012, която има разрешени опции за ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT .
-
Имате поне три едновременни заявка, които се изпълняват спрямо една и съща таблица.
-
Заявките използват подсещане за заявката (TABLOCK; UPDLOCK) .
-
Всяка заявка е обработена в изрична инструкция за започване на тран , но не се изпълнява инструкцията за извършване на тран .
Когато първото запитване е извършено при този сценарий, една от другите заявки ще застане в безизходица. Когато READ_COMMITTED_SNAPSHOT е разрешена заедно със съветите за заявки на TABLOCK и UPDLOCK , сесиите имат IX брави в таблицата. Безизходицата се появява, когато двете едновременни сесии се опитат да конвертират ключалките IX едновременно към X брави. Ако READ_COMMITTED_SNAPSHOT е забранена, сесиите ще получат шест брави, които няма да застанат в безизходица, когато бъдат конвертирани в X Locks. Актуалната корекция се отнася за това поведение, като дава LCK_M_SCH_S ключалки вместо IX брави, когато READ_COMMITTED_SNAPSHOT се използва с намеци за TABLOCK и UPDLOCK .Забележка Този проблем се среща и в Microsoft SQL Server 2008 R2. Актуална корекция за SQL Server 2008 R2 ще бъде издадена скоро.
Решение
Проблемът е коригиран първо в следващата сборна актуализация на SQL Server.
Кумулативна актуализация 8 за SQL Server 2012 SP1 /en-us/help/2917531
Всяка нова сборна актуализация за SQL Server съдържа всички поправки и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Състоянието
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".