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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top