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

Développement SQL Server Discussion :

Dernière utilisation d'une table


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Par défaut Dernière utilisation d'une table
    Bonjour,

    j'ai une base avec presque 5000 tables qui a été construite pendant plus de 10 ans. Malheureusement une grande partie ne sont plus utilisées mais je ne sais pas les identifier pour faire du ménage.

    Est ce qu'il existe une méthode fiable pour identifier les tables non accédées en SELECT/INSERT/UPDATE/DELETE ?

    J'ai trouvé la colonne last_user_update de la table dm_db_index_usage_stats mais ca semble ne prendre en compte que les UPDATE, DELETE et INSERT ? ce qui est déjà pas mal !

    Comment identifier des tables qui ne sont utilisées qu'en SELECT ? est ce que la date de dernière utilisation de la table peut être trouvée ?


    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Le moyen le plus efficace :
    Renommer la table (voire la supprimer si on est sûr de la sauvegarde) et attendre les retours des utilisateurs / applications.
    Si personne ne réagit, c'est que la table n'est plus utilisée.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    On peut aussi analyser les dépendances grâce au catalogue relationnel.

    Les dates de dernières mises à jour ne sont évidemment pas un critère suffisant, je pense notamment aux tables de typologies (codes devises, code pays, codes langues...) qui sont rarement mises à jour, mais pour autant souvent utilisées.
    L'utilisation des index n'est pas non plus un critère suffisant, les tables de quelques lignes (typologies aussi, mais pas seulement) pouvant faire l'objet de table scan.
    Et enfin, certaines tables ne sont peut être utilisées que par des traitements annuels ou à la demande.

    Donc la prudence s'impose.

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 963
    Par défaut
    Citation Envoyé par Darkcristal Voir le message
    J'ai trouvé la colonne last_user_update de la table dm_db_index_usage_stats mais ca semble ne prendre en compte que les UPDATE, DELETE et INSERT ? ce qui est déjà pas mal !
    Comment identifier des tables qui ne sont utilisées qu'en SELECT ? est ce que la date de dernière utilisation de la table peut être trouvée ?
    Bonjour, la doc est ici : https://learn.microsoft.com/fr-fr/sq...l-server-ver16

    Il est vrai qu'il n'y a rien de specifique à propos des SELECT
    Pour autant "scan", "lookup", et "seek" sont aussi utilisés lors des lectures

    LA question reste : est-ce que toutes les tables sont cluster ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    SCAN, LOOKUP, SEEK sont utilisés aussi bien par les SELECT que INSERT, UPDATE DELETE... La requête suivante va donner les accès les plus récents :

    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
    WITH 
    T0 AS
    (
    SELECT object_id, 
           COALESCE(MAX(LEAST(last_user_seek, last_user_scan, last_user_lookup)),
    	   (SELECT sqlserver_start_time FROM sys.dm_os_sys_info)) AS LAST_ACCESS   
    FROM   sys.dm_db_index_usage_stats
    GROUP  BY object_id
    )
    SELECT s.name AS TABLE_SCHEMA, o.name AS TABLE_NAME, o.type_desc AS TABLE_TYPE, 
           LAST_ACCESS
    FROM   T0  
           JOIN sys.objects AS o
    	      ON T0.object_id = o.object_id
    	   JOIN sys.schemas AS s
    	      ON o.schema_id = s.schema_id;
    Mais ATTENTION : ce sont des statistiques depuis le redémarrage du serveur. une table peut n'être utilisée qu'une fois par moi, voir par an !!!

    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/ * * * * *

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Mais ATTENTION : ce sont des statistiques depuis le redémarrage du serveur. une table peut n'être utilisée qu'une fois par moi, voir par an !!!
    Une fois par moi(s) et une fois par toi, chacun son tour
    Plus sérieusement, comme je l'indiquai plus haut, le souci est que certaines requêtes font du tablescan et donc sans passer par des index : cas des tables très peu volumineuses par exemple ou d'index non discriminants.
    En ce cas, consulter la table dm_db_index_usage_stats n'est d'aucun secours.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ...
    Plus sérieusement, comme je l'indiquai plus haut, le souci est que certaines requêtes font du tablescan et donc sans passer par des index : cas des tables très peu volumineuses par exemple ou d'index non discriminants.
    En ce cas, consulter la table dm_db_index_usage_stats n'est d'aucun secours.
    Si car SQL Server considère qu'une table est un index. Donc même si la table n'est pas organisée en clustered, elle sera utilisée en HEAP et l'index d'id 0 c'est la table en HEAP...

    Donc, oui, cette vue rassemble tout...

    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/ * * * * *

Discussions similaires

  1. Pb avec l'utilisation d'une table de jointure
    Par cissou06 dans le forum Ruby on Rails
    Réponses: 19
    Dernier message: 14/03/2008, 11h40
  2. [BO 6.5] Utilisation d'une table sans jointure ?
    Par NKC78 dans le forum Deski
    Réponses: 7
    Dernier message: 22/11/2007, 11h38
  3. Réponses: 17
    Dernier message: 12/04/2007, 13h54
  4. conception et utilisation d'une table
    Par lkryss dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 29/06/2006, 11h14
  5. recherche utilisation d'une table
    Par xmanu dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 09h09

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