IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Comment trouver les dernières requêtes SQL exécutées


Sujet :

Administration SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Points : 80
    Points
    80
    Par défaut Comment trouver les dernières requêtes SQL exécutées
    Bonjour,
    j'aimerais savoir s'il y a un moyen pour afficher les dernières requêtes SQL exécutés sur SQL SERVER...
    j'utilise le Management Studio [Toutes les versions ]

    Merci bcp de m'aider

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Non car ce genre d'événement n'est pas historisé par défaut sur SQL Server.

    Vous pouvez cependant l'implémenter selon différentes méthodes existantes avec SQL Server.

    ++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    Non car ce genre d'événement n'est pas historisé par défaut sur SQL Server.

    Vous pouvez cependant l'implémenter selon différentes méthodes existantes avec SQL Server.

    ++
    Re Bonjour,
    Si, j'ai trouvé un moyen pour le faire : sur Management Studio>Concepteur de tables>Générer un script de modification ...
    mais c'est limité seulement aux requêtes exécutées à partir de Management Studio ...

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Et alors Mike, on oublie le Profiler et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT		QS.creation_time Creation,
    		QS.last_execution_time LastExec,
    		QS.plan_generation_num NbComp,
    		QS.execution_count NbExec, 
    		OBJECT_NAME(SQL.objectid) Procedures,
    		SUBSTRING
    		(
    			SQL.text,
    			QS.statement_start_offset / 2 + 1,
    			(
    				CASE
    					WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), SQL.text)) * 2 
    					ELSE QS.statement_end_offset 
    				END - QS.statement_start_offset
    			) / 2 + 1
    		) AS Instruction
    FROM sys.dm_exec_query_stats QS 
    CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) SQL
    @++

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Oui il faut donc implémenter une trace profiler pour cela ... ou alors j'ai peut etre loupé qqch ou je suis fatigué ...

    Concernant la DMV sys.dm_exec_query_stats celle-ci ne garantit pas forcement de voir les dernières requêtes exécutées (il faut voir bien entendu ce qu'on appelle les dernières requêtes ...)

    La BOL

    Renvoie les statistiques sur les performances des agrégats pour les plans de requêtes mis en cache. La vue contient une ligne par plan de requêtes ; la durée de vie de la ligne est liée au plan lui-même. Lorsqu'un plan est supprimé du cache, la ligne correspondante est éliminée de cette vue.
    ++

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    historique des 50 dernières requetes. Source :
    Documentation en ligne de Microsoft SQL Server 2008
    © 2008 Microsoft Corporation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TOP 50 total_worker_time/execution_count AS [Avg CPU Time], 
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY total_worker_time/execution_count DESC;
    A+
    Etienne ZINZINDOHOUE
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Citation Envoyé par Mikedavem
    je suis fatigué ...
    ça a l'air ...

    Citation Envoyé par Mikedavem
    La BOL

    Renvoie les statistiques sur les performances des agrégats pour les plans de requêtes mis en cache. La vue contient une ligne par plan de requêtes ; la durée de vie de la ligne est liée au plan lui-même. Lorsqu'un plan est supprimé du cache, la ligne correspondante est éliminée de cette vue.
    Normalement une requête qui vient d'être exécutée est forcément compilée puis stockée dans le cache de plan (dans le cas présent, peu importe pour combien de temps )

    @++

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    historique des 50 dernières requetes.
    Non je ne suis pas d'accord car ce n'est pas assez précis ... car la requête est un classement des 50 requêtes les plus consommatrices par exécution

    Normalement une requête qui vient d'être exécutée est forcément compilée puis stockée dans le cache de plan (dans le cas présent, peu importe pour combien de temps )
    Bon tu vas dire que je pousse le bouchon loin mais rien ne garantit que quelqu'un ne fasse pas un RESET des statistiques , d'une pression mémoire qui éradique certaines de tes plans compilés etc ... d'une option changée qui te supprime le plan en cache .. il y a pas mal de paramètres qui sont suceptibles de supprimer un plan en cache ..

    Bon évidemment y'a quand même de grandes chances de retrouver le 50 dernières requêtes ... mais je ne trouve pas que cela garantisse à 100% l'information :-)


    Concernant le profiler raffraichit moi la mémoire alors (pour une implémentation par défaut dans SQL Server) ...

    ++

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    Par défaut
    et aussi les dernières requêtes de chaque session....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT session_id, Q.*
    FROM sys.dm_exec_connections AS C
         CROSS APPLY  sys.dm_exec_sql_text (C.most_recent_sql_handle) AS Q
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Non je ne suis pas d'accord car ce n'est pas assez précis ... car la requête est un classement des 50 requêtes les plus consommatrices par exécution
    ++
    Oui et Non

    Oui si on garde le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY total_worker_time/execution_count  DESC
    Non, parce que qu'on peut avoir les 50 dernières requêtes
    en tenant compte de la date/heure d'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY creation_time DESC
    Conclusion : Pour avoir les 50 dernières requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT TOP 50 creation_time,
    total_worker_time/execution_count AS [Avg CPU Time], 
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY creation_time DESC;
    A+
    Etienne ZINZINDOHOUE
    Etienne ZINZINDOHOUE
    Billets-Articles

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Information
    Bonjour,
    Déjà merci pour ce code T-SQL qui m'a beaucoup aidé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TOP 50 creation_time,
    total_worker_time/execution_count AS [Avg CPU Time], 
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY creation_time DESC;
    Je voudrais savoir s'il y a avait un moyen de faire une jointure avec la session de l'utilisateur. Car je n'arrive pas a trouver le champ spid sur le résultat de votre code T-SQL.
    Ci-après les élements que je souhaiterais joindre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select spid, login_time, hostname, program_name, nt_domain, nt_username, loginame
    from master..sysprocesses 
    where dbid = db_id(coalesce('MA BASE',db_name())) and spid <> @@spid

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par bossattac Voir le message
    Bonjour,
    Déjà merci pour ce code T-SQL qui m'a beaucoup aidé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TOP 50 creation_time,
    total_worker_time/execution_count AS [Avg CPU Time], 
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY creation_time DESC;
    Je voudrais savoir s'il y a avait un moyen de faire une jointure avec la session de l'utilisateur. Car je n'arrive pas a trouver le champ spid sur le résultat de votre code T-SQL.
    Ci-après les élements que je souhaiterais joindre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select spid, login_time, hostname, program_name, nt_domain, nt_username, loginame
    from master..sysprocesses 
    where dbid = db_id(coalesce('MA BASE',db_name())) and spid <> @@spid

    spid = session_id. Il ne faut plus utiliser sysprocesses, la vue est obsolète. Il faut utiliser sys.dm_exec_sessions, sys.dm_exec_connections et sys.dm_exec_requests.
    David B.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Yahuuuu,

    Merci les gars vous m'avez sauvé une quasi matinée de travail!!

    Grâce à vos propositions j'ai pu récupérer le code d'une requête sur laquelle j'ai beaucoup travaillé mais pour laquelle je n'avais pas encore créer de vue! Bien sûr c'est le moment où Management Studio a décidé de planter!

    Donc MERCI!

    Julien

  14. #14
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour vous avez réussi à faire la jointure avec la session id svp ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2013, 17h39
  2. [IB5.5] comment trouver les indexes
    Par inconu dans le forum InterBase
    Réponses: 3
    Dernier message: 06/10/2005, 09h45
  3. Comment effacer les Doublons en SQL
    Par LeBigornot dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/05/2005, 11h22
  4. Voir les dernières requête Oracle
    Par newchurch dans le forum Oracle
    Réponses: 4
    Dernier message: 12/04/2005, 00h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo