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 :

Comparer des plan d'exécution


Sujet :

Oracle

  1. #1
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut Comparer des plan d'exécution
    Bonjour, je voudrai un peu d'aide sur la comparaison de deux plan d'exécution :

    Alors des deux plans sont issus de la même requette sauf la condition suivante :

    Plan 1 temps d'exécution 15 min
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare
    c_cod_EFF constant char(3) :='EFF'
    c_cod_PRV constant char(3) :='PRV'
     
    Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
    Plan 2 temps d'exécution 2 min
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare
    c_cod_EFF constant cp.cod_etat%type :='EFF'
    c_cod_PRV constant cp.cod_etat%type :='PRV'
     
    Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
    Le champs cp.cod_etat est de type varchar2(3)

    Je sais que lorsque une condition compare deux données qui ne sont pas du même DATATYPE
    ORACLE convertit toutes les données du champs en datatype de la variable et ensuite compare les valeurs.

    Dc le plan 1 qui compare des CHAR(3) avec un VARCHAR2(3) prend bcp plus de temps que le plan deux qui compare un
    VARCHAR2 avec un VARCHAR2 (dc pas besoin de conversion)

    : Voici les deux plan d'exécution, et je ne trouve pas où on peut voir qu'ORACLE mets plus de temps sur la PLAN 1 que le PLAN 2
    KK1 peut me dire quelle ligne est importante dans ces plan d'exécution ?

    Plan 1 temps d'exécution 15 min
    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
     
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
    SELECT STATEMENT Optimizer Mode=CHOOSE		1	 	170	 	      	             	 
    SORT ORDER BY		1	65	68	 	      	             	 
    FILTER		  	 	 	 	      	             	 
    TABLE ACCESS BY INDEX ROWID	ETOILE.AC_CONDPART_GLC	1	65	68	 	      	             	 
    INDEX RANGE SCAN	ETOILE.I_CONDPART_GLC_COD_PRODUIT	439	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    NESTED LOOPS		1	53	102	 	      	             	 
    TABLE ACCESS BY INDEX ROWID	ETOILE.AC_FACTUR	1	40	100	 	      	             	 
    INDEX RANGE SCAN	ETOILE.I_FACTUR_1	123	 	4	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    INDEX RANGE SCAN	ETOILE.PK_LIGNEDETAIL_FCT	1	13	3
    Plan 2 temps d'exécution 2 min
    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
     
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
     
    SELECT STATEMENT Optimizer Mode=CHOOSE		1	 	202	 	      	             	 
    SORT ORDER BY		1	65	202	 	      	             	 
    FILTER		  	 	 	 	      	             	 
    TABLE ACCESS BY INDEX ROWID	ETOILE.AC_CONDPART_GLC	1	65	201	 	      	             	 
    INDEX RANGE SCAN	ETOILE.I_CONDPART_GLC_COD_PRODUIT	1 K	 	6	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    FILTER		  	 	 	 	      	             	 
    NESTED LOOPS		1	53	102	 	      	             	 
    TABLE ACCESS BY INDEX ROWID	ETOILE.AC_FACTUR	1	40	100	 	      	             	 
    INDEX RANGE SCAN	ETOILE.I_FACTUR_1	123	 	4	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    TABLE ACCESS FULL	SYS.DUAL	82	 	3	 	      	             	 
    INDEX RANGE SCAN	ETOILE.PK_LIGNEDETAIL_FCT	1	13	3
    Merci de votre aide

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Je constate que tu as un FILTER de plus dans la requête rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE ACCESS FULL   SYS.DUAL   82       3                                
    FILTER                                                
    NESTED LOOPS      1   53   102
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    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 Re: Comparer des plan d'exécution
    Citation Envoyé par sygale
    Plan 1 temps d'exécution 15 min
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare
    c_cod_EFF constant char(3) :='EFF'
    c_cod_PRV constant char(3) :='PRV'
     
    Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
    Plan 2 temps d'exécution 2 min
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare
    c_cod_EFF constant cp.cod_etat%type :='EFF'
    c_cod_PRV constant cp.cod_etat%type :='PRV'
     
    Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
    il n'y a pas un problème de copier/coller ? Je ne vois pas de différence moi

  4. #4
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    c_cod_EFF constant char(3) :='EFF' et
    c_cod_EFF constant cp.cod_etat%type :='EFF'

    mais c'est pas evident, j'ai eu du mal moi aussi

  5. #5
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par nuke_y
    Je constate que tu as un FILTER de plus dans la requête rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE ACCESS FULL   SYS.DUAL   82       3                                
    FILTER                                                
    NESTED LOOPS      1   53   102
    Heu, peux tu être plus précis ?
    ce FILTER, c'est quoi exactement ?, car si c'était un index il y aurait le nom non ?

    KK1 aurait un lien interessant pour les explain plan ? les comprendres, les analyser ...

  6. #6
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Je n'en sais pas plus. Je constate juste que tu as 15 lignes dans le 1er et 16 lignes dans le 2e. Et c'est justement à partir de cette ligne supplémentaire que les coûts diffèrent...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  7. #7
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Ok, merci de l'honnêteté en tout cas.

    Je voudrais bien comprendre pourquoi en tout cas, je vais rechercher dans la doc. ou autre des explications sur la lecture des explain plan.

    merci en tout cas, c'est dingue une heure de perdu car j'ai pas vu une ligne, je fatigue, je fatigue !!

  8. #8
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    La doc. Oracle de EXPLAIN PLAN peut être trouvée dans le Performance Tuning Guide. Exemple pour la 10g: http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm#i23461.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/01/2015, 10h59
  2. Comparer 2 plans d'exécution sur 3 pages
    Par zidane2012 dans le forum Oracle
    Réponses: 1
    Dernier message: 20/03/2013, 17h54
  3. VBA Comparer des temps d'exécutions très courts
    Par pgz dans le forum Contribuez
    Réponses: 5
    Dernier message: 10/12/2008, 14h28
  4. Réponses: 4
    Dernier message: 06/06/2008, 20h22
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 23h37

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