SELECT sqltext.TEXT,
req.session_id,
d.name,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.databases d, sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
WHERE d.database_id = req.database_id
On peut y voir qu’il y a trois requêtes en cours qui utilisent beaucoup de ressource CPU. La valeur total_elapsed_time est en millisecondes. Ceci veut dire que la requête roule depuis plus de 27 heures.
Lorsque je diagnostique ce genre de problème, j’aime bien demander à l’utilisateur ce qu’il est en train de faire dans le système. Afin de trouver l'utilisateur qui exécute les session_id 56, 100 et 102, il suffit de faire la correlation en utilisant la requête suivante :
SELECT cast(context_info as varchar(128)) AS ci,*
FROM sys.dm_exec_sessions
WHERE program_name like '%Dynamics%'
Dans ce cas, l’utilisateur est mrees et ses session ID dans AX est 186 et 201.
Je voulais valider l’information via la fenêtre Online Users de AX, mais l’utilisateur mrees avec les sessions 186 et 201 ne s’y trouvaient pas. Peu importe, je communique avec l’utilisateur et celui-ci me dit qu’il a fermé sa session depuis au moins 24 heures. J’en déduis que les trois requêtes en cours d'exécution sont bloquées dans le système et je décide tout simplement de les tuer.
KILL 56
KILL 100
Kill 102
Suite à l'opération, les processus de l'utilisateur mrees sont apparus dans la fenêtre Online Users avec le statut Ending - Blocked. Deux minutes plus tard, les performances du serveur SQL sont redevenue à la normal.
Source: http://technet.microsoft.com/EN-US/library/hh699644.aspx