Sintomas
Considere o seguinte cenário:
-
Você tem um banco de dados do Microsoft SQL Server 2012 com as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT habilitada.
-
Você tem pelo menos três consultas simultâneas executadas na mesma tabela.
-
As consultas usam a dica de consulta (TABLOCK, UPDLOCK) .
-
Cada consulta é empacotada em uma instrução BEGIN TRAN explícita, mas a instrução Commit Tran não é executada.
Quando a primeira consulta for confirmada nesse cenário, uma das outras consultas será bloqueada. Quando READ_COMMITTED_SNAPSHOT é habilitado juntamente com as dicas de consulta TABLOCK e UPDLOCK , as sessões levam a IX Locks na tabela. O deadlock ocorre quando as duas sessões simultâneas tentam converter os bloqueios do IX para o X Locks ao mesmo tempo. Se READ_COMMITTED_SNAPSHOT estiver desabilitada, as sessões obterão seis bloqueios que não serão bloqueados quando forem convertidos em bloqueios X. O hotfix corrige esse comportamento ao conceder bloqueios LCK_M_SCH_S em vez de IX Locks quando READ_COMMITTED_SNAPSHOT é usado com dicas TABLOCK e UPDLOCK .ObservaçãoEsse problema também ocorre no Microsoft SQL Server 2008 R2. Um hotfix para SQL Server 2008 R2 será lançado em breve.
Resolução
O problema foi corrigido primeiro na atualização cumulativa a seguir do SQL Server.
Atualização cumulativa 8 para SQL Server 2012 SP1 /en-us/help/2917531
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".