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

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

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

Resumen

En SQL Server, es posible que observe que la columna bloqueada de la tabla del sysprocesses sistema se rellena para las esperas de bloqueo temporal, además de las esperas de bloqueo. En ocasiones, es posible que observe breves períodos de tiempo cuando se notifica que un identificador de proceso de servidor único (SPID) se bloquea por sí mismo. Este comportamiento es normal.

Más información

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

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

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

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

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

Cuando un SPID está esperando un bloqueo temporal 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 bloqueos temporales para las operaciones de E/S en las 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 temporal en la página. Todas las operaciones de E/S SQL Server son asincrónicas. Por lo tanto, el SPID intentará adquirir otro bloqueo temporal en la misma página si el SPID que emitió la solicitud de E/S debe esperar a que finalice la solicitud. El primer bloqueo temporal bloquea este segundo bloqueo temporal. Por lo tanto, la columna bloqueada informa de que el SPID se está bloqueando. Cuando finaliza la solicitud de E/S, se libera el primer bloqueo temporal. A continuación, se concede la segunda solicitud de bloqueo temporal.

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 bloqueo temporal EX en la página. Dado que la página aún no existe en la memoria, el modo de bloqueo temporal solicitado es EX. El modo de bloqueo temporal EX obliga a otros SPID que también pueden querer acceder a la página a esperar a que finalice la solicitud de E/S. El modo de bloqueo temporal 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 bloqueo temporal que tenga el modo de bloqueo temporal compartido (SH) en la misma página. Dado que ya se ha adquirido un bloqueo temporal EX, se bloquea la solicitud de bloqueo temporal sh y se suspende el SPID. Dado que el bloqueo temporal EX que bloquea la solicitud de bloqueo temporal sh también fue adquirido por SPID 55, el SPID se notifica temporalmente como bloqueo por sí mismo.

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

  6. La versión del bloqueo temporal EX proporciona el bloqueo temporal SH a SPID 55.

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

Entre el paso 4 y el paso 5, la sysprocesses tabla indica que 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.