Отредактировано: почему отчеты о сеансах блокируются, но ожидают PAGELATCH_*
, а не LCK_M_
связаны с типами ожидания?
Ранее я предполагал, что SQL-сервер будет сообщать о блокирующих сеансах только в столбце blocking_session_Id. Если заблокированные сеансы ожидали логической блокировки, а не чего-либо еще, такого как PAGELATCH_*
.
Ответы:
Вы используете
sp_WhoIsActive
процедуру Адама Маханика , а не встроенную функцию SQL Server. Процедура Адама сообщает обо всех «интересных» причинах блокировки, а не только о блокировке блокировки. Основная информация поступает из различных источников, включая sysprocesses , sys.dm_exec_requests и sys.dm_os_waiting_tasks .Задача может ждать других вещей, кроме блокировки. Может быть, например, возможность получить эксклюзивную блокировку строки на странице, но затем все еще придется ждать, чтобы получить эксклюзивную блокировку страницы (поскольку другие задачи заблокировали ту же страницу в несовместимом режиме).
В вашем примере
PAGELATCH_EX
эксклюзивные защелки страниц находятся на обычных страницах данных или индексов, а не на страницах PFS, GAM, SGAM, DCM или BCM, как указано (*) в конце wait_info .Вы можете найти документацию (записи в блогах)
sp_WhoIsActive
здесь .источник