Ak je `head_blocker` stále ten istý session, pozri si `sys.dm_exec_sessions` – často je to otvorená transakcia z aplikácie (`open_transaction_count > 0`).
Skript
Kto koho blokuje (blocking chain)
Živý prehľad blokujúcich a blokovaných session z DMV – s označením head blockera a presným statementom.
Parametre skriptu doplň a kopíruj hotový skript
/* Kto koho blokuje – živý pohľad vrátane hlavy reťaze (head blocker) */
WITH blocked AS (
SELECT r.session_id,
r.blocking_session_id,
r.wait_type,
r.wait_time / 1000.0 AS wait_s,
r.wait_resource,
DB_NAME(r.database_id) AS database_name,
SUBSTRING(t.text, (r.statement_start_offset / 2) + 1,
((CASE r.statement_end_offset WHEN -1 THEN DATALENGTH(t.text)
ELSE r.statement_end_offset END - r.statement_start_offset) / 2) + 1) AS running_statement
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.blocking_session_id <> 0
)
SELECT b.*,
s.login_name,
s.host_name,
s.program_name,
CASE WHEN NOT EXISTS (SELECT 1 FROM blocked x WHERE x.session_id = b.blocking_session_id)
THEN 'HEAD BLOCKER: ' + CAST(b.blocking_session_id AS varchar(10)) END AS head_blocker
FROM blocked AS b
JOIN sys.dm_exec_sessions AS s ON s.session_id = b.session_id
ORDER BY b.wait_s DESC;