Blocking vs Deadlocks no SQL Server: Qual é a Diferença?
Blocking e deadlocks envolvem sessões à espera de locks, mas não são o mesmo problema. Blocking pode ser normal e temporário; deadlock é um ciclo que o SQL Server precisa interromper escolhendo uma vítima.
Por Goalbi Academy
Publicado em 4 min de leitura
Blocking e deadlocks são problemas de concorrência, mas tratá-los como se fossem a mesma coisa leva a troubleshooting fraco. Blocking significa que uma sessão está à espera porque outra mantém um lock incompatível. Deadlock é um ciclo em que sessões esperam umas pelas outras e a situação não consegue resolver-se sozinha.
Blocking não é automaticamente um problema
SQL Server utiliza locks para preservar consistência transacional. Se uma transação altera uma linha e ainda não fez commit, outra transação pode ter de esperar. Blocking curto pode ser completamente normal.
Torna-se problema quando a espera ultrapassa o que a aplicação suporta, quando uma transação fica aberta sem necessidade ou quando um processo bloqueia muitas outras sessões.
Como funciona uma cadeia de blocking
Imagina que a Sessão A altera uma linha e mantém a transação aberta. A Sessão B tenta alterar a mesma linha e espera. Outras sessões podem ficar atrás. O mais importante é encontrar o head blocker, isto é, a sessão que está no início da cadeia. Para uma explicação específica, consulte como diagnosticar um SQL Server lento.
Deadlock é diferente
Num deadlock existe um ciclo. A Sessão A possui um recurso de que a B precisa, e a B possui um recurso de que a A precisa. Nenhuma consegue continuar. SQL Server deteta o ciclo e escolhe uma transação como vítima para permitir que a outra prossiga.
Exemplo conceptual
A Sessão A bloqueia a Linha 1 e depois pede a Linha 2. A Sessão B já bloqueou a Linha 2 e pede a Linha 1. Cada uma espera pela outra. Isso é deadlock.
Como investigar blocking
- Identifica o request bloqueado.
- Identifica a sessão que bloqueia.
- Segue a cadeia até ao head blocker.
- Inspeciona a transação aberta e a query.
- Verifica há quanto tempo está aberta.
- Determina se o comportamento é esperado.
- Decide se é melhor esperar, corrigir a aplicação ou intervir.
Como investigar deadlocks
O ideal é usar um deadlock graph. O system_health Extended Events session normalmente mantém informação útil sobre deadlocks. O gráfico mostra processos, recursos, locks e a vítima.
Procura padrões repetidos: ordem diferente de acesso a objetos, transações longas, índices inadequados, scans grandes ou demasiada lógica dentro da transação.
Por que índices podem influenciar
Um índice não 'resolve locks' automaticamente, mas um melhor access path pode reduzir a quantidade de dados tocados e o tempo durante o qual locks são mantidos. A decisão deve vir do execution plan e do workload. Explore planos de execução no SQL Server para aprofundar este ponto.
Isolation levels e row versioning
Isolation levels alteram a forma como readers e writers interagem. Opções baseadas em row versioning podem reduzir alguns tipos de reader-writer blocking, mas mudam a semântica e utilizam tempdb. Não devem ser ativadas como solução universal.
Erros comuns
- Assumir que todo lock é mau.
- Matar sessões antes de encontrar o head blocker.
- Chamar deadlock a qualquer espera.
- Ignorar o deadlock graph e apenas repetir a transação.
- Alterar isolation level sem compreender consistência.
- Adicionar índices sem medir.
- Manter transações abertas enquanto a aplicação espera por trabalho externo.
Modelo mental simples
Uma fila pode desaparecer quando a transação da frente termina. Um ciclo não se resolve apenas esperando.
Prevenção muitas vezes exige DBA e desenvolvimento
A solução durável pode envolver transações mais curtas, ordem consistente de acesso, melhores índices, menos trabalho dentro da transação, retries bem desenhados ou revisão do isolation level. O artigo complementar sobre o trabalho de um DBA de SQL Server desenvolve este tema.
Formação relacionada
SQL Server Performance Tuning & Troubleshooting inclui análise de blocking chains, criação controlada de deadlocks, Extended Events e interpretação de deadlock graphs.
Ver o curso de Performance Tuning
Precisa de ajuda para escolher o curso certo?
Se não tiver a certeza por onde começar, contacte a Goalbi Academy e diga-nos qual é o seu nível atual e o que pretende aprender.
Referências
Understand and Resolve SQL Server Blocking Problems - SQL Server
Sobre a autoria
Goalbi Academy
Autor institucional
A Goalbi Academy oferece formação prática em tecnologia por meio de ensino orientado por instrutores e recursos educativos.
Artigos relacionados
Todos os artigosDesempenho de SQL Server
Como Investigar um SQL Server Lento: Por Onde Começar
Quando alguém diz 'SQL Server está lento', a frase é demasiado ampla para resolver o problema. Primeiro é preciso definir o sintoma, perceber o que mudou e recolher evidências antes de alterar configurações.
5 min de leitura
Desempenho de SQL Server
Planos de Execução no SQL Server: O Que um Iniciante Precisa de Entender
Um execution plan é a estratégia escolhida pelo SQL Server para executar uma query. Não é preciso decorar todos os operadores; é preciso compreender o fluxo, as estimativas e onde o trabalho se torna caro.
4 min de leitura
Azure SQL
Azure SQL Database vs Managed Instance vs SQL Server numa VM do Azure
As três opções podem executar workloads SQL no Azure, mas oferecem níveis diferentes de gestão da plataforma, compatibilidade SQL Server e responsabilidade de infraestrutura.
4 min de leitura