La columna bloqueada de la tabla sysprocesses se rellena para esperas de bloqueo

En este artículo se presenta que la columna bloqueada de la sysprocesses tabla se rellena para las esperas de bloqueo.

Versión del producto original:   SQL Server
Número KB original:   906344

Resumen

En SQL Server, puede observar que la columna bloqueada de la tabla del sistema se rellena para las esperas de bloqueo además de las sysprocesses esperas de bloqueo. En ocasiones, es posible que observe períodos breves de tiempo en los que un solo identificador de proceso de servidor (SPID) se notifica como bloqueo. Este comportamiento es normal.

Más información

Los bloqueos se usan para sincronizar el acceso a las páginas de datos almacenadas en caché y otros objetos en memoria. Por lo general, los pestillos solo se mantienen brevemente y los tiempos de espera de cierre son relativamente pequeños. SQL Server tiene diagnósticos para ayudar a solucionar los casos en los que un SPID espera mucho tiempo para un bloqueo. Estos diagnósticos hacen que la columna bloqueada de la tabla del sistema refleje el propietario de un bloqueo que bloquea la solicitud de bloqueo sysprocesses de otro SPID.

La propiedad del bloqueo solo se realiza un seguimiento de los pestillos que están en modo de bloqueo exclusivo (EX) o actualización (UP). No se realiza un seguimiento de la propiedad de los pestillos que están en modo de bloqueo compartido (SH). Esto significa que la columna bloqueada no se rellenará para algunas solicitudes de bloqueo.

La mayoría de las veces, puede omitir el valor de la columna bloqueada si se cumplen las siguientes condiciones:

  • El valor de la waittime columna es bajo.
  • El waittype SPID es un tipo de espera de bloqueo.

Para obtener más información acerca de los valores posibles de la columna, vea waittype sys.dm_os_wait_stats (Transact-SQL).

Cuando un SPID espera un bloqueo de página de E/S, es posible que observe que la columna bloqueada informa brevemente de que el SPID se está bloqueando. Este comportamiento es un efecto secundario de la forma en que se usan los pestillos para operaciones de E/S en páginas de datos. Cuando un subproceso emite una solicitud de E/S, el SPID que emite la solicitud de E/S adquiere un bloqueo en la página. Todas SQL Server operaciones de E/S son asincrónicas. Por lo tanto, el SPID intentará adquirir otro pestillo en la misma página si el SPID que emitió la solicitud de E/S debe esperar a que finalice la solicitud. El primer pestillo bloquea este segundo pestillo. Por lo tanto, la columna bloqueada informa de que el SPID se está bloqueando por sí mismo. Cuando finaliza la solicitud de E/S, se libera el primer pestillo. A continuación, se concede la segunda solicitud de bloqueo.

Por ejemplo, pueden producirse las siguientes condiciones:

  1. SPID 55 quiere leer una página de datos que no existe en el grupo de búferes.

  2. SPID 55 adquiere un pestillo EX en la página. Dado que la página aún no existe en la memoria, el modo de bloqueo solicitado es EX. El modo de bloqueo EX fuerza a otros SPID que también quieran tener acceso a la página para esperar a que finalice la solicitud de E/S. El modo de bloqueo EX también impide que otros SPID emitan una solicitud de E/S duplicada para la misma página.

  3. SPID 55 emite la solicitud de E/S para leer la página desde el disco.

  4. Dado que SPID 55 quiere leer la página, SPID 55 debe esperar a que finalice la solicitud de E/S. Para esperar a que finalice la solicitud de E/S, SPID 55 intenta adquirir otro pestillo que tenga el modo de bloqueo compartido (SH) en la misma página. Dado que ya se ha adquirido un bloqueo EX, la solicitud de bloqueo SH se bloquea y se suspende el SPID. Dado que el bloqueo EX que bloquea la solicitud de bloqueo SH también fue adquirido por SPID 55, el SPID se notifica temporalmente como bloqueado.

  5. Cuando finaliza la solicitud de E/S, se libera el bloqueo EX de la página.

  6. La versión del pestillo EX da el pestillo SH a SPID 55.

  7. SPID 55 ahora puede leer la página.

Entre los pasos 4 y 5, la tabla indica que sysprocesses SPID 55 está bloqueado por sí mismo junto con un tipo de espera de PAGEIOLATCH_ XX. En este tipo de espera, XX puede ser SH, UP o EX. Este comportamiento indica que SPID 55 emitió una solicitud de E/S y SPID 55 está esperando a que finalice la solicitud de E/S.