web-dev-qa-db-fra.com

Comment trouver une requête longue avec l'ID de processus, le nom du processus, l'heure de connexion, l'utilisateur, l'heure de début et la durée?

Quelqu'un peut-il m'aider à trouver les détails ci-dessous pour une requête longue durée. ProcessID, nom du processus, base de données, hôte, utilisateur, heure de connexion au processus, heure de début et durée de la requête.

Je recherche une requête ou un SP qui me donne ces données.

24
user3598321

Comme indiqué, le meilleur outil est sp_whoIsActive par Adam Machanic . Il peut être utilisé de plusieurs manières, pour voir ce qui est en cours d'exécution au moment où vous lancez le script ou vous pouvez l'exécuter en boucle pour surveiller une action spécifique, comme les requêtes lentes par exemple.

Pour exécuter en boucle, jetez un œil ici: Comment enregistrer l'activité en utilisant sp_whoisactive dans une boucle Pour détecter les requêtes lentes: Comment utiliser sp_WhoIsActive pour rechercher des requêtes SQL Server lentes

Vous pouvez directement utiliser les DMV pour obtenir vos requêtes les plus lentes et agir à partir de là. Vérifiez requêtes de diagnostic de Glenn Berry .

Et enfin, vous pouvez utiliser cette requête pour trouver les requêtes les plus chronophages. Vous pouvez jouer avec dm_exec_query_stats pour ajouter plus de données ou vous joindre à d'autres pour obtenir plus d'informations. Sachez que les dmv sont vidés et actualisés à chaque redémarrage du serveur.

SELECT  creation_time 
        ,last_execution_time
        ,total_physical_reads
        ,total_logical_reads 
        ,total_logical_writes
        , execution_count
        , total_worker_time
        , total_elapsed_time
        , total_elapsed_time / execution_count avg_elapsed_time
        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
         ((CASE statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
          ELSE qs.statement_end_offset END
            - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;

[~ # ~] modifier [~ # ~]

Une nouvelle option est disponible depuis un certain temps déjà, First Reponder Kit . Est un ensemble de scripts, fournis gratuitement sous licence MIT par l'équipe BrentOzar, qui vous aideront dans diverses tâches, y compris celle demandée par l'OP. Principalement sp_BlitzFirst et sp_BlitzWho scripts pour ce cas.

40
Yaroslav

Je recommande fortement sp_whoisactive . C'est un SP tiers, mais peut vous dire tout ce que vous avez énuméré ci-dessus, et bien plus encore. C'est un outil incroyable à avoir dans votre arsenal.

10
Bob Pusateri