web-dev-qa-db-fra.com

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 car je ne vois pas celles que j'ai exécutées.

J'exécute SQL Server Express 2008 v 10.0.1600.22.

27
bsh152s

Utilisez SQL Profiler et utilisez un filtre pour obtenir les requêtes les plus chères.

19
Benjamin Ortuzar

Utilisez le moniteur d'activité. Il s'agit de la dernière barre d'outils de la barre supérieure. Il vous montrera une liste de "requêtes coûteuses récentes". Vous pouvez double-cliquer dessus pour voir le plan d'exécution, etc.

17
John Saunders

Si vous souhaitez voir les requêtes déjà exécutées, il n'existe aucun moyen par défaut pris en charge pour ce faire. Vous pouvez essayer certaines solutions de contournement, mais ne vous attendez pas à tout trouver.

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 journaux tiers comme ApexSQL Log (notez que l'outil a 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.

15
Dwoolk

Vous avez besoin d'un profileur SQL, qui s'exécute réellement en dehors de SQL Management Studio. Si vous avez une version payante de SQL Server (comme l'édition développeur), elle doit être incluse dans celle-ci comme un autre utilitaire.

Si vous utilisez une édition gratuite (SQL Express), ils ont des profils gratuits que vous pouvez télécharger. J'ai utilisé le profileur d'AnjLab (disponible sur http://sites.google.com/site/sqlprofiler ), et cela semblait bien fonctionner.

10
Mike Mooney

Exécutez la requête suivante à partir de Management Studio sur un processus en cours d'exécution:

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 s'il fonctionne longtemps en fonction de son CPUTime et de DiskIO.

Exemple pour obtenir des détails sur SPID 64:

DBCC inputbuffer(64)
4
Shez
     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...
4
arnav

Si vous souhaitez que SSMS conserve un historique des requêtes, utilisez le SSMS Tool Pack add on .

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é.

3
Remus Rusanu

Requête plus claire, le ciblage des requêtes SQL 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'
3
zhrist