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 :

Nombre de requête effectué sur une table [2008]


Sujet :

Administration SQL Server

  1. #1
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut Nombre de requête effectué sur une table
    Bonjour,

    Dans le but de regarder dans ma base MSSQL les tables qui sont les plus utilisées et celles qui ne le sont pas, je voudrais récupérer pour une table le nombre de requête effectué sur celle-ci.

    Je vais lire sys.dm_exec_query_stats pour récupérer le nombre d'exécution et je fais une jointure avec sys.dm_exec_sql_text pour avoir le texte de la requête et ainsi vérifier que la table est bien présente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT name
    	,ISNULL((select SUM(execution_count) from sys.dm_exec_query_stats
    CROSS APPLY sys.dm_exec_sql_text(sys.dm_exec_query_stats.plan_handle)
    where sys.dm_exec_sql_text.text LIKE '%'+sys.tables.name+'%' collate French_ci_as),0) AS NB_EXECUTION
    FROM sys.tables
    Est-ce que ça vous parait correcte ?

    Merci
    Aucune aide par MP, utilisez le forum.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Tu peux pointer sur les indicateurs index (user seek ,user_scans ,user_lookups) pour s'avoir quel sont les tables les plus utilisées dans votre instance
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    SET NOCOUNT ON 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    GO 
     
    DECLARE  @schema_name sysname = 'dbo' 
      , @table_or_view_name sysname --= 'maTable' -- si NULL, étudie tous les index de toutes les table du schéma 
      , @index_name sysname = NULL -- si NULL, étudie tous les index de la table 
      , @separator varchar(2) = ', ' 
    ---------------------------------------------------------------------------------------------------------------------- 
    SELECT    DISTINCT S.name + '.' + O.name AS schema_table_name 
        , I.name AS index_name 
        , PS.row_count 
        , I.type_desc 
        , LEFT(KC.key_column_list, LEN(KC.key_column_list) - 2) AS key_column_list 
        , LEFT(KCI.included_key_column_list, LEN(KCI.included_key_column_list) - 1) AS included_key_column_list 
        , REPLACE(REPLACE(REPLACE(REPLACE(I.filter_definition, '[', ''), ']', ''), '(', ''), ')', '') AS filter_definition 
        , PS.used_page_count AS pages_count 
        , STATS_DATE(O.object_id, I.index_id) AS last_stat_update 
        , IUS.user_seeks 
        , IUS.user_scans 
        , IUS.user_lookups 
        , (IUS.user_seeks + IUS.user_scans + IUS.user_lookups) AS total_user_searches 
        , IUS.last_user_seek 
        , IUS.last_user_scan  
        , IUS.last_user_lookup 
        , LS.max_last_search_date 
        , PS.used_page_count / 8 AS index_size_kb 
    FROM    sys.schemas AS S 
    INNER JOIN  sys.objects AS O 
          ON S.schema_id = O.schema_id 
    INNER JOIN  sys.indexes AS I  
          ON O.object_id = I.object_id 
    INNER JOIN  sys.index_columns AS IC 
          ON IC.object_id = I.object_id 
          AND IC.index_id = I.index_id 
    INNER JOIN  sys.columns AS C 
          ON IC.object_id = C.object_id 
          AND IC.column_id = C.column_id 
    LEFT JOIN  sys.dm_db_index_usage_stats AS IUS 
          ON IUS.object_id = I.object_id 
          AND IUS.index_id = I.index_id 
          AND IUS.database_id = DB_ID() 
    INNER JOIN  sys.dm_db_partition_stats AS PS 
          ON PS.object_id = I.object_id 
          AND PS.index_id = I.index_id 
    CROSS APPLY  ( 
          SELECT    CS.name + @separator 
          FROM    sys.columns AS CS 
          INNER JOIN  sys.index_columns AS ICS 
                ON CS.object_id = ICS.object_id 
                AND CS.column_id = ICS.column_id 
          WHERE    IC.object_id = ICS.object_id 
          AND    IC.index_id = ICS.index_id 
          AND    ICS.is_included_column = 0 
          ORDER BY  ICS.index_column_id 
          FOR XML PATH ('') 
        ) AS KC (key_column_list) 
    OUTER APPLY  ( 
          SELECT    CSI.name + @separator 
          FROM    sys.columns AS CSI 
          INNER JOIN  sys.index_columns AS ICSI 
                ON CSI.object_id = ICSI.object_id 
                AND CSI.column_id = ICSI.column_id 
          WHERE    IC.object_id = ICSI.object_id 
          AND    IC.index_id = ICSI.index_id 
          AND    ICSI.is_included_column = 1 
          ORDER BY  ICSI.index_column_id 
          FOR XML PATH ('') 
        ) AS KCI (included_key_column_list) 
    OUTER APPLY  ( 
          SELECT  MAX(M.last_search_date) 
          FROM  ( 
                SELECT  LU_USK.last_user_seek 
                FROM  sys.dm_db_index_usage_stats AS LU_USK 
                WHERE  IUS.database_id = LU_USK.database_id 
                AND  IUS.object_id = LU_USK.object_id 
                AND  IUS.index_id = LU_USK.index_id 
              UNION ALL 
                SELECT  LU_USC.last_user_scan 
                FROM  sys.dm_db_index_usage_stats AS LU_USC 
                WHERE  IUS.database_id = LU_USC.database_id 
                AND  IUS.object_id = LU_USC.object_id 
                AND  IUS.index_id = LU_USC.index_id 
              UNION ALL 
                SELECT  LU_LK.last_user_lookup 
                FROM  sys.dm_db_index_usage_stats AS LU_LK 
                WHERE  IUS.database_id = LU_LK.database_id 
                AND  IUS.object_id = LU_LK.object_id 
                AND  IUS.index_id = LU_LK.index_id 
            ) AS M (last_search_date) 
        ) AS LS (max_last_search_date) 
    WHERE    (@schema_name IS NULL OR S.name = @schema_name) 
    AND    (@table_or_view_name IS NULL OR O.name = @table_or_view_name) 
    AND    (@index_name IS NULL OR I.name = @index_name) 
    ORDER BY  I.type_desc

  3. #3
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Pas mal, le nombre c'est depuis quand ? le démarrage de l'instance ?
    Aucune aide par MP, utilisez le forum.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    oui depuis la dernière date du démarrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select create_date from
    sys.databases
    where name='tempdb'

  5. #5
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Nickel, en me basant sur ce que tu as fais, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select sys.tables.name
    ,ISNULL(sys.dm_db_index_usage_stats.user_seeks + sys.dm_db_index_usage_stats.user_scans + sys.dm_db_index_usage_stats.user_lookups,0) AS total_user_searches
    from sys.tables
    left outer join sys.indexes on sys.indexes.object_id = sys.tables.object_id
    	and sys.indexes.is_primary_key = 1
    LEFT JOIN  sys.dm_db_index_usage_stats
          ON sys.dm_db_index_usage_stats.object_id = sys.indexes.object_id 
          AND sys.dm_db_index_usage_stats.index_id = sys.indexes.index_id 
          AND sys.dm_db_index_usage_stats.database_id = DB_ID() 
    order by 1
    C'est un bon indicateur, merci pour ton aide.
    Aucune aide par MP, utilisez le forum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/05/2009, 15h56
  2. Problème de requête Access sur une table Oracle
    Par Poulki dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 31/01/2008, 17h57
  3. Historisation des modifications effectuées sur une table SQL
    Par Drooxy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/10/2007, 14h29
  4. [Nombre maximum de lignes sur une table.]
    Par tesla dans le forum Oracle
    Réponses: 4
    Dernier message: 20/02/2007, 14h40
  5. Réponses: 4
    Dernier message: 27/12/2006, 22h53

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