Заблокированные сеансы, ожидающие с типами ожидания PAGELATCH_ *?

9

Отредактировано: почему отчеты о сеансах блокируются, но ожидают PAGELATCH_*, а не LCK_M_связаны с типами ожидания?

Ранее я предполагал, что SQL-сервер будет сообщать о блокирующих сеансах только в столбце blocking_session_Id. Если заблокированные сеансы ожидали логической блокировки, а не чего-либо еще, такого как PAGELATCH_*.

введите описание изображения здесь

Pixelated
источник
Похоже, многие параллельные сеансы вставляют данные в таблицу. Можете ли вы опубликовать структуру таблицы вместе с индексами?
Кин Шах
@Kin таблица начинается с SPID 69, 82 и 84 и имеет кластеризованный индекс, определенный с помощью свойства IDENTITY (1,1), так что это может быть случай последней вставки страницы, но на этом этапе меня больше интересует почему заблокированные сеансы ожидают с типом ожидания, не связанным с блокировкой. Также интересно, что SPID 93 пытается поместить XLOCK на совершенно не связанный стол с таблицей, из которой выбирается 64.
Pixelated

Ответы:

6

Ранее я предполагал, что SQL Server будет сообщать о блокирующем сеансе только в столбце 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 здесь .

Пол Уайт 9
источник