Dicas para um DBA Iniciante – Listar deadlocks utilizando a system_health

Fala galera, tudo bem com vocês?

Muita gente tem pedido para compartilhar os principais scripts que utilizo para gerenciar um ambiente de banco de dados SQL Server e por isso montei uma lista com os que são mais úteis.

O script de hoje é referente a monitoração de Deadlocks (que encontrei no site do Pinal Dave) e é extremamente útil porque utiliza a sessão de sistema system_health, dos extended events.

[code language=”sql”]
SELECT XEvent.query(‘(event/data/value/deadlock)[1]’) AS DeadlockGraph
FROM (
    SELECT XEvent.query(‘.’) AS XEvent
    FROM (
        SELECT CAST(target_data AS XML) AS TargetData
        FROM sys.dm_xe_session_targets st
        INNER 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 TargetData.nodes(‘RingBufferTarget/event[@name="xml_deadlock_report"]’) AS XEventData(XEvent)
) AS source;

[/code]

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

4 pensou em “Dicas para um DBA Iniciante – Listar deadlocks utilizando a system_health

  1. Joni

    Vitão, show de bola este post, mas tenho uma duvida, como evitar que os deadlocks ocorram.

    Responder
    1. Vitor Fava

      E ai Joni, tudo bem?
      Temos de avaliar quais os objetos que estão presentes no deadlock e entender se a forma como estão sendo acessados está correta, por exemplo, se não está sendo realizado um full scan ao invés de um index seek.
      A criação de novos índices pode ajudar com certeza.

      Responder
  2. Heitor Rocha Arantes

    Vitor, boa tarde!

    Para evitar deadlocks, uma das soluções poderia adicionar with(Nolock) ? Conforme exemplo abaixo.

    SELECT * FROM TabelaPessoas WITH (NOLOCK)

    Obrigado.

    Responder
    1. Vitor Fava

      E ai grande Heitor, tudo bem?
      A melhor forma de evitar os deadlocks é avaliar quais os objetos que estão presentes no deadlock e entender se a forma como estão sendo acessados está correta, por exemplo, se não está sendo realizado um full scan ao invés de um index seek.
      A criação de novos índices pode ajudar com certeza.

      Responder

Deixe uma resposta