Grafico deadlock di SQL Server: blocco tabella, pagina o riga?


10

Esiste un modo per decifrare se un blocco in un grafico deadlock è a livello di tabella, pagina o riga? Ho tutte le informazioni di cui ho bisogno dal grafico, incluso il livello di isolamento, (2), ma voglio davvero sapere anche questo.

Grazie a chiunque possa aiutare!

Risposte:


13

Nel grafico XML deadlock vedrai qualcosa di simile:

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

Il Xè il bit interessante, possibili valori a cui sei interessato sono:

  • RID per ID riga (blocco a livello di riga)
  • PAG per blocco a livello di pagina
  • OBJECT(che può essere ulteriormente qualificato TABindicando un blocco tabella)

Ci sono alcuni altri tipi elencati nella documentazione .


Grazie, è utile. Anche se nel mio grafico ho 2 processi, che sembrano utilizzare pagine diverse: waitresource = "RID: 21: 1: 2588: 0" waitresource = "RID: 21: 1: 2699: 1" Quindi se usano pagine diverse , quindi non possono essere in conflitto sulla stessa riga, giusto? Perché sto usando un suggerimento WITH (ROWLOCK) su questa query.
tuseau

2
Se il processo 1 contiene 2699 e desidera 2588 e il processo 2 contiene 2588 e richiede 2699, questo si bloccherebbe. Ricorda che un deadlock implica una dipendenza circolare.
Gaius,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.