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

Oracle Discussion :

Tuning de requète


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Tuning de requète
    Salut j'ai cette requète
    CODE
    SELECT /*+
    INDEX (TFP_CONTRAT_PIVOT_B)
    INDEX (TFP_INDIVIDU_PIVOT_B)
    INDEX (T_C_DT_EFFET_CNT_TMP)
    INDEX (T_COUVERTURE_MAJ)
    */
    TFP_CONTRAT_PIVOT_B.DT_CTR_EFF,
    TFP_CONTRAT_PIVOT_B.RF_CTR_REF,
    TFP_CONTRAT_PIVOT_B.DT_CTR_EFF_CLO,
    TFP_CONTRAT_PIVOT_B.CD_LOP,
    TFP_CONTRAT_PIVOT_B.DT_CTR_REF,
    TFP_CONTRAT_PIVOT_B.NO_UGT,
    TFP_CONTRAT_PIVOT_B.DT_ELP_DEB,
    TFP_CONTRAT_PIVOT_B.CD_TY_PRE,
    TFP_CONTRAT_PIVOT_B.CD_ELP_FRA,
    TFP_CONTRAT_PIVOT_B.DT_ELP_FIN,
    TFP_CONTRAT_PIVOT_B.CD_ELP_MOT_FIN,
    TFP_CONTRAT_PIVOT_B.NO_ELP_JOUR_PO,
    TFP_CONTRAT_PIVOT_B.CD_CTR_COL,
    TFP_CONTRAT_PIVOT_B.CD_GP_ASS,
    TFP_CONTRAT_PIVOT_B.CRIT_ART_TVL,
    TFP_CONTRAT_PIVOT_B.CRIT_RFS_MED,
    TFP_CONTRAT_PIVOT_B.CRIT_EXO_TKT,
    TFP_CONTRAT_PIVOT_B.CRIT_ADH_TAR,
    TFP_CONTRAT_PIVOT_B.NO_CTR_ANETO,
    T_COUVERTURE_MAJ.CD_TIN,
    TFP_INDIVIDU_PIVOT_B.NO_IND,
    TFP_INDIVIDU_PIVOT_B.MATRICULE_SS_INDIVIDU,
    TFP_INDIVIDU_PIVOT_B.NO_IND_CLE,
    T_C_DT_EFFET_CNT_TMP.NO_CON,
    T_C_DT_EFFET_CNT_TMP.NUMSEQ,
    T_C_DT_EFFET_CNT_TMP.DT_EFFET,
    T_C_DT_EFFET_CNT_TMP.IND_CTR_CJT
    FROM TFP_CONTRAT_PIVOT_B,
    TFP_INDIVIDU_PIVOT_B,
    T_C_DT_EFFET_CNT_TMP,
    T_COUVERTURE_MAJ
    WHERE TFP_CONTRAT_PIVOT_B.NO_CTR = T_C_DT_EFFET_CNT_TMP.NO_CON
    AND T_COUVERTURE_MAJ.DEBUT_DE_DROIT = T_C_DT_EFFET_CNT_TMP .DT_EFFET
    AND T_COUVERTURE_MAJ.NO_CTR =TFP_CONTRAT_PIVOT_B.NO_CTR
    AND T_COUVERTURE_MAJ.NO_IND =TFP_INDIVIDU_PIVOT_B.NO_IND
    AND T_COUVERTURE_MAJ.NO_CTR = T_C_DT_EFFET_CNT_TMP.NO_CON
    /CODE
    Le problème étant que je n'arrive pas à la faire descendre en dessous de 11064 de coût. Le plan d'exécution est le suivant:
    CODE
    Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop

    SELECT STATEMENT Optimizer Mode=CHOOSE 1 11064
    NESTED LOOPS 1 202 11064
    NESTED LOOPS 1 174 11063
    HASH JOIN 78 3 K 11051
    TABLE ACCESS BY INDEX ROWID TRANSCO.T_C_DT_EFFET_CNT_TMP 212 K 4 M 235
    INDEX FULL SCAN TRANSCO.T_C_DT_EFFET_CNT_TMP_IDX1 1 480
    INDEX FULL SCAN TRANSCO.SYS_C007061 5 M 140 M 49542
    TABLE ACCESS BY INDEX ROWID TRANSCO.TFP_CONTRAT_PIVOT_B 1 124 1
    INDEX UNIQUE SCAN TRANSCO.PK_TFP_CONTRAT_B 1
    TABLE ACCESS BY INDEX ROWID TRANSCO.TFP_INDIVIDU_PIVOT_B 1 28 1
    INDEX UNIQUE SCAN TRANSCO.PK_TFP_INDIVIDU_B 1

    /CODE
    La version d'Oracle est 9i r 2.0.7.0
    PS Désolé pour les balises CODE mais je ne sais pas comment les mettre et je suis également preneur de cette information.

    Vincent

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Bonjour,
    Le cout que tu nous donne n'est pas quelque chose d'important en premier lieu.
    c'est juste une estimation d'oracle.
    Ma requete prends 3 minutes, c'est déjà plus parlant.
    Ou mieux encore, fait un tkprof dessus qui nous dira le cout exact de ta requete

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Points : 166
    Points
    166
    Par défaut
    Il ne faut pas oublier qu'il n'y a pas de formule du style

    temps d'exécution = cout * ...

    Le cout est une estimation relative du travail à faire. En contexte multi utilisateur ou lot, le temps peut varier. De plus, un latch ou un lock va faire augmentater le temps d'exécution sans augmenter le cout de la requete.

    Il ne faut pas oublier non plus que le cout d'une requête est à son plus bas SANS HINTS. Le plan d'exécution avec le moindre cout sera toujours celui sans hints. ORACLE prévoit un plan et si tu ne l'aimes pas, tu peux mettre des hints. Cependant, cela va contre le plan qu'il pensait optimal dès le départ, donc tu obtiens un cout plus élevé.

    Personnellement, je m'assurerais que mon environnement a des statistiques à jours avant toute tentative d'optimisation de sql avec/sans hints... Un explain plan d'une requete sans hints de temps en temps est bon aussi pour voir le sens de l'evolution de la base dans le temps. Si plus de stats sont prises, il se peut que le cout change.

Discussions similaires

  1. Tuning d'une requête SQL en 11g
    Par zidane2012 dans le forum Oracle
    Réponses: 9
    Dernier message: 06/12/2012, 10h45
  2. Demande d'avis sur tutoriel tuning de requêtes
    Par jeepnc dans le forum Contribuez
    Réponses: 27
    Dernier message: 04/12/2009, 10h43
  3. Tuning requêtes sql oracle
    Par Mehdilis dans le forum Oracle
    Réponses: 2
    Dernier message: 13/06/2007, 13h32
  4. Tuning requête et indexes sur fonction
    Par Mehdilis dans le forum Oracle
    Réponses: 3
    Dernier message: 26/02/2007, 13h36

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