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 :

[9.2] Explain Plan


Sujet :

Oracle

  1. #1
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut [9.2] Explain Plan
    Bonjour à tous,
    Avant tout, je suis débutant Oracle.
    Je voudrais optimiser une requête, et pour cela, j'ai cru comprendre qu'il fallait utiliser l'explain plan. Sauf que je ne comprend pas trop le résultat de celui-ci.
    Comment faut-il interpréter cela ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT STATEMENT Optimizer=CHOOSE (Cost=3339 Card=1 Bytes=78 )
      SORT (ORDER BY) (Cost=3339 Card=1 Bytes=78 )
        NESTED LOOPS (Cost=3337 Card=1 Bytes=78 )
          TABLE ACCESS (FULL) OF DETAIL_PAYMENT (Cost=3243 Card=94 Bytes=4136)
          TABLE ACCESS (BY INDEX ROWID) OF TRANSACTION (Cost=1 Card=1 Bytes=34)
            INDEX (UNIQUE SCAN) OF PK_TRANSACTION (UNIQUE)
    D'avance merci.
    nako.

  2. #2
    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
    regarde le COST qui représente le coùt de l'opération. Ici :

    Accés à TRANSACTION via l'index uniwue PK_TRANSACTION.
    Accés à DETAIL_PAYMENT en FULL SCAN (parcours complet de la table -> le pire des accés)
    NESTED LOOP -> constitution du jeu de données à retourner
    SORT -> Tri de type ORDER BY


    Ici, manifestement, il manque un index sur DETAIL_PAYMENT

  3. #3
    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
    Citation Envoyé par Fred_D
    Ici, manifestement, il manque un index sur DETAIL_PAYMENT
    Pas forcément, ça dépend de la requête. Le principe du NESTED LOOP est de scanner une table en FULL SCAN et de boucler dessus pour joindre les autres...
    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

  4. #4
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Citation Envoyé par Fred_D
    Ici, manifestement, il manque un index sur DETAIL_PAYMENT
    D'accord, c'est parce que l'accès est full scan sur la table DETAIL_PAYMENT que l'on peut dire ça ?
    Merci
    a+

  5. #5
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Alors, je mets ma requête :

    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
    SELECT dp.credit_card_payment_numcard, 
    	   tx.transaction_date, 
    	   TO_CHAR(tx.transaction_date, 'DD/MM/YYYY HH24:MI:SS'), 
    	   tx.TICKET_SERIAL_NUMBER, 
    	   dp.EQUIPMENT_ID, 
    	   dp.DETAIL_PAYT_AMOUNT 
    FROM DETAIL_PAYMENT dp, 
    	 TRANSACTION tx 
    WHERE SUBSTR(dp.CREDIT_CARD_PAYMENT_NUMCARD, INSTR(dp.CREDIT_CARD_PAYMENT_NUMCARD, '=', 1, 1) - 4, 4) = '9535' AND 
    	  dp.DETAIL_PAYT_AMOUNT = '8' AND 
    	  dp.EQUIPMENT_ID = tx.EQUIPMENT_ID AND 
    	  dp.POST_ID = tx.POST_ID AND 
    	  dp.POST_BEGIN = tx.POST_BEGIN AND 
    	  dp.TRANSACTION_ID = tx.TRANSACTION_ID 
    ORDER BY tx.transaction_date DESC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT STATEMENT Optimizer=CHOOSE (Cost=3339 Card=1 Bytes=78 )
      SORT (ORDER BY) (Cost=3339 Card=1 Bytes=78 )
        NESTED LOOPS (Cost=3337 Card=1 Bytes=78 )
          TABLE ACCESS (FULL) OF DETAIL_PAYMENT (Cost=3243 Card=94 Bytes=4136)
          TABLE ACCESS (BY INDEX ROWID) OF TRANSACTION (Cost=1 Card=1 Bytes=34)
            INDEX (UNIQUE SCAN) OF PK_TRANSACTION (UNIQUE)
    merci

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    WHERE SUBSTR(dp.CREDIT_CARD_PAYMENT_NUMCARD, INSTR(dp.CREDIT_CARD_PAYMENT_NUMCARD, '=', 1, 1) - 4, 4) = '9535' 
    ...
    Rien qu'avec cela, vous comprendrez l'utilisation du FULL SCAN.
    Même s'il existait un index sur la colonne CREDIT_CARD_PAYMENT_NUMCARD, il ne serait pas utilisé. (à moins qu'il ne s'agisse d'un index de fonction)
    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

  7. #7
    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
    Citation Envoyé par SheikYerbouti
    Pas forcément, ça dépend de la requête. Le principe du NESTED LOOP est de scanner une table en FULL SCAN et de boucler dessus pour joindre les autres...
    En effet, mais au regard du coût on peut imaginer que le FS n'est vraiment pas intéressant ici

    Ceci étant, tu montres parfaitement que l'optimisation est loin d'être automatique

    Nako essaye de créer un index sur DETAIL_PAYMENT avec la colonne : TRANSACTION_ID voir en ajoutant : POST_ID et EQUIPMENT_ID

  8. #8
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Ok, merci à tous les deux.
    les index que vous me dites sont déjà en place.
    En fait, c'était plus pour comprendre le résultat d'explain plan que pour réellement optimiser ma requête.
    Auriez-vous un lien qui explique cela ?

    J'ai trouvé ce tutoriel mais il est plutôt bref et il présuppose des bonnes bases d'administration que je n'ai pas.
    Merci

  9. #9
    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
    Rien de mieux que la doc Oracle

    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96533/optimops.htm#36236

    Si les indexes existent, tu peux essayer les hints, je te laisse faire la recherche qui va bien

  10. #10
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    O,, merci pour tout.
    Je vais potasser ça, et essayer de comprendre.
    Je met résolu.
    a+

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

Discussions similaires

  1. [Tuning] Importer un explain plan
    Par aline dans le forum Oracle
    Réponses: 2
    Dernier message: 26/07/2006, 11h23
  2. Explain Plan
    Par claralavraie dans le forum Oracle
    Réponses: 28
    Dernier message: 22/05/2006, 17h52
  3. Oracle9i explain plan for
    Par mohmanjdo dans le forum Oracle
    Réponses: 1
    Dernier message: 12/05/2006, 06h12
  4. TKPROF et Explain Plan
    Par kamalito dans le forum Oracle
    Réponses: 7
    Dernier message: 27/10/2005, 11h54
  5. Réponses: 13
    Dernier message: 23/06/2005, 10h56

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