ブロッキング (ロック) チェーンを特定する
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) を強制終了する前に、業務オーナーに確認する。照会のみでリスクなし。