web-dev-qa-db-fra.com

Trouver toutes les requêtes exécutées récemment sur une base de données

[Je suis un programmeur T-SQL de niveau débutant]
[.. et j'espère que je suis sur le bon site d'échange de pile]

Je voudrais obtenir une liste de toutes les requêtes que j'ai exécutées (au moins, celles que j'ai exécutées aujourd'hui depuis le matin). Je dois faire un rapport sur les temps d'exécution des requêtes.

La recherche en ligne ne m'a pas fourni beaucoup d'informations utiles. La seule requête que j'ai trouvée en ligne qui semblait assez proche est

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Cette requête a renvoyé des résultats étranges (dont la plupart étaient un groupe de sprocs). De plus, tous ces résultats montrent des requêtes exécutées depuis aujourd'hui après-midi (j'ai besoin de requêtes du matin).

Je n'ai rien trouvé dans les questions précédentes (si une question similaire a déjà été posée, veuillez me l'indiquer).

J'ai vu quelques suggestions concernant SQL Profiler, mais je suppose que le profileur ne m'aiderait que si j'ai déjà commencé la trace (corrigez-moi si je me trompe).

Quelqu'un peut-il me suggérer la marche à suivre pour obtenir une liste de toutes les requêtes qui ont été exécutées dans la base de données depuis le matin (y compris les temps d'exécution des requêtes).

[Il serait utile (pas obligatoire) si je peux également obtenir le nom d'utilisateur de l'utilisateur qui a exécuté la requête]

21
Prashanth Tilleti

Cette requête a renvoyé des résultats étranges (dont la plupart étaient un groupe de sprocs). De plus, tous ces résultats montrent des requêtes exécutées depuis aujourd'hui après-midi (j'ai besoin de requêtes du matin).

En effet, vous recherchez dans le cache de procédures et les plans utilisés pour la matinée peuvent ne plus y vivre (en raison de la pression sur la mémoire, du redémarrage du serveur/de l'instance, de l'effacement manuel du cache de proc, etc.).

La vraie façon d'obtenir les requêtes exécutées sur une instance (ou plus spécifiquement une base de données) serait de créer une trace SQL ou une session d'événements étendus. Correctement créés, l'un ou l'autre vous donnera les informations que vous recherchez.

Si vous recherchez des statistiques d'exécution de ce matin et seulement ce matin (c'est-à-dire que la configuration des implémentations de surveillance susmentionnées en tant que tâche proactive et à faire la prochaine fois n'est pas suffisante), alors à moins que cela n'ait déjà été créé, il n'y aura pas façon nativement pour obtenir ces informations.

Pour référence future, commencez par une trace SQL qui capture l'événement SQL: StmtCompleted . Dans XE, ce serait le sql_statement_completed un événement.

À mon avis, au lieu de poursuivre votre recherche de restes de statistiques d'exécution des requêtes, je commencerais à consacrer du temps à trouver comment réexécuter la charge de travail que vous essayez de mesurer. Mais cette fois avant cela, configurez le suivi/suivi approprié.

12
Thomas Stringer