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 Oracle Discussion :

Compteur sur l'utilisation des index


Sujet :

Administration Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut Compteur sur l'utilisation des index
    Bonjour !
    La base (9i en test et 8.1.7 en prod pour le moment) sur laquelle je travaille a été développée en externe, et je voudrais voir quels index sont utilisés, mais surtout, en faire le compte

    j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Alter index NOMINDEX  monitoring usage ;
    sur chacun de mes index. (et apres la table object_usage est mise à jour quand un index est utilisé)

    Pour le compte du nb d'utilistion des index, le pb est soulevé plusieurs fois dans le forum, mais pas de solutions

    Donc j'en cherche une :p
    J'ai essayé d'appliquer un trigger sur la table sys.object_usage sur l'update de la colonne FLAGS. Mais on ne peut pas appliquer de triggers sur une table system (pas taper suis débutant :p).

    Je pense Activer/désactiver le Monitoring Usage sur les index toutes les X min/heures.... (et ainsi remettre FLAGS à 0)... mais ca me parait pas génial


    quelqu'un a t'il une meilleure idée ? une autre solution, sachant que ce qui m'interesse c'est de compter les index


    D'avance merci :p

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Une façon pragmatique de lister les indexes est d'interroger la vue DBA_INDEXES.

    Concernant le monitoring, il va de soi que vous devez avoir l'assurance que l'intégralité des ordres SQL de votre application a bien été exécutée pendant la période de traçage.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par SheikYerbouti
    Une façon pragmatique de lister les indexes est d'interroger la vue DBA_INDEXES.
    Oups
    je me suis mal exprimé dans ma dernière phrase je voulais écrire :
    sachant que ce qui m'interesse c'est de compter le nb d'utilisation des index
    Sinon, ce que je comptais faire :
    1- creer une table perso qui contiendra 2 colonnes : le nom des index et une autre colonne : Compteur (à 0 au départ)
    2- lancer le monitoring sur tous les index pendant un certain temps (pas encore déterminé).
    3- à la fin de laps de temps, parcourir ma table sys.object_usage sur la colonne FLAGS (1 ligne avec la valeur 1, correspond à un index utilisé au moins une fois (et c'est ce Au Moins qui me gène)).
    4- stopper le monitoring
    5- mettre à jour la table perso sur les index avec la valeur 1 dans la colonen FLAGS de la table object_usage (par un incrément de la colonne Compteur).
    6- relancer le monitoring (donc mise à 0 des colonnes FLAGS de la table object_usage)
    7- retour à l'étape 3 et ainsi de suite


    2 gros pb :
    - dans mon fameux laps de temps, je sais pas si un index a été utilisé x fois, la colonne FLAGS de la table object_usage se met à jour à la 1ère utilisation de l'index
    - à mon avis spas top pour les perf de tracer de cette façon :p

    voila, j'espère avoir été plus clair, donc si qlq un a une meilleure solution à me communiquer...

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Quel est le réel interêt intrinsèque de savoir COMBIEN de fois un index est utilisé ?

    Le fait de savoir s'il est ou n'est pas utilisé ne suffit pas ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    si sur une période de trace d'une semaine, mon index est utilisé qu'une seule fois, peut etre est il inutile (je dis peut etre :p)

    Mais peut être que je me trompe c'est juste une information que je voulais connaitre

    Mais vous avez raison, déjà de savoir qu'un index n'est pas du tout utilisé c'est pas mal

  6. #6
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Pourquoi as tu besoin de savoir combien de fois un index est utilisé?
    L'essentiel a mon avis c'est surtout de savoir ceux qui ne sont pas utilisés et dans ce cas la vue V$OBJECT_USAGE rempli bien son role.
    Un index s'il est utilisé, meme rarement (et la tout depend des requetes, leurs frequence...) est justifé non ?

    Ok on s'est croise, au moins on est d'accord avec sheik...

  7. #7
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    bonjour,
    puisqu'on parle de ça je saisis la balle au bond...

    est-ce que l'usage du monitoring via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table/index monitoring usage;
    est lourd en terme de performances ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    lourd non, mais forcément impactant... comme les traces

  9. #9
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Tout ce qu'on peut faire avec le MONITORING USAGE, c'est dire : j'ai utilisé cet index au moins une fois, je le garde, sinon je le vire.
    Ce faisant, on risque de conserver des index dont l'utilisation est très marginale, et qui impactent négativement les performances.

    Si par exemple on a 3 index sur la table des factures, un sur le code client, un sur la date et un sur le montant, et qu'on se rend compte qu'en une semaine, on utilisé l'index sur le code client 1000 fois et celui sur le montant 3 fois, on peut en conclure que l'utilisation de l'index sur le montant est exceptionnelle, et qu'il vaut peut-être mieux le supprimer.

    Pour moi, il y a un véritable besoin d'une information quantitative sur l'usage des index, que le MONITORING USAGE est effectivement incapable de fournir.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  10. #10
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    A mon humble avis, il est préférable de faire une première passe afin de déterminer les indexes qui ne sont JAMAIS utilisés.

    Et une fois le "gros oeuvre" fait, on peut envisager les finitions avec l'aspect quantitatif de l'utilisation de tel ou tel index !

  11. #11
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Attention,

    Je me place dans le cas d'Oracle 8i, sous 9i il doit y avoir le même genre de pb mais dans une moindre mesure.

    Certains indexes peuvent avoir été posés non pour optimiser des jointures mais pour éviter de bloquer des sessions.

    Quand on a une table enfant qui référence une table parent et que la clé étrangère n'est pas indexée dans la table enfant car on ne fait jamais de jointure entre ces deux tables (par ex. on a une table de nomenclature SEXE(sexe_id, sexe_lib)), dans ce cas la suppression d'une ligne dans la table parent ou la modification de la clé primaire dans la table parent pose un verrou (je ne sais plus de quel type) sur la table enfant, ce qui fait qu'une session peut se retrouver bloquée voire deux sessions faire un deadlock.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create table sexe(sexe_id char(1), sexe_lib varchar2(20));
    insert into sexe values('M', 'Masculin');
    insert into sexe values('F', 'Feminin');
    insert into sexe values('?', 'Inconnu');
    alter table sexe add constraint pk_sexe primary key (sexe_id);
    create table pers (nom varchar2(20), sexe_id char(1) references sexe);
    insert into pers values('ALPHA', 'M');
    insert into pers values('BETA', 'F');
    commit;
    Maintenant dans la première session, on supprime une ligne de la table parent qui est SEXE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete sexe where sexe_id = '?';
    Et dans une deuxième session on essaie de modifier une ligne de la table enfant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update PERS set nom = nom || '_';
    La deuxième session est bloquée.

    Sous Oracle 8i le verrou sur la table enfant dure jusqu'à la fin de la transaction tandis que sous Oracle 9i il dure le temps de l'update/delete sur la table parent.

    Moralité : même si un index n'est pas utilisé, ca ne veut pas dire qu'il est inutile.

    Laly.

    Cf.
    http://osi.oracle.com/~tkyte/unindex/index.html

    [/code]
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  12. #12
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Pour information, le monitoring d'index semble à première vue une fonctionnalité intéressante à mettre en oeuvre pour savoir si un index a été utilisé ou non.

    Par contre, méfiance. En effet, il faut savoir qu'il n'y a pas que l'utilisation d'un index au sein d'une requête SQL qui bascule le flag USED à YES dans la vue V$OBJECT_USAGE.

    Il y a aussi toutes les opérations de "maintenance", comme déplacer un index, le reconstruire ou lancer les statistiques via le package DBMS_STATS...

    Donc pour utiliser le monitoring, essayer de le faire sur des plages où il n'y ait pas de telles opérations.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/09/2012, 22h46
  2. Utilisation des index sur tables à jeux de caractères différents
    Par globule71 dans le forum Administration
    Réponses: 0
    Dernier message: 11/07/2008, 10h28
  3. 3 précisions sur l'utilisation des "std::vector"
    Par Invité dans le forum SL & STL
    Réponses: 9
    Dernier message: 10/01/2006, 00h42
  4. Requête SELECT : limite d'utilisation des index
    Par DadaWeb dans le forum Requêtes
    Réponses: 7
    Dernier message: 07/12/2005, 22h24
  5. Utilisation des "indexs" ?
    Par vandeyy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/09/2004, 07h49

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