Graphique de blocage SQL Server - Verrouillage de table, de page ou de ligne?


10

Existe-t-il un moyen de déchiffrer si un verrou dans un graphique de blocage est de niveau Table, Page ou Ligne? J'ai toutes les informations dont j'ai besoin dans le graphique, y compris le niveau d'isolement, (2) mais je veux vraiment le savoir aussi.

Merci à tous ceux qui peuvent aider!

Réponses:


13

Dans le graphique XML de blocage, vous verrez quelque chose comme:

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

C'est Xle bit intéressant, les valeurs possibles qui vous intéressent sont:

  • RID pour l'ID de ligne (verrouillage de niveau de ligne)
  • PAG pour le verrouillage au niveau de la page
  • OBJECT(qui peut être qualifié en TABindiquant un verrou de table)

Il existe également quelques autres types répertoriés dans la documentation .


Merci, c'est utile. Bien que dans mon graphique, j'ai 2 processus, qui semblent utiliser des pages différentes: waitresource = "RID: 21: 1: 2588: 0" waitresource = "RID: 21: 1: 2699: 1" Donc, s'ils utilisent des pages différentes , alors ils ne peuvent pas être en conflit sur la même ligne, n'est-ce pas? Parce que j'utilise un indice WITH (ROWLOCK) sur cette requête.
tuseau

2
Si le processus 1 contient 2699 et veut 2588, et que le processus 2 contient 2588 et veut 2699, cela entraînerait un blocage. N'oubliez pas qu'une impasse implique une dépendance circulaire.
Gaius
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.