Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Enigma do impasse :A vítima não possui nenhum recurso, usado para matar para resolver o impasse


No contexto de bloqueio, as tabelas e seus índices relacionados são entidades separadas. Às vezes, o deadlock ocorre entre uma tabela e seu índice, em vez de entre duas tabelas separadas.

O problema é mais provável quando um bloqueio é adquirido em um índice e outro bloqueio é adquirido na tabela relacionada (ou seja, barra) para fazer a pesquisa de dados. Durante a inserção, isso acontecerá na ordem oposta. Primeiro, a tabela (ou seja, a barra) é bloqueada e atualizada, depois os índices são bloqueados.
select foo 
from bar 
where @someId = 0 OR SomeId = @someId

Você tem/pode adicionar um índice de cobertura (para ajudar com a seleção) que contém o SomeId e o foo ? Dessa forma, você evitará completamente a pesquisa e impedirá que o problema ocorra.

Você pode postar os planos de consulta em vez de quadros de deadlock?