sp_tran_locks : les verrous décodés
Par Arian Papillon le lundi 1 mai 2017, 13:09 - Lien permanent
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