Gráfico de deadlock do SQL Server - bloqueio de tabela, página ou linha?

10

Existe alguma maneira de decifrar se um bloqueio em um gráfico de deadlock é nível de tabela, página ou linha? Tenho todas as informações necessárias no gráfico, incluindo o nível de isolamento (2), mas também quero saber disso.

Agradeço a quem puder ajudar!

tuseau
fonte

Respostas:

13

No gráfico de deadlock XML, você verá algo como:

<deadlock-list>
  <deadlock victim="...">
    <process-list>
      <process id="..." ... waitresource="X:..."
...

A Xparte interessante é que os possíveis valores de seu interesse são:

  • RID para identificação de linha (bloqueio no nível da linha)
  • PAG para bloqueio no nível da página
  • OBJECT(que pode ser mais qualificado, TABindicando um bloqueio de mesa)

Existem alguns outros tipos listados na documentação também.

Gaius
fonte
Obrigado, isso é útil. Embora no meu gráfico eu tenha 2 processos, que parecem estar usando páginas diferentes: waitresource = "RID: 21: 1: 2588: 0" waitresource = "RID: 21: 1: 2699: 1" Portanto, se eles estiverem usando páginas diferentes , eles não podem estar em conflito na mesma linha, correto? Porque estou usando uma dica WITH (ROWLOCK) nessa consulta.
tuseau
2
Se o processo 1 estiver mantendo 2699 e desejar 2588, e o processo 2 estiver mantendo 2588 e desejar 2699, isso causaria um conflito. Lembre-se de que um impasse implica uma dependência circular.
Caio