Voici un petit script très utile pour déterminer les requêtes qui sont en train de tourner sur un serveur SQL Server.
En effet, les outils tels que le générateur de profils ou bien les évènements étendus permettent de capter le début ou la fin d’un traitement, mais ne permettent pas de lister les traitements en cours d’exécution.
Voici donc un petit script, très utile, présentant notamment le coût actuel de chaque traitement (consommation CPU, consommation I/O, …)
-- Liste des processus actifs -- Auteur : Jean-Nicolas BERGER (www.sqlserver.fr) select r.session_id, status, qt.text, substring(qt.text,r.statement_start_offset/2+1, (case when r.statement_end_offset <= r.statement_start_offset then len(convert(nvarchar(max),qt.text))*2 else r.statement_end_offset END - r.statement_start_offset)/2+1) AS query_text, qt.dbid, qt.objectid, r.cpu_time, r.total_elapsed_time, r.reads, r.writes, r.logical_reads, r.scheduler_id from sys.dm_exec_requests r cross apply sys.dm_exec_sql_text(sql_handle) as qt WHERE r.session_id>50 order by r.scheduler_id,r.status,r.session_id
Ce script permet notamment, pour certains blocs de code comme par exemple les procédures stockées, d’identifier au coeur du module l’instruction T-SQL exacte en cours d’exécution.
Sans aller chercher les gros outils tels que les rapports SSMS, on a déjà un aperçu très rapide de ce qui tourne…
Merci, super requête !
Thanks a lot JN for the website :)