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 :

obligé de mettre +rule, pourquoi ?


Sujet :

Administration Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut obligé de mettre +rule, pourquoi ?
    Messieurs,

    quelque chose me trouble dans mes bases de données.

    Lorsque je retire le "/*+rule*/" de ma requete, cette dernière fait un full scan.

    POurriez vous me dire pourquoi suis je obligé de laisser ou de mettre "/*+rule*/" pour utiliser l'index.

    Pourquoi oracle de lui meme n'utiliset'il pas l'index??

    Merci d'avance pour vos réponse.

  2. #2
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    en RULE, oracle prends toujours l'index s'il y en a un
    en CBO il voit en fonction des statistiques si c'est mieux ou non qu'un full scan.
    cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  3. #3
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Pourquoi Messieurs seulement ???



    Bon :
    quelle version exacte d'oracle 6.1.1.0 ??
    Quelle os ?

    Comment as tu calculé les stats ? et quand ?

    que donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sho parameter optimizer
    La base est OLTP ou DSS ou MIXTE ....


    Apres les histogrames., bind variable ......

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    sans le rule, il fait un full scan. J'ai donc un cout de 1370.

    avec le rule, il utilise l'index et je n'ai plus de valeur pour le cout. mais il utilise l'index.

    Pourquoi la CBO ne veut pas utiliser l'index ??

    ceci est une requete simple mais j'ai de requete bien plus compliqué avec des cout a 50 000 et il n'utilise toujours pas les index...

    Les statistiques sont pourtant bien lancé mais sur un echantillon de 10% de la table.

    Avec vous des conseils à me donner?

  5. #5
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par breizh76 Voir le message
    sans le rule, il fait un full scan. J'ai donc un cout de 1370.

    avec le rule, il utilise l'index et je n'ai plus de valeur pour le cout. mais il utilise l'index.

    Pourquoi la CBO ne veut pas utiliser l'index ??

    ceci est une requete simple mais j'ai de requete bien plus compliqué avec des cout a 50 000 et il n'utilise toujours pas les index...

    Les statistiques sont pourtant bien lancé mais sur un echantillon de 10% de la table.

    Avec vous des conseils à me donner?

    relis ce qui est au dessus si tu veux qu'on t'aide!!

    version oracle etc ....

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  6. #6
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    Autant pour moi,

    Messieurs, Mesdames, Mesdemoiselles

    Version d'oracle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    optimizer_dynamic_sampling           integer     1
    optimizer_features_enable            string      9.2.0
    optimizer_index_caching              integer     0
    optimizer_index_cost_adj             integer     100
    optimizer_max_permutations           integer     2000
    optimizer_mode                       string      CHOOSE
    Pour les histogrammes, j'en ai pour chaque colonne de la table.

    Pour la base de donnée elle est en mixte.

    merci

  7. #7
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Oui mais ce qui est important aussi c'est la version exacte au patch pres :
    9.2.0.?.?

    ==> Influence sur l'optimiseur et des bug ... corrigés ou non


    Quand as tu lancé les stats la derniere fois et comment ?

    quelle commande as tu lancé pour les stats

    anaylze ou dbms_stats

    Ceci pour vérifier si les stats de la table + les index sont a jour et existent!!

    Tu peux aussi nous montrer la requete et l'explain plan ...

    A quoi sert la requete pour batchs ou pour les users OLTP ?

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  8. #8
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    La première question à se poser, c'est est-ce que la requête est plus rapide avec l'index ?
    Un accès en full scan est souvent plus rapide si le prédicat n'est pas très selectif.
    Si tu ramènes un quart des enregistrements, le full scan n'est pas une mauvaise idée.
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    ça serait bien de voir la requête

  10. #10
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    La version exacte d'oracle est 9.2.0.5.0

    Les stats ont été lancé le 29/08/2009 à 18h. C'est à dire, tous les samedi.

    Par contre le script executant les analyses etait ré-activé la semaine derniere, les seuls statistiques qui ont été exécuté sont donc ceux du samedi 29.

    La table fait 858350 lignes et l'echantillon fait 85835

    par contre la table est en "NOMONITORING"

    La commande utilisé est DBMS_STATS.GATHER_SCHEMA_STATS.
    pour ce qui est de la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
    ag_seque_686
        FROM f_agenda
        WHERE ag_code = 'RE_AD'
          AND ag_ptrvalprin = :b1
          AND NVL(ag_lib_car02, '-') != 'CL'
    et pour le plan d'execution:

  11. #11
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par breizh76 Voir le message
    La table fait 858350 lignes et l'echantillon fait 85835
    Si au final tu lis 10% des enregistrements, il est bien possible que le full scan soit plus performant (il fait des lectures multibloc, et ne lit qu'une seule foit chaque bloc)
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    Non je pense que quand il parle d'échantillon il parle de l'échantillon de l'ANALYZE.

    Envoie la définition de ton index.
    Envoie le résultat des lignes dans USER_TABLES et dans USEr_INDEXES

  13. #13
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    voici le plan d'execution lorsque je met /*+rule*/:

    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
     
    EXPLAIN PLAN FOR
    SELECT /*+rule*/
    ag_seque_686
    FROM f_agenda
    WHERE ag_code = 'RE_AD'
    AND ag_ptrvalprin = :b1
    AND NVL(ag_lib_car02, '-') != 'CL'
    Explained
     
    SELECT * FROM TABLE(dbms_xplan.display)
    PLAN_TABLE_OUTPUT                                                               
    --------------------------------------------------------------------------------
     
    ----------------------------------------------------------------------------    
    | Id  | Operation                   |  Name        | Rows  | Bytes | Cost  |    
    ----------------------------------------------------------------------------    
    |   0 | SELECT STATEMENT            |              |       |       |       |    
    |*  1 |  TABLE ACCESS BY INDEX ROWID| F_AGENDA     |       |       |       |    
    |*  2 |   INDEX RANGE SCAN          | IND_AG_CODE  |       |       |       |    
    ----------------------------------------------------------------------------    
     
    Predicate Information (identified by operation id):                             
    ---------------------------------------------------                             
     
       1 - filter(NVL("F_AGENDA"."AG_LIB_CAR02",'-')<>'CL' AND                      
                  "F_AGENDA"."AG_PTRVALPRIN"=:Z)                                    
       2 - access("F_AGENDA"."AG_CODE"='RE_AD')
    voici le plan d'execution sans le /*+rule*/:

    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
     
    EXPLAIN PLAN FOR
    SELECT
    ag_seque_686
    FROM f_agenda
    WHERE ag_code = 'RE_AD'
    AND ag_ptrvalprin = :b1
    AND NVL(ag_lib_car02, '-') != 'CL'
    Explained
     
    SELECT * FROM TABLE(dbms_xplan.display)
    PLAN_TABLE_OUTPUT                                                               
    --------------------------------------------------------------------------------
     
    --------------------------------------------------------------------            
    | Id  | Operation            |  Name       | Rows  | Bytes | Cost  |            
    --------------------------------------------------------------------            
    |   0 | SELECT STATEMENT     |             |     1 |    19 |  1370 |            
    |*  1 |  TABLE ACCESS FULL   | F_AGENDA    |     1 |    19 |  1370 |            
    --------------------------------------------------------------------            
     
    Predicate Information (identified by operation id):                             
    ---------------------------------------------------                             
     
       1 - filter("F_AGENDA"."AG_CODE"='RE_AD' AND                                  
                  "F_AGENDA"."AG_PTRVALPRIN"=:Z AND                                 
                  NVL("F_AGENDA"."AG_LIB_CAR02",'-')<>'CL')
    De plus, le 10% de ligne corresponde à l'analyse et non au nombre de ligne retourné par la commande si dessus.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    La requête te retourne réellement une ligne ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    envoie nous le résultat des requêtes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select num_rows,blocks,empty_blocks,last_analyzed from user_tab_statistics where table_name = 'F_AGENDA';
     
    select  index_name, blevel, leaf_blocks, distinct_keys,num_rows, clustering_factor, last_analyzed  
    from user_ind_statistics
    where table_name = 'F_AGENDA';

  16. #16
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    pour la user_table, j'obtiens:

    PCT_FREE=10
    AVG_ROW_LEN=217
    AVG_SPACE=2917
    EMPTY_BLOCK=8
    SAMPLE_SIZE=85835
    LAST_ANALYSE=29/08/2009 18:03

    Pour la user_indexes, j'ai plusieur index, quel parametre vous intéresse ??

  17. #17
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    Je n'ai pas de table user_tab_statistics, ni user_ind_statistics !!!

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    tu ne dois pas être en 10g alors

    execute les requêtes mais en mettant USER_TABLES et USER_INDEXES à la place.

    Envoie le résultat de toutes les colonnes que j'ai précisé STP

  19. #19
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    C'est dommage tout ca ,
    si on se relisait un peu certaines remarques pertinentes ne seraient pas passées inapercues :

    on est en 9I donc ces vues sus-citées ne sauraient etre disponibles:
    user_tab_statistics ....


    Par contre un post a demandé : le temps !!

    Ce qui est important , c'est le temps de reponse

    Combien de temps ca prend avec le rule
    combien de temps sans le rule !

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  20. #20
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    C'est vrai le temps à son importance quand même.

    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
    SQL> SELECT /*+rule*/
      2  ag_seque_686
      3  FROM f_agenda
      4  WHERE ag_code = 'RE_AD'
      5  AND ag_ptrvalprin = 40777590
      6  AND NVL(ag_lib_car02, '-') != 'CL';
     
    no rows selected
     
    Elapsed: 00:00:02.22
    SQL> SELECT
      2  ag_seque_686
      3  FROM f_agenda
      4  WHERE ag_code = 'RE_AD'
      5  AND ag_ptrvalprin = 40777590
      6  AND NVL(ag_lib_car02, '-') != 'CL';
     
    no rows selected
     
    Elapsed: 00:00:23.10

Discussions similaires

  1. Obliger de mettre une photo sur un CV ?
    Par longbeach dans le forum SSII
    Réponses: 9
    Dernier message: 21/09/2009, 14h14
  2. [AJAX] Y a-t-il une obligation a mettre le code AJAX dans le head ?
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/05/2008, 00h11
  3. [Séquence] Est-on obligé de mettre l’activation sur un diagramme de séquence ?
    Par Ramajb dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 03/10/2007, 08h46
  4. Oblige de mettre 2 fois le meme code
    Par jcp66 dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/09/2007, 11h57

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