¿Sesiones bloqueadas en espera con PAGELATCH_ * tipos de espera?

9

Editado: ¿Por qué las sesiones que informan se bloquean pero esperan PAGELATCH_*, y no LCK_M_los tipos de espera relacionados?

Anteriormente supuse que el servidor SQL solo informaría sesiones de bloqueo en la columna block_session_Id. Si las sesiones bloqueadas esperaban un bloqueo lógico y no otra cosa como a PAGELATCH_*.

ingrese la descripción de la imagen aquí

Pixelado
fuente
Parece que muchas sesiones concurrentes están insertando datos en la tabla. ¿Puedes publicar la estructura de la tabla junto con los índices?
Kin Shah
@Kin la tabla comienza insertada por SPID 69, 82 y 84 tiene un índice agrupado definido con una propiedad IDENTITY (1,1) por lo que podría ser un caso de contención de inserción de la última página, pero en esta etapa estoy más interesado en por qué las sesiones bloqueadas están esperando con un tipo de espera relacionado sin bloqueo. También es interesante que SPID 93 está intentando colocar un XLOCK en una tabla totalmente ajena a la tabla seleccionada desde 64.
Pixelated

Respuestas:

6

Anteriormente supuse que SQL Server solo informaría una sesión de bloqueo en la columna block_session_id, si las sesiones bloqueadas esperaban un bloqueo lógico y no otra cosa como a PAGELATCH_*.

Está utilizando el sp_WhoIsActiveprocedimiento de Adam Machanic , no una instalación de SQL Server incorporada. El procedimiento de Adam informa todas las causas 'interesantes' de bloqueo, no solo el bloqueo de bloqueo. La información subyacente proviene de varias fuentes, incluidos sysprocesses , sys.dm_exec_requests y sys.dm_os_waiting_tasks .

Una tarea puede esperar otras cosas además de una cerradura. Es posible que, por ejemplo, pueda adquirir un bloqueo exclusivo en una fila de una página, pero aún así tenga que esperar para adquirir un bloqueo de página exclusivo (porque otras tareas han bloqueado la misma página en un modo incompatible).

En su ejemplo, los PAGELATCH_EXpestillos de página exclusivos se encuentran en páginas de datos o índice normales, no en páginas PFS, GAM, SGAM, DCM o BCM, como se indica con el (*) al final de wait_info .

Puede encontrar la documentación (entradas de blog) sp_WhoIsActive aquí .

Paul White 9
fuente