Beaucoup de DBA connaissent la fameuse procédure stockée système “Sp_Who”. En allant plus loin, on peut même utiliser sp_Who2, certes non documentée mais tout aussi efficace pour trouver des locks potentiels.
Je viens de mettre la main sur un petit bijou, une procédure stockée bien charnue, écrite par Mr Adam Machanic, MVP Sql Server. Il s’agit d’une procédure stockée nommé sp_WhoIsActive, et permet de bien mieux appréhender les problèmes de locks et de process actifs au sein de votre serveur SQL Server.
Un petit exemple d’utilisation du système :
Supposons une procédure stockée qui, transactionnellement, n’est pas terminée :
use adventureworks
go
begin tran
update production.product
set name = name
go
Le résultat d’un Sp_Who2 donne :
Bon, soit, c’est déjà pas mal, mais on s’y perd un peu !
Voici le résultat de l’éxécution de la procédure sp_WhoIsActive :
(Note : J’ai inclus quelques options, je vous laisse voir le post de l’auteur pour connaitre l’immensité des possibilités
)
exec sp_whoisactive
@get_transaction_info = 1,
@GET_PLANS =1,
@output_column_list = '[login_name],[dd hh:mm:ss.mss],[sql_text],[reads],[writes],
[context_switches],[physical_io],[wait_info],[blocking_session_id],
[tempdb_writes],[tran_log_writes],[query_plan],[session_id]';
Et voilà le résultat :
Voilà, on a de sacrés informations pertinentes. La durée du lock actif, la requête sql en cours d’éxécutions , le Session ID (SPID), le plan d’éxécution etc ….
Bref, un must have pour une maintenance active de votre base de données
Je vous rappelle l’adresse du post de Adam Machanic :