Deadlock Ajuda necessária, por favor
-
25-09-2019 - |
Pergunta
Eu tenho uma situação peculiar. Eu tenho tabelas que são acessadas constantemente por diferentes partes do nosso código e milhares de clientes e, portanto, empregamos o uso de transações ao fazer atualizações e inserções simples em nossas tabelas. O problema é que continuamos recebendo erros de impasse. Alguém tem alguma ideia de como posso aliviar esse problema?
Solução
Deadlocks podem surgir por muitos motivos e combinações:
Projeto de esquema ruim
Índices incorretos para sua carga de trabalho de consulta
TSQL mal escrito
Níveis agressivos de isolamento de transações e/ou transações abertas longas em execução
Má padrões de acesso de aplicação
Especificações baixas ou hardware configurado incorretamente
Tudo isso é comum.
Eu sugiro que você leia
Outras dicas
Esse problema não é muito peculiar - é típico quando os desenvolvedores não sabem muito sobre como o bloqueio funciona e apenas pense nas transações como 'caixas pretas' e esperam que suas soluções escalem.
Mitch está certo nos comentários sobre pagar a alguém que é um especialista - esse é um problema grande demais para qualquer solução para isso. Você precisará estar armado com traços de consultas, causando impasse e precisará analisar tudo, desde seus índices até o design da tabela, até os níveis de isolamento da transação, até seus padrões de consulta.
Sugiro começar com o SQL Server Profiler e configurar um rastreamento que gerará um gráfico de deadlock. Isso identificará pelo menos suas consultas de problemas e os recursos que são deadlocking. Configure outro rastro em busca de consultas lentas (> digamos, 100ms) e acelere -as também. Quanto mais tempo suas consultas são executadas, maior a probabilidade de contenção de bloqueio.