Recentemente, um de nossos aplicativos ASP.NET exibiu um erro de deadlock de banco de dados e fui solicitado a verificar e corrigir o erro. Consegui descobrir que a causa do impasse era um procedimento armazenado que estava atualizando rigorosamente uma tabela dentro de um cursor.
Esta é a primeira vez que vejo esse erro e não sabia como rastreá-lo e corrigi-lo de maneira eficaz. Eu tentei todas as formas possíveis que conheço e finalmente descobri que a tabela que está sendo atualizada não possui uma chave primária! felizmente era uma coluna de identidade.
Mais tarde, encontrei o desenvolvedor que fez o script do banco de dados para implantação confuso. Eu adicionei uma chave primária e o problema foi resolvido.
Fiquei feliz e voltei ao meu projeto, e fiz algumas pesquisas para descobrir o motivo daquele impasse...
Aparentemente, foi uma condição de espera circular que causou o impasse. As atualizações aparentemente demoram mais sem uma chave primária do que com a chave primária.
Eu sei que não é uma conclusão bem definida, por isso estou postando aqui...
- A chave primária ausente é o problema?
- Existem outras condições que causam impasse além de (exclusão mútua, espera e espera, sem preempção e espera circular)?
- Como evitar e rastrear impasses?