Saiba como evitar ou minimizar os deadlocks no SQL Server.
Breve descrição do deadlock:
Um deadlock ocorre quando dois ou mais processos possuem bloqueios em objetos separados, e cada um dos processos estão tentando obter um bloqueio no objeto que o outro processo bloqueou.
Quando isso acontece o SQL Server, resolve abortando um dos processos tornando-o uma “vítima” permitindo que o outro processo continue a sua transação no banco de dados.
É enviada uma mensagem para o arquivo de error log do SQL Server informando sobre a transação que foi abortada. Deadlocks podem causar uma pressão sobre os recursos do servidor SQL Server, principalmente CPU.
Lidando com os deadlocks:
Na maioria dos casos, temos aplicativos projetados para que quando um deadlock ocorrer, eles enviem novamente a transação abortada depois de receber uma mensagem de deadlock, que provavelmente executará novamente com sucesso. Se o aplicativo não possuir uma forma de tratar isso podem ocorrer grandes problemas para o usuário, até mesmo recebendo a mensagem de erro.
Dicas para evitar deadlocks:
- Verifique se o banco de dados está desenhado corretamente.
- Desenvolva aplicativos que acessam objetos na mesma ordem de cada vez.
- Não permita que usuários interfiram durante as transações.
- Evite cursores.
- Procure ter transações no SQL o mais curto possível.
- Reduza a quantidade de vezes que sua aplicação conversa com o SQL Server usando procedures para manter as transações dentro de um único lote.
- Reduza a quantidade de leituras, se você precisa fazer leituras constantes da mesma informação, coloque essa informação em uma variável ou matriz para você consultar por lá.
- Diminua o máximo possível o tempo de bloqueio. Desenvolva aplicativos que fazem bloqueios em último caso e libere-os o mais rápido possível.
- Se possível, utilize ROWLOCK ou PAGLOCK para reduzir a escalação de bloqueio.
- Em último caso você utiliza o hint NOLOCK.
Como mudar o comportamento do deadlock padrão:
Quando um deadlock ocorre, por padrão o SQL Server escolhe uma “vítima” certo? Você pode alterar esse comportamento padrão atualizando a prioridade usando:
SET DEADLOCK_PRIORITY LOW ou SET DEADLOCK_PRIORITY HIGH
Se você tem mais alguma dica e gostaria de compartilhar conosco, deixe seu comentário abaixo.
Grande abraço!
Wesley Mota
Latest posts by Wesley Mota (see all)
- The Ultimate Guide to Gry Online Ruletka - novembro 14, 2024