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_*
.
Respuestas:
Está utilizando el
sp_WhoIsActive
procedimiento 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_EX
pestillos 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í .fuente