13 de agosto de 2026 · 7 min de leitura
Deadlock acontece quando duas (ou mais) sessões travam recursos em ordem cruzada: a sessão A tem o recurso X e quer o Y; a sessão B tem o Y e quer o X. Nenhuma consegue avançar. O SQL Server detecta o ciclo automaticamente (Lock Monitor, a cada ~5 segundos) e mata uma das duas sessões — a "vítima" — pra destravar a outra.
A forma mais simples de capturar deadlocks sem configurar nada é o system_health, uma Extended Events session que já roda por padrão em toda instância:
SELECT
xed.value('@timestamp', 'datetime2') AS quando,
xed.query('.') AS deadlock_graph
FROM (
SELECT CAST(target_data AS xml) AS target_data
FROM sys.dm_xe_session_targets st
JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address
WHERE s.name = 'system_health' AND st.target_name = 'ring_buffer'
) AS data
CROSS APPLY target_data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS x(xed);O resultado é um XML — abrindo no SSMS ele vira o gráfico visual clássico, com cada processo, o recurso que segura e o que espera.
Deadlock esporádico é normal em qualquer sistema com concorrência — o problema é quando vira padrão recorrente e ninguém percebe até o usuário reclamar. O codeDB captura o gráfico de deadlock automaticamente e mantém o histórico, então dá pra ver se é um caso isolado ou a mesma dupla de queries brigando toda hora.
Artigos relacionados
30 dias grátis para monitorar isso automaticamente no seu próprio ambiente.
Começar gratuitamenteMonitoramento inteligente de SQL Server com agente local seguro e diagnósticos em tempo real.
© 2026 codeDB. Todos os direitos reservados.
Powered by codeDB
codeDB Informática Ltda — CNPJ 18.953.756/0001-10 — Florianópolis/SC