DBAtlas · Атлас эксплуатации баз данных

Поиск цепочки блокировок

SQL ServerСессия

Команда

SELECT r.session_id            AS waiting_spid,
       r.blocking_session_id  AS blocking_spid,
       r.wait_type,
       r.wait_time / 1000.0   AS wait_sec,
       r.status, r.command,
       DB_NAME(r.database_id) AS db,
       t.text                 AS waiting_query
FROM   sys.dm_exec_requests r
  CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE  r.blocking_session_id <> 0
ORDER BY r.wait_time DESC;

-- To find the head (root) blocker of the chain, look for the SPID whose
-- own blocking_session_id is not set (it is not blocked itself).

Что делает

Выводит ожидающие сессии и блокирующие их сессии со временем ожидания и выполняемым запросом; делает цепочку блокировок наглядной.

Когда использовать

Для поиска источника конкуренции за блокировки при жалобах "приложение зависает / таймауты".

Внимание

Перед завершением корневого блокировщика (SPID, которого никто не блокирует, но который блокирует других) согласуйте это с владельцем бизнес-процесса. Только запрос; без риска.

Открыть в DBAtlas →

Связанные материалы