sp_tran_locks : les verrous décodés

Pourquoi les vues de management dynamique sont-elles parfois aussi peu conviviales ?

Prenons la dmv sys.dm_tran_locks : pourquoi ne nous fournit-elle pas en clair le nom de la base, le nom de l''objet et de l'index verrouillé, le login de l'utilisateur, etc... Certes, on y arrive bien avec quelques jointures, mais toutes ne sont pas si simples à écrire à la volée.

Je vous propose aujourd'hui une version actualisée de ma procédure sp_tran_locks, pour avoir toutes les informations utiles d'un coup.

Déjà publiée il y a deux ans sur ce même site, cette nouvelle version de la procédure stockée a été améliorée...

Quelques informations sur la procédure stockée sp_tran_locks dont vous trouverez le script plus bas :

Les informations de la dmv sys.dm_tran_locks sont décodées et les colonnes suivantes sont renvoyées :

  • resource_type : ressource verrouillée (DATABASE, PAGE, RID, KEY, ...)
  • request_session_id : spid
  • DatabaseName : nom de la base en clair
  • SchemaName : schéma de l'objet verrouillé
  • ObjectName : nom de l'objet verrouillé
  • IndexName : nom de l'index verrouillé
  • IndexType : type d'index (HEAP, CLUSTERED, NONCLUSTERED)
  • PartitionNumber : numéro de partition
  • request_mode : mode de verrouillage (S, X, IX, U, ...)
  • request_status : GRANT ou WAIT
  • blocking_session_id : spid de la session bloquante si verrou en WAIT
  • host_name : nom d'ordinateur
  • program_name : nom du programme issu de la chaine de connexion
  • login_name : login
  • LastRequestingText : dernière requête dans le buffer
  • Localize : requête SELECT (à récupérer par copier/coller) pour localiser et lire la page ou la ligne verrouillée (à utiliser avec précaution, scan de table garanti)

Quelques paramètres pour filtrer :

    @spid INT = NULL
  , @type NVARCHAR(60) = NULL : (DATABASE, PAGE, KEY, RID, ...)
  , @mode NVARCHAR(60) = NULL  : (S, U, X, IX)
  , @status NVARCHAR(60) = NULL : (GRANT, WAIT)
  , @Database sysname = NULL : (AdventureWorks)
  , @BlockedOnly BIT = 0 : 1 pour les processus bloqués seulement

Téléchargez le script ici : sp_tran_locks.sql