Preskočiť na obsah
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.

kto-koho-blokuje-blocking-chain.sql 24 riadkov · T-SQL
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;
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`).