Comment afficher les requêtes exécutées dans SQL Server Management Studio?
Je suis nouveau dans SQL Server Management Studio et je me demande: existe-t-il un moyen de voir quelles requêtes ont été exécutées sur une base de données?
Dans le moniteur D'activité, il y a un rapport" requêtes coûteuses récentes " mais je suppose que ce ne sont pas toutes les requêtes puisque je ne vois pas celles que j'ai exécutées.
Je cours SQL Server Express 2008 v 10.0.1600.22.
8 réponses
Utilisez SQL Profiler et utilisez un filtre pour obtenir les requêtes les plus coûteuses.
Utilisez le moniteur D'activité. C'est la dernière barre d'outils dans la barre supérieure. Il vous montrera une liste de "requêtes coûteuses récentes". Vous pouvez double-cliquer pour voir le plan d'exécution, etc.
Si vous voulez voir les requêtes qui sont déjà exécutées, il n'y a pas de moyen par défaut pris en charge pour le faire. Il y a quelques solutions de contournement que vous pouvez essayer, mais ne vous attendez pas à trouver tous.
Vous ne pourrez pas voir les instructions SELECT à coup sûr, mais il existe un moyen de voir d'autres commandes DML et DDL en lisant le journal des transactions (en supposant que la base de données est en mode de récupération complète).
Vous pouvez le faire en utilisant les commandes DBCC LOG ou fn_dblog ou un lecteur de journal tiers comme ApexSQL Log (Notez cet outil livré avec un prix)
Maintenant, si vous prévoyez d'auditer des instructions qui vont être exécutées à l'avenir, vous pouvez utiliser SQL Profiler pour tout attraper.
Vous avez besoin D'un profileur SQL, qui s'exécute en dehors de SQL Management Studio. Si vous avez une version payante de SQL Server (comme l'édition développeur), il devrait être inclus dans cela comme un autre utilitaire.
Si vous utilisez une édition gratuite (SQL Express), ils ont des profils freeware que vous pouvez télécharger. J'ai utilisé le profileur D'AnjLab (disponible à http://sites.google.com/site/sqlprofiler), et cela semblait bien fonctionner.
SELECT * FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_exec_connections ec
ON es.session_id = ec.session_id
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) where es.session_id=65 under see text contain...
Si vous souhaitez que SSMS conserve un historique de requêtes, utilisez le module complémentaire SSMS Tool Pack .
Si vous souhaitez surveiller le serveur SQL pour les requêtes en cours d'exécution, utilisez SQL PRofiler comme d'autres l'ont déjà suggéré.
Exécutez la requête suivante depuis Management Studio sur un processus en cours:
DBCC inputbuffer( spid# )
Cela renverra le SQL en cours d'exécution sur la base de données pour le SPID fourni. Notez que vous avez besoin des autorisations appropriées pour exécuter cette commande.
C'est mieux que d'exécuter une trace car elle cible un SPID spécifique. Vous pouvez voir si elle est longue en fonction de son CPUTime et DiskIO.
Exemple pour obtenir les détails de SPID 64:
DBCC inputbuffer(64)
Requête plus claire, ciblant les requêtes SQL de Studio est:
SELECT text FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_exec_connections ec
ON es.session_id = ec.session_id
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle)
where program_name like '%Query'