Sintomas
Considere o seguinte cenário:
-
Tem uma base de dados do Microsoft SQL Server 2012 que tem as opções de ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT ativadas.
-
Tem pelo menos três consultas simultâneas que vão contra a mesma mesa.
-
As consultas utilizam a sugestão de consulta (TABLOCK, UPDLOCK).
-
Cada consulta é embrulhada numa declaração explícita do BEGIN TRAN, mas a declaração do COMMIT TRAN não é executada.
Quando a primeira consulta for cometida neste cenário, uma das outras consultas irá travar. Quando READ_COMMITTED_SNAPSHOT estiver ativado juntamente com as sugestões de consulta TABLOCK e UPDLOCK, as sessões têm bloqueios IX na mesa. O impasse ocorre quando as duas sessões simultâneas tentam converter as fechaduras IX em fechaduras X ao mesmo tempo. Se READ_COMMITTED_SNAPSHOT estiver desativado, as sessões obterão seis bloqueios que não irão travar quando forem convertidos em fechaduras X. O hotfix aborda este comportamento concedendo LCK_M_SCH_S fechaduras em vez de fechaduras IX quando READ_COMMITTED_SNAPSHOT é usado com indicações TABLOCK e UPDLOCK. NotaEste problema também ocorre no Microsoft SQL Server 2008 R2. Em breve será lançado um hotfix para SQL Server 2008 R2.
Resolução
O problema foi corrigido pela primeira vez na seguinte atualização cumulativa 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 que foram incluídas com a atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".