Saltar para o conteúdo principal
Experimenta antes de pagar — a tua primeira aula é GRÁTIS!
Goalbi Academy

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

Engenheiro de bases de dados a analisar um problema complexo em vários monitores.

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.

Engenheiro a estudar bloqueios e sessões de bases de dados em ecrãs de monitorização.

Como investigar blocking

  1. Identifica o request bloqueado.
  2. Identifica a sessão que bloqueia.
  3. Segue a cadeia até ao head blocker.
  4. Inspeciona a transação aberta e a query.
  5. Verifica há quanto tempo está aberta.
  6. Determina se o comportamento é esperado.
  7. 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.

Dois profissionais de bases de dados a discutir um diagrama de deadlock.

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.

Contactar a Goalbi Academy

Referências

Understand and Resolve SQL Server Blocking Problems - SQL Server

Deadlocks Guide - SQL Server

Monitor Performance by Using the Query Store - 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.

Todos os artigos
Todos os artigos
Disponível