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. #21
    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 peux bidouiller ta requête pour qu'elle te retourne qqch et faire le même test?

    envoie également les résultats des select sur user_indexes et user_tables STP

  2. #22
    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
    apres avoir modifié la requete pour quel retourne un resultat, j'obtiens:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> SELECT
      2  ag_seque_686
      3  FROM f_agenda
      4  WHERE ag_code = 'RE_AD'
      5  AND ag_ptrvalprin = '66083040'
      6  AND NVL(ag_lib_car02, '-') != 'CL';
     
    AG_SEQUE_686
    ------------
         2608453
     
    Elapsed: 00:00:26.86

    et

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> select /*+rule*/
      2  ag_seque_686
      3  FROM f_agenda
      4  WHERE ag_code = 'RE_AD'
      5  AND ag_ptrvalprin = '66083040'
      6  AND NVL(ag_lib_car02, '-') != 'CL';
     
    AG_SEQUE_686
    ------------
         2608453
     
    Elapsed: 00:00:00.24

  3. #23
    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
    ton index est uniquement sur la colonne ag_code ?

    pour la nème fois peux tu retourner STP 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_tables WHERE table_name = 'F_AGENDA';
     
    SELECT  index_name, blevel, leaf_blocks, distinct_keys,num_rows, clustering_factor, last_analyzed  
    FROM user_indexes
    WHERE table_name = 'F_AGENDA';

  4. #24
    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
    que donne

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sho parameter cursor_sharing

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT blevel,leaf_blocks,last_analyzed,index_name FROM user_indexes WHERE table_name='LA_TABLE_EN_QUESTION'
    as tu l'ordre de creation de l'index IND_AG_CODE ?

    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

  5. #25
    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
    Désolé, je n'arrete pas d'etre intérompu, mais c'est bon j'ai reussi à vous envoyer le resultat de la requete ...
    Code sql : 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_tables WHERE table_name = 'F_AGENDA';
     
    NUM_ROWS     BLOCKS EMPTY_BLOCKS LAST_ANALYZED      
    -------- ---------- ------------ -------------------
      865025      14230            0 03/09/2009 12:14:22

    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
     
    SELECT  index_name, blevel, leaf_blocks, distinct_keys,num_rows, clustering_fact
    FROM user_indexes
    WHERE table_name = 'F_AGENDA';
     
    INDEX_NAME                     BLEVEL LEAF_BLOCKS DISTINCT_KEYS NUM_ROWS CLUSTER
    ------------------------------ ------ ----------- ------------- -------- -------
    IND_AG_CODE                                                                     
    IND_AG_CODE_CAR_LIB                                                             
    IND_AG_DOMAINE                                                                  
    IND_AG_IDENT_CLIENT                                                             
    IND_AG_PTRAPPID                                                                 
    IND_AG_PTRASSID                                                                 
    IND_AG_PTRCOID                                                                  
    IND_AG_PTRFGID                                                                  
    IND_AG_PTRINTID                                                                 
    IND_AG_PTRPOID                                                                  
    IND_AG_PTRPRMID                                                                 
    IND_AG_PTRSIID                                                                  
    IND_AG_PTRSORID                                                                 
    IND_AG_PTRVERID                                                                 
    IND_AG_PTR_COM                                                                  
    IND_AG_PTR_ENV                                                                  
    IND_AG_UTILI                                                                    
    PK_AG_SEQUE_686

  6. #26
    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
    le sho parameter cursor_sharing me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     show parameter cursor_sharing
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cursor_sharing                       string      EXACT
    Par contre, pour ce qui est de l'ordre de creation de l'index IND_AG_CODE, comment puis je savoir ??

  7. #27
    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
    Tu n'as pas de stats sur les index !!

    Quelle commande exacte est utilisée dans DBMS_STATS.GATHER_SCHEMA_STATS

    c'est le options qui comptent !!!!

    donc il faut lancer les stats sur la table et ses indexes ou au moins les indexes de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec dbms_stats.gather_index_stats('SCOTT','idx_test1');

    ... il y a plethore d'exemples ici

    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. #28
    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
    t'as pas de stats sur tes indexes.
    execute la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    analyze index  compute statistics IND_AG_CODE;
    puis execute de nouveau la requête sans le hint

  9. #29
    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
    sorry

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    analyze INDEX  IND_AG_CODE compute statistics
    sinon tu peux utiliser dbms_stats.GATHER_INDEX_STATS

  10. #30
    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
    J'ai bien des stats sur l'index IND_AG_CODE

    et la commande exécuté est la suivante:

    exec DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'$SCHEMA',estimate_percent=>10,cascade=>TRUE);

  11. #31
    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
    ba non t'avais pas de stats sinon t'aurais eu des valeurs dans USER_INDEXES

    recalcul les stats sur l'index et lance un explain plan sur ta requete sans le hint RULE

  12. #32
    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
    Je ne sais pas mais le resultat de la requete user_indexes dit le contraire .... au dessus

    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
     
    9> create table test1 (col1 varchar2(20),col2 number) ;
     
    Table created.
     
    9> create index idx_test1 on test1(nvl(col2,'-'));
     
    Index created.
     
    9> create index idx_test2 on test1(col2);
     
    Index created.
     
    9> SELECT blevel,leaf_blocks,last_analyzed,index_name FROM user_indexes WHERE table_name = 'TEST1';
     
     
        BLEVEL LEAF_BLOCKS LAST_ANAL INDEX_NAME
    ---------- ----------- --------- ------------------------------
                                     IDX_TEST2
                                     IDX_TEST1
     
    9> exec dbms_stats.gather_index_stats('SCOTT','idx_test1');
     
    PL/SQL procedure successfully completed.
     
     
     
    9> SELECT blevel,leaf_blocks,last_analyzed,index_name FROM user_indexes WHERE table_name = 'TEST1';
     
        BLEVEL LEAF_BLOCKS LAST_ANAL INDEX_NAME
    ---------- ----------- --------- ------------------------------
                                     IDX_TEST2
             0           0 03-SEP-09 IDX_TEST1
    Ici l'index qui n'a pas été analysé n'a pas d'info comme le tien !

    Donc autant lancer a nouveaux les stats !

    et tu verifieras par la requete idoine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT blevel,leaf_blocks,last_analyzed,index_name FROM user_indexes WHERE table_name = 'TEST1';

    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

  13. #33
    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
    Apres verification, j'ai bien des stats sur les index de ma table f_agenda.

    Code SQL : 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
     
    SELECT  index_name, blevel, leaf_blocks, distinct_keys,num_rows FROM user_indexe
    INDEX_NAME                     BLEVEL LEAF_BLOCKS DISTINCT_KEYS NUM_ROWS
    ------------------------------ ------ ----------- ------------- --------
    IND_AG_CODE                         2        1037            62   861195
    IND_AG_CODE_CAR_LIB                 2        1718         27544   873796
    IND_AG_DOMAINE                      1         835             4   861195
    IND_AG_IDENT_CLIENT                 1         518        213699   450202
    IND_AG_PTRAPPID                     0           0             0        0
    IND_AG_PTRASSID                     0           0             0        0
    IND_AG_PTRCOID                      1          93             3    94766
    IND_AG_PTRFGID                      1         797        261340   689489
    IND_AG_PTRINTID                     1         747            97   764917
    IND_AG_PTRPOID                      1         451        209014   390604
    IND_AG_PTRPRMID                     0           0             0        0
    IND_AG_PTRSIID                      1         341        145922   291694
    IND_AG_PTRSORID                     0           0             0        0
    IND_AG_PTRVERID                     0           0             0        0
    IND_AG_PTR_COM                      0           0             0        0
    IND_AG_PTR_ENV                      0           0             0        0
    IND_AG_UTILI                        2         949           820   857521
    PK_AG_SEQUE_686                     1         926        861386   861386

  14. #34
    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
    Dans le doute je re executé les requetes

    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
     
    SQL> set timing on
    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:05.66
    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:00.15
    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:01.27
    Il reste toujours plus long 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SELECT num_rows,blocks,empty_blocks,last_analyzed FROM user_tables WHERE table_n
    NUM_ROWS     BLOCKS EMPTY_BLOCKS LAST_ANALYZED      
    -------- ---------- ------------ -------------------
      858350      14230            8 29/08/2009 18:03:13
    1 row selected
     
     
    SELECT num_rows,blocks,empty_blocks,last_analyzed FROM user_tables WHERE table_n
    NUM_ROWS     BLOCKS EMPTY_BLOCKS LAST_ANALYZED      
    -------- ---------- ------------ -------------------
      858350      14230            8 29/08/2009 18:03:13
    1 row selected
     
     
    SELECT  index_name, blevel, leaf_blocks, distinct_keys,num_rows FROM user_indexe
    INDEX_NAME                     BLEVEL LEAF_BLOCKS DISTINCT_KEYS NUM_ROWS
    ------------------------------ ------ ----------- ------------- --------
    IND_AG_CODE                         2        1037            62   861195
    IND_AG_CODE_CAR_LIB                 2        1718         27544   873796
    IND_AG_DOMAINE                      1         835             4   861195
    IND_AG_IDENT_CLIENT                 1         518        213699   450202
    IND_AG_PTRAPPID                     0           0             0        0
    IND_AG_PTRASSID                     0           0             0        0
    IND_AG_PTRCOID                      1          93             3    94766
    IND_AG_PTRFGID                      1         797        261340   689489
    IND_AG_PTRINTID                     1         747            97   764917
    IND_AG_PTRPOID                      1         451        209014   390604
    IND_AG_PTRPRMID                     0           0             0        0
    IND_AG_PTRSIID                      1         341        145922   291694
    IND_AG_PTRSORID                     0           0             0        0
    IND_AG_PTRVERID                     0           0             0        0
    IND_AG_PTR_COM                      0           0             0        0
    IND_AG_PTR_ENV                      0           0             0        0
    IND_AG_UTILI                        2         949           820   857521
    PK_AG_SEQUE_686                     1         926        861386   861386
    18 rows selected

  15. #35
    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
    Apres avoir fait les stats des index

    Que donne explain plan d'une requete sans hint rule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    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';
    Parce que la tu as moins de 1 sec de diff de temps d'execution !

    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

  16. #36
    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
    pourquoi t'as pas mis le clustering_factor dans ta requête sur user_indexes ?

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