La colonne bloquée dans la table sysprocesses est remplie pour les attentes de verrous

Cet article présente que la colonne bloquée dans la sysprocesses table est remplie pour les attentes de verrous.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 906344

Résumé

Dans SQL Server, vous remarquerez peut-être que la colonne bloquée dans la sysprocesses table système est remplie pour les attentes de verrou en plus des attentes de verrou. Parfois, vous pouvez remarquer de brèves périodes pendant lesquelles un ID de processus de serveur unique (SPID) est signalé comme bloquant lui-même. Ce comportement est normal.

Plus d’informations

Les verrous sont utilisés pour synchroniser l’accès aux pages de données mises en cache et à d’autres objets en mémoire. En règle générale, les verrous ne sont maintenus que brièvement et les temps d’attente des verrous sont réduits. SQL Server a diagnostics pour vous aider à résoudre les cas dans lesquels un SPID attend longtemps un verrou. Ces diagnostics faire en sorte que la colonne bloquée dans la sysprocesses table système reflète le propriétaire d’un verrou qui bloque la demande de verrou d’un autre SPID.

La propriété du verrou n’est suivie que pour les verrous qui sont en mode de verrouillage exclusif (EX) ou de mise à jour (UP). La propriété n’est pas suivie pour les verrous qui sont en mode de verrou partagé (SH). Cela signifie que la colonne bloquée n’est pas remplie pour certaines demandes de verrous.

La plupart du temps, vous pouvez ignorer la valeur dans la colonne bloquée si les conditions suivantes sont remplies :

  • La valeur de la waittime colonne est faible.
  • Le waittype du SPID est un type d’attente de verrou.

Pour plus d’informations sur les valeurs possibles dans la waittype colonne, consultez sys.dm_os_wait_stats (Transact-SQL).

Lorsqu’un SPID attend un verrou de page d’E/S, vous remarquerez peut-être que la colonne bloquée signale brièvement que le SPID se bloque lui-même. Ce comportement est un effet secondaire de la façon dont les verrous sont utilisés pour les opérations d’E/S sur les pages de données. Lorsqu’un thread émet une demande d’E/S, le SPID qui émet la demande d’E/S acquiert un verrou sur la page. Toutes les opérations d’E/S SQL Server sont asynchrones. Par conséquent, le SPID tente d’acquérir un autre verrou sur la même page si le SPID qui a émis la demande d’E/S doit attendre la fin de la demande. Ce deuxième verrou est bloqué par le premier verrou. Par conséquent, la colonne bloquée signale que le SPID se bloque lui-même. Une fois la demande d’E/S terminée, le premier verrou est libéré. Ensuite, la deuxième demande de verrou est accordée.

Par exemple, les conditions suivantes peuvent se produire :

  1. SPID 55 souhaite lire une page de données qui n’existe pas dans le pool de mémoires tampons.

  2. SPID 55 acquiert un verrou EX sur la page. Étant donné que la page n’existe pas encore en mémoire, le mode de verrou demandé est EX. Le mode de verrou EX force les autres SPID qui peuvent également vouloir accéder à la page à attendre la fin de la demande d’E/S. Le mode de verrou EX empêche également d’autres SPID d’émettre une demande d’E/S en double pour la même page.

  3. SPID 55 émet la demande d’E/S pour lire la page à partir du disque.

  4. Étant donné que SPID 55 souhaite lire la page, SPID 55 doit attendre la fin de la demande d’E/S. Pour attendre la fin de la demande d’E/S, SPID 55 tente d’acquérir un autre verrou dont le mode de verrouillage partagé (SH) est sur la même page. Étant donné qu’un latch EX a déjà été acquis, la demande de latch SH est bloquée et le SPID est suspendu. Étant donné que le verrou EX qui bloque la demande de latch SH a également été acquis par SPID 55, le SPID est temporairement signalé comme bloquant lui-même.

  5. Une fois la demande d’E/S terminée, le verrou EX sur la page est libéré.

  6. La libération du verrou EX donne le verrou SH à SPID 55.

  7. SPID 55 peut désormais lire la page.

Entre l’étape 4 et l’étape 5, le sysprocesses tableau indique que SPID 55 est bloqué par lui-même avec un type d’attente de PAGEIOLATCH_XX. Dans ce type d’attente, XX peut être SH, UP ou EX. Ce comportement indique que SPID 55 a émis une demande d’E/S et que SPID 55 attend la fin de la demande d’E/S.