Sintomas
Considere o seguinte cenário:
-
Tem uma base de dados que tem as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT ativadas no Microsoft SQL Server 2008 R2.
-
Executou uma declaração SELECT que contém sugestões tablock e UPDLOCK contra uma tabela na base de dados.
-
A declaração SELECT está embrulhada num TRAN DE INÍCIOexplícito, mas o COMMIT TRAN não é executado.
-
Mais duas das mesmas consultas que são iniciadas com as mesmas dicas de consulta estão na transação explícita.
Neste cenário, quando a primeira consulta for cometida, uma das outras consultas será o impasse.
Causa
O problema ocorre porque o SQL Server relata incorretamente o impasse num dos seguintes cenários:
-
Quando ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT estiverem ativados para uma base de dados, várias consultas contra a mesma transação podem ser reportadas como um impasse incorretamente quando uma delas estiver concluída.
-
Quando ALLOW_SNAPSHOT_ISOTION estiver ativado e forem utilizadas as sugestões TABLOCK e UPDLOCK, a segunda e terceira declaração SELECT tomam fechaduras IX com a intenção de conversão para X. As fechaduras IX acabam por travar quando é feita uma tentativa de conversão para X.
-
Quando ALLOW_SNAPSHOT_ISOLATION é desativado, a segunda e terceira consultas obterão uma fechadura SEIS. Nesta situação, quando a fechadura SEIS é convertida em X, é apenas um cenário de bloqueio, não um impasse.
Resolução
O problema foi corrigido pela primeira vez na seguinte atualização cumulativa do SQL Server. Depois de aplicar o hotfix, o SQL Server resolve o problema gravando se for encontrada uma dica DE READ COMMIT ou NOLOCK para a base de dados e consulta. Estas informações são utilizadas para selecionar o tipo correto de fechaduras para lidar corretamente com a situação, em vez de reportarem incorretamente o impasse.
Atualização Cumulativa 11 para SQL Server 2008 R2 SP2 /en-us/help/2926028
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".