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!

tuseau
la source

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 .

Gaius
la source
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