DBAtlas · Atlas d'exploitation des bases de données

Trouver la chaîne de blocage (verrous)

SQL ServerSession

Commande

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).

Ce que fait la commande

Liste les sessions en attente et les sessions qui les bloquent, avec le temps d'attente et la requête exécutée ; rend la chaîne de verrous visible.

Quand l'utiliser

Pour trouver l'origine de la contention de verrous lors de plaintes du type "l'application se fige / expire".

Attention

Confirmez avec le responsable métier avant de tuer le bloqueur racine (le SPID qui n'est bloqué par personne mais en bloque d'autres). Requête seule ; aucun risque.

Ouvrir dans DBAtlas →

Voir aussi