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

SQL Oracle Discussion :

Requête sur une vue et temps de réponse


Sujet :

SQL Oracle

  1. #21
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par Garuda Voir le message
    3 700 secondes = 1 heure !
    Pour info il avait écrit 3700 millisecondes au début !!!
    ~ Lola ~

  2. #22
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    bien oui je confirme ... Et le temps de réponse est mon soucis juste en ajoutant une condition dans ma clause "where " .... je comprend pas bien pourquoi

    Et c'est quoi : MATERIALIZED_VIEW

  3. #23
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 147
    Points
    26 147
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par beegood Voir le message
    bien oui je confirme ... Et le temps de réponse est mon soucis juste en ajoutant une condition dans ma clause "where " .... je comprend pas bien pourquoi

    Et c'est quoi : MATERIALIZED_VIEW
    Une vue matérialisée se comporte comme une table créée par le résultat d'une requête (typiquement celle de ta vue en fait). Il faut la rafraîchir pour avoir les derniers résultats (elle ne se met pas à jour automatiquement, comme une vue). L'avantage est de pouvoir la traiter presque comme une table, l'analyser, mettre des index etc.

    - Rajouter un champ dans avi_evaluation qui top si UPPER(intervenant_departement) contient la chaine FINANCE.

    - Changer avi_evaluation en vue matérialisée qui se comportera plus comme une table (possibilité d'analyser et de mettre des index, comme dit par Garuda)

    - Eventuellement rajouter un index sur le top pour mieux le brasser.
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  4. #24
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Arrêtez de résoudre tous les problèmes d'optimisation avec ces vue matérialisée assez intelligentes.

    Avez-vous déjà essayez de faire ce que Mohamed Houri vous a proposé ?

    Avez-vous compris ce qui se passe ?

    Sinon pourriez-vous dropper de votre schéma la vielle table plan_table qui ne sert à rien pour avoir quelques informations de plus dans l'explain plan ?

  5. #25
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    j'ai essayé les commandes décrites dans le message de Mohamed Houri sans trop comprendre le principe car je commence à atteindre les limites de mes compétences.

    J'ai comme résultat :
    User has no SELECT privilege on V$SESSION
    Comme je le dis je ne suis pas DBA de ma base cela doit venir de là je suppose ....

    Et je ne sais pas ce qu'est la table plan_table mentionnée ... visiblement elle existe bien au niveau de mon schéma , je ne sais pas d'ou elle sort et si je peux la dropper sans risque ?

    Merci pour votre aide....

  6. #26
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Tu te dis : "j'ajoute juste une clause restrictive, pourquoi ça prend plus de temps ?"

    Pour choisir le bon plan, l'optimiseur doit estimer l'impact de tes prédicats sur le nombre de lignes sorties.
    Le scénario probable : ta requête initiale était optimisée avec des hypothèses à peu près correctes, le prédicat ajouté dans la seconde à introduit un biais.

    Seulement sur une si grosse requête, il peut y avoir des effets boule de neige, et c'est très dur à comprendre.

    Ce que propose Mohammed avec son /*+ gather_plan_statistics*/, c'est de mettre face à face ce qui à été estimé, et ce qui se réalise vraiment.
    Là où il y a une différence, c'est sûrement là qu'il y a le problème..

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  7. #27
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Pour poursuivre .. je me suis décidé à dropper cette table table_plan.

    j'ai relancé la requete avec la commande EXPLAIN PLAN et voici le résultat :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    Plan hash value: 948162852
     
    -------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                                          | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
    -------------------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                                   |                    |     1 |  2225 |  1872   (3)| 00:00:23 |
    |*  1 |  FILTER                                            |                    |       |       |            |          |
    |   2 |   HASH GROUP BY                                    |                    |     1 |  2225 |  1872   (3)| 00:00:23 |
    |*  3 |    HASH JOIN                                       |                    |     1 |  2225 |  1871   (3)| 00:00:23 |
    |   4 |     VIEW                                           | AVI_EVAL_ELEVE     |     1 |  2188 |   523   (2)| 00:00:07 |
    |   5 |      HASH GROUP BY                                 |                    |     1 |   528 |   523   (2)| 00:00:07 |
    |   6 |       NESTED LOOPS OUTER                           |                    |     1 |   528 |   522   (2)| 00:00:07 |
    |   7 |        NESTED LOOPS OUTER                          |                    |     1 |   495 |   519   (2)| 00:00:07 |
    |   8 |         NESTED LOOPS                               |                    |     1 |   462 |   516   (2)| 00:00:07 |
    |*  9 |          HASH JOIN                                 |                    |     1 |   447 |   513   (2)| 00:00:07 |
    |  10 |           NESTED LOOPS                             |                    |     1 |   395 |   507   (2)| 00:00:07 |
    |  11 |            NESTED LOOPS                            |                    |     1 |   379 |   506   (2)| 00:00:07 |
    |  12 |             NESTED LOOPS                           |                    |     1 |   341 |   503   (2)| 00:00:07 |
    |  13 |              NESTED LOOPS                          |                    |     1 |   312 |   502   (2)| 00:00:07 |
    |  14 |               NESTED LOOPS                         |                    |     1 |   302 |   501   (2)| 00:00:07 |
    |  15 |                NESTED LOOPS OUTER                  |                    |     1 |   263 |   486   (2)| 00:00:06 |
    |  16 |                 NESTED LOOPS OUTER                 |                    |     1 |   253 |   485   (2)| 00:00:06 |
    |  17 |                  NESTED LOOPS                      |                    |     1 |   236 |   481   (2)| 00:00:06 |
    |  18 |                   MERGE JOIN                       |                    |    10 |  2060 |   472   (2)| 00:00:06 |
    |  19 |                    SORT JOIN                       |                    |    31 |  5425 |   403   (2)| 00:00:05 |
    |  20 |                     MERGE JOIN                     |                    |    31 |  5425 |   402   (1)| 00:00:05 |
    |  21 |                      SORT JOIN                     |                    |    81 |  5184 |   306   (1)| 00:00:04 |
    |* 22 |                       TABLE ACCESS BY INDEX ROWID  | AHSRELVALUE        |     2 |    62 |     9   (0)| 00:00:01 |
    |  23 |                        NESTED LOOPS                |                    |    81 |  5184 |   305   (0)| 00:00:04 |
    |* 24 |                         TABLE ACCESS BY INDEX ROWID| AGLDIMVALUE        |    38 |  1254 |   259   (0)| 00:00:04 |
    |* 25 |                          INDEX RANGE SCAN          | AIAGLDIMVALUE1     |   755 |       |     6   (0)| 00:00:01 |
    |* 26 |                         INDEX RANGE SCAN           | AIAHSRELVALUE3     |    16 |       |     1   (0)| 00:00:01 |
    |* 27 |                      FILTER                        |                    |       |       |            |          |
    |* 28 |                       SORT JOIN                    |                    |   152 | 16872 |    96   (4)| 00:00:02 |
    |* 29 |                        TABLE ACCESS FULL           | AEMSERVICEOFF      |   152 | 16872 |    95   (3)| 00:00:02 |
    |* 30 |                    FILTER                          |                    |       |       |            |          |
    |* 31 |                     SORT JOIN                      |                    |   136 |  4216 |    69   (5)| 00:00:01 |
    |* 32 |                      TABLE ACCESS FULL             | AHSRELVALUE        |   136 |  4216 |    68   (3)| 00:00:01 |
    |  33 |                   TABLE ACCESS BY INDEX ROWID      | AHSRESOURCES       |     1 |    30 |     1   (0)| 00:00:01 |
    |* 34 |                    INDEX UNIQUE SCAN               | AIAHSRESOURCES1    |     1 |       |     0   (0)| 00:00:01 |
    |* 35 |                  TABLE ACCESS BY INDEX ROWID       | AEMSERVTIMEBLK     |     9 |   153 |     4   (0)| 00:00:01 |
    |* 36 |                   INDEX RANGE SCAN                 | AIAEMSERVTIMEBLK2  |     9 |       |     1   (0)| 00:00:01 |
    |  37 |                 TABLE ACCESS BY INDEX ROWID        | AEMSERVTIMELIST    |     1 |    10 |     1   (0)| 00:00:01 |
    |* 38 |                  INDEX UNIQUE SCAN                 | AIAEMSERVTIMELIST3 |     1 |       |     0   (0)| 00:00:01 |
    |* 39 |                TABLE ACCESS BY INDEX ROWID         | AEMENROLLMENT      |     1 |    39 |    15   (0)| 00:00:01 |
    |* 40 |                 INDEX RANGE SCAN                   | AIAEMENROLLMENT3   |    37 |       |     2   (0)| 00:00:01 |
    |  41 |               TABLE ACCESS BY INDEX ROWID          | AEMEPISODE         |     1 |    10 |     1   (0)| 00:00:01 |
    |* 42 |                INDEX UNIQUE SCAN                   | AIAEMEPISODE1      |     1 |       |     0   (0)| 00:00:01 |
    |* 43 |              TABLE ACCESS BY INDEX ROWID           | AEMSTUDENT         |     1 |    29 |     1   (0)| 00:00:01 |
    |* 44 |               INDEX UNIQUE SCAN                    | AIAEMSTUDENT2      |     1 |       |     0   (0)| 00:00:01 |
    |  45 |             TABLE ACCESS BY INDEX ROWID            | AEWEVALRESP        |     1 |    38 |     3   (0)| 00:00:01 |
    |* 46 |              INDEX RANGE SCAN                      | AIAEWEVALRESP2     |     1 |       |     2   (0)| 00:00:01 |
    |  47 |            TABLE ACCESS BY INDEX ROWID             | AEWEVALQUEST       |     1 |    16 |     1   (0)| 00:00:01 |
    |* 48 |             INDEX UNIQUE SCAN                      | AIAEWEVALQUEST1    |     1 |       |     0   (0)| 00:00:01 |
    |* 49 |           TABLE ACCESS FULL                        | AEWTITLES          |     1 |    52 |     5   (0)| 00:00:01 |
    |* 50 |          TABLE ACCESS BY INDEX ROWID               | AGLDIMVALUE        |     1 |    15 |     3   (0)| 00:00:01 |
    |* 51 |           INDEX RANGE SCAN                         | AIAGLDIMVALUE1     |     1 |       |     2   (0)| 00:00:01 |
    |  52 |         TABLE ACCESS BY INDEX ROWID                | AGLDIMVALUE        |     1 |    33 |     3   (0)| 00:00:01 |
    |* 53 |          INDEX RANGE SCAN                          | AIAGLDIMVALUE1     |     1 |       |     2   (0)| 00:00:01 |
    |  54 |        TABLE ACCESS BY INDEX ROWID                 | AGLDIMVALUE        |     1 |    33 |     3   (0)| 00:00:01 |
    |* 55 |         INDEX RANGE SCAN                           | AIAGLDIMVALUE1     |     1 |       |     2   (0)| 00:00:01 |
    |  56 |     VIEW                                           | AVI_EVAL_EFFECTIFS |    51 |  1887 |  1348   (3)| 00:00:17 |
    |* 57 |      FILTER                                        |                    |       |       |            |          |
    |  58 |       HASH GROUP BY                                |                    |    51 |  3519 |  1348   (3)| 00:00:17 |
    |  59 |        NESTED LOOPS                                |                    |  1011 | 69759 |  1347   (3)| 00:00:17 |
    |* 60 |         HASH JOIN                                  |                    |  1011 | 63693 |  1347   (3)| 00:00:17 |
    |* 61 |          TABLE ACCESS FULL                         | AEMSERVICEOFF      |  3034 | 87986 |    95   (3)| 00:00:02 |
    |* 62 |          TABLE ACCESS FULL                         | AEMENROLLMENT      | 76505 |  2540K|  1250   (3)| 00:00:15 |
    |* 63 |         INDEX UNIQUE SCAN                          | AIAEMEPISODE1      |     1 |     6 |     0   (0)| 00:00:01 |
    -------------------------------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter(ROUND(SUM(TO_NUMBER("A"."QUALITE_PEDAGOGIQUE"))/COUNT(TO_NUMBER("A"."QUALITE_PEDAGOGIQUE")),2)>=3.0
                  0)
       3 - access("A"."SERVICE_ID"="B"."SERVICE_ID" AND "A"."SERVICEOFF_ID"="B"."SERVICEOFF_ID")
       9 - access("TI"."TITLE_ID"="Q"."TITLE_CODE")
      22 - filter("HS2"."STATUS"='N' AND "HS2"."CLIENT"='P1')
      24 - filter(UPPER("GL32"."DESCRIPTION") LIKE '%FINANCE%')
      25 - access("GL32"."CLIENT"='P1' AND "GL32"."ATTRIBUTE_ID"='32')
      26 - access("GL32"."DIM_VALUE"="HS2"."REL_VALUE" AND "HS2"."REL_ATTR_ID"='32')
      27 - filter("SO"."APP_PERIOD_FROM">="HS2"."DATE_FROM")
      28 - access(INTERNAL_FUNCTION("SO"."APP_PERIOD_FROM")<=INTERNAL_FUNCTION("HS2"."DATE_TO"))
           filter(INTERNAL_FUNCTION("SO"."APP_PERIOD_FROM")<=INTERNAL_FUNCTION("HS2"."DATE_TO"))
      29 - filter("SO"."STATUS"='N' AND SUBSTR("SO"."SERVICEOFF_ID",0,4)>='0910' AND "SO"."CLIENT"='P1')
      30 - filter("SO"."APP_PERIOD_FROM">="HS"."DATE_FROM")
      31 - access("SO"."APP_PERIOD_FROM"<="HS"."DATE_TO")
           filter("SO"."APP_PERIOD_FROM"<="HS"."DATE_TO")
      32 - filter("HS"."REL_ATTR_ID"='C2' AND "HS"."STATUS"='N' AND "HS"."CLIENT"='P1')
      34 - access("RS"."CLIENT"='P1' AND "HS"."RESOURCE_ID"="RS"."RESOURCE_ID")
           filter("HS2"."RESOURCE_ID"="RS"."RESOURCE_ID")
      35 - filter(NVL("BLK"."DISABLED"(+),0)<>1 AND "BLK"."CLIENT"(+)='P1')
      36 - access("BLK"."SERVICEOFF_FK"(+)="SO"."SERVICEOFF_PK")
      38 - access("TBK"."CLIENT"(+)='P1' AND "TBK"."SERVTIMEBLK_FK"(+)="BLK"."SERVTIMEBLK_PK")
      39 - filter("RO"."STATUS"='N')
      40 - access("RO"."CLIENT"='P1' AND "SO"."SERVICE_ID"="RO"."SERVICE_ID" AND 
                  "SO"."SERVICEOFF_ID"="RO"."SERVICEOFF_ID")
      42 - access("EP"."CLIENT"='P1' AND "EP"."EPISODE_PK"="RO"."EPISODE_FK")
      43 - filter("ST"."CLIENT"='P1')
      44 - access("ST"."STUDENT_PK"="EP"."STUDENT_FK")
      46 - access("RP"."CLIENT"='P1' AND "RO"."ENROLLMENT_PK"="RP"."ENROLLMENT_FK" AND 
                  "RS"."RESOURCE_ID"="RP"."RESOURCE_ID")
      48 - access("RP"."QUESTION_FK"="Q"."QUESTION_PK" AND "Q"."QUESTION_TYPE"='R')
      49 - filter(UPPER("TI"."CULTURE")='FR' AND ("TI"."TITLE" LIKE 'Appréciation globale sur ce cours' OR 
                  "TI"."TITLE" LIKE 'Contenu du cours' OR "TI"."TITLE" LIKE 'Qualité des outils, méthodes et supports' OR 
                  "TI"."TITLE" LIKE 'Qualité pédagogique du professeur'))
      50 - filter("GL42"."REL_VALUE"='P')
      51 - access("GL42"."CLIENT"='P1' AND "GL42"."ATTRIBUTE_ID"='C2' AND "GL42"."DIM_VALUE"="HS"."REL_VALUE")
      53 - access("GL22"."CLIENT"(+)='P1' AND "GL22"."ATTRIBUTE_ID"(+)='C2' AND 
                  "GL22"."DIM_VALUE"(+)="HS"."REL_VALUE")
      55 - access("GL2"."CLIENT"(+)='P1' AND "GL2"."ATTRIBUTE_ID"(+)='32' AND "GL2"."DIM_VALUE"(+)="SO"."ED_DEPT")
      57 - filter(TO_NUMBER(TO_CHAR(COUNT(*)))>=15.00)
      60 - access("SO"."SERVICE_ID"="RO"."SERVICE_ID" AND "SO"."SERVICEOFF_ID"="RO"."SERVICEOFF_ID")
      61 - filter("SO"."STATUS"='N' AND "SO"."CLIENT"='P1')
      62 - filter("RO"."STATUS"='N' AND "RO"."CLIENT"='P1')
      63 - access("EP"."CLIENT"='P1' AND "EP"."EPISODE_PK"="RO"."EPISODE_FK")
    Par contre je veux bien essayer ces commandes , mais quels privilèges faut il sur le schéma de données ? être DBA ?

  8. #28
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    j'ai à présent un acces avec un utilisateur en DBA sur ma base, j'ai pu appliquer ce que propose Mohammed avec son /*+ gather_plan_statistics*/,
    et en voici le résultat sans la clause where qui fait tout ramer ... je fais la suite ... mais si quelqu'un voit déjà un truc qui cloche ..

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    SQL_ID  frgh8s19gdzkg, child number 0
    -------------------------------------
    SELECT /*+gather_plan_statistics*/  'A' tab                                 ,    t.appreciation_globale AS appreciation_globale,    t.code_cours                                 
     ,    t.code_offre_de_cours                         ,    t.contenu_cours AS contenu_cours              ,    t.departement_cours                           ,    
    t.departement_intervenant                     ,    t.enseignant                                  ,    t.evaluation_terminee AS evaluation_terminee  ,    t.groupe_intervenant    
                          ,    t.heures_physiques AS heures_physiques        ,    t.libelle_du_cours                            ,    t.moyenne_generale AS moyenne_generale        , 
       t.nb_eleves        AS nb_eleves               ,    t.nb_eval          AS nb_eval                 ,    t.periode                                     ,    
    t.periode_academic_cours                      ,    t.promotion                                   ,    t.qualite_outils AS qualite_outils            ,    t
     
    Plan hash value: 2038560713
     
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                                         | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  | Writes |  OMem |  1Mem | Used-Mem | Used-Tmp|
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    |*  1 |  FILTER                                           |                    |      1 |        |     93 |00:01:37.55 |    4645K|  23661 |   6855 |       |       |          |         |
    |   2 |   HASH GROUP BY                                   |                    |      1 |      1 |    111 |00:01:37.55 |    4645K|  23661 |   6855 |       |       |          |         |
    |*  3 |    HASH JOIN                                      |                    |      1 |      1 |  16736 |00:01:37.56 |    4645K|  23661 |   6855 |  4416K|  1860K| 4352K (0)|         |
    |   4 |     VIEW                                          | AVI_EVAL_ELEVE     |      1 |      1 |  17068 |00:01:32.24 |    4447K|  18900 |   6855 |       |       |          |         |
    |   5 |      HASH GROUP BY                                |                    |      1 |      1 |  17068 |00:01:32.10 |    4447K|  18900 |   6855 |       |       |          |         |
    |   6 |       NESTED LOOPS OUTER                          |                    |      1 |      1 |    209K|00:00:30.79 |    4447K|  18450 |   6405 |       |       |          |         |
    |   7 |        NESTED LOOPS OUTER                         |                    |      1 |      1 |    209K|00:00:20.34 |    4029K|  18447 |   6405 |       |       |          |         |
    |   8 |         NESTED LOOPS OUTER                        |                    |      1 |      1 |  17068 |00:00:15.85 |    3977K|  18438 |   6405 |       |       |          |         |
    |   9 |          NESTED LOOPS                             |                    |      1 |      1 |  17068 |00:00:14.79 |    3925K|  18438 |   6405 |       |       |          |         |
    |  10 |           NESTED LOOPS OUTER                      |                    |      1 |      1 |    149K|00:01:29.23 |    3477K|  18438 |   6405 |       |       |          |         |
    |  11 |            NESTED LOOPS OUTER                     |                    |      1 |      1 |    149K|00:01:20.72 |    3030K|  18438 |   6405 |       |       |          |         |
    |  12 |             NESTED LOOPS                          |                    |      1 |      1 |    149K|00:01:12.06 |    2700K|  18438 |   6405 |       |       |          |         |
    |  13 |              VIEW                                 |                    |      1 |      3 |    213K|00:00:55.76 |    2238K|  18438 |   6405 |       |       |          |         |
    |  14 |               NESTED LOOPS                        |                    |      1 |      3 |    213K|00:00:54.27 |    2238K|  18438 |   6405 |       |       |          |         |
    |  15 |                NESTED LOOPS                       |                    |      1 |      3 |    213K|00:00:43.60 |    1811K|  18438 |   6405 |       |       |          |         |
    |  16 |                 NESTED LOOPS                      |                    |      1 |      3 |    213K|00:00:32.71 |    1384K|  18438 |   6405 |       |       |          |         |
    |  17 |                  NESTED LOOPS OUTER               |                    |      1 |      3 |    213K|00:00:22.25 |     957K|  18432 |   6405 |       |       |          |         |
    |* 18 |                   HASH JOIN                       |                    |      1 |      3 |    213K|00:00:09.66 |     317K|  18432 |   6405 |   766K|   766K|  563K (0)|         |
    |* 19 |                    TABLE ACCESS FULL              | AEWTITLES          |      1 |      1 |      4 |00:00:00.01 |      15 |     14 |      0 |       |       |          |         |
    |* 20 |                    HASH JOIN                      |                    |      1 |    369 |    213K|00:00:07.74 |     317K|  18418 |   6405 |    54M|  3745K|   37M (1)|   55296 |
    |  21 |                     TABLE ACCESS BY INDEX ROWID   | AEWEVALRESP        |      1 |      7 |    320K|00:00:15.07 |     317K|  11939 |      0 |       |       |          |         |
    |  22 |                      NESTED LOOPS                 |                    |      1 |    369 |    423K|00:00:07.64 |     263K|   6643 |      0 |       |       |          |         |
    |  23 |                       NESTED LOOPS                |                    |      1 |     51 |    103K|00:00:01.99 |   55915 |   5404 |      0 |       |       |          |         |
    |* 24 |                        TABLE ACCESS FULL          | AEMSERVICEOFF      |      1 |    152 |   5610 |00:00:00.03 |     423 |    226 |      0 |       |       |          |         |
    |* 25 |                        TABLE ACCESS BY INDEX ROWID| AEMENROLLMENT      |   5610 |      1 |    103K|00:00:01.69 |   55492 |   5178 |      0 |       |       |          |         |
    |* 26 |                         INDEX RANGE SCAN          | AIAEMENROLLMENT3   |   5610 |     37 |    119K|00:00:00.73 |   11878 |   1333 |      0 |       |       |          |         |
    |* 27 |                       INDEX RANGE SCAN            | AIAEWEVALRESP4     |    103K|      7 |    320K|00:00:03.17 |     208K|   1239 |      0 |       |       |          |         |
    |* 28 |                     TABLE ACCESS FULL             | AEWEVALQUEST       |      1 |   8181 |  10962 |00:00:00.05 |      76 |     74 |      0 |       |       |          |         |
    |  29 |                   TABLE ACCESS BY INDEX ROWID     | AGLDIMVALUE        |    213K|      1 |    213K|00:00:07.46 |     640K|      0 |      0 |       |       |          |         |
    |* 30 |                    INDEX RANGE SCAN               | AIAGLDIMVALUE1     |    213K|      1 |    213K|00:00:04.37 |     426K|      0 |      0 |       |       |          |         |
    |  31 |                  TABLE ACCESS BY INDEX ROWID      | AEMEPISODE         |    213K|      1 |    213K|00:00:08.23 |     426K|      6 |      0 |       |       |          |         |
    |* 32 |                   INDEX UNIQUE SCAN               | AIAEMEPISODE1      |    213K|      1 |    213K|00:00:03.54 |     213K|      0 |      0 |       |       |          |         |
    |* 33 |                 TABLE ACCESS BY INDEX ROWID       | AEMSTUDENT         |    213K|      1 |    213K|00:00:08.21 |     426K|      0 |      0 |       |       |          |         |
    |* 34 |                  INDEX UNIQUE SCAN                | AIAEMSTUDENT2      |    213K|      1 |    213K|00:00:03.44 |     213K|      0 |      0 |       |       |          |         |
    |  35 |                TABLE ACCESS BY INDEX ROWID        | AHSRESOURCES       |    213K|      1 |    213K|00:00:08.16 |     426K|      0 |      0 |       |       |          |         |
    |* 36 |                 INDEX UNIQUE SCAN                 | AIAHSRESOURCES1    |    213K|      1 |    213K|00:00:03.50 |     213K|      0 |      0 |       |       |          |         |
    |* 37 |              TABLE ACCESS BY INDEX ROWID          | AHSRELVALUE        |    213K|      1 |    149K|00:00:09.17 |     462K|      0 |      0 |       |       |          |         |
    |* 38 |               INDEX RANGE SCAN                    | AIAHSRELVALUE1     |    213K|      1 |    248K|00:00:04.28 |     214K|      0 |      0 |       |       |          |         |
    |* 39 |             TABLE ACCESS BY INDEX ROWID           | AHSRELVALUE        |    149K|      1 |    149K|00:00:05.30 |     330K|      0 |      0 |       |       |          |         |
    |* 40 |              INDEX RANGE SCAN                     | AIAHSRELVALUE1     |    149K|      1 |    180K|00:00:02.89 |     150K|      0 |      0 |       |       |          |         |
    |  41 |            TABLE ACCESS BY INDEX ROWID            | AGLDIMVALUE        |    149K|      1 |    149K|00:00:05.16 |     447K|      0 |      0 |       |       |          |         |
    |* 42 |             INDEX RANGE SCAN                      | AIAGLDIMVALUE1     |    149K|      1 |    149K|00:00:03.05 |     298K|      0 |      0 |       |       |          |         |
    |* 43 |           TABLE ACCESS BY INDEX ROWID             | AGLDIMVALUE        |    149K|      1 |  17068 |00:00:05.91 |     447K|      0 |      0 |       |       |          |         |
    |* 44 |            INDEX RANGE SCAN                       | AIAGLDIMVALUE1     |    149K|      1 |    149K|00:00:03.03 |     298K|      0 |      0 |       |       |          |         |
    |  45 |          TABLE ACCESS BY INDEX ROWID              | AGLDIMVALUE        |  17068 |      1 |  17068 |00:00:00.57 |   51206 |      0 |      0 |       |       |          |         |
    |* 46 |           INDEX RANGE SCAN                        | AIAGLDIMVALUE1     |  17068 |      1 |  17068 |00:00:00.35 |   34138 |      0 |      0 |       |       |          |         |
    |* 47 |         TABLE ACCESS BY INDEX ROWID               | AEMSERVTIMEBLK     |  17068 |      9 |    209K|00:00:02.12 |   52706 |      9 |      0 |       |       |          |         |
    |* 48 |          INDEX RANGE SCAN                         | AIAEMSERVTIMEBLK2  |  17068 |      9 |    209K|00:00:01.20 |   17622 |      1 |      0 |       |       |          |         |
    |  49 |        TABLE ACCESS BY INDEX ROWID                | AEMSERVTIMELIST    |    209K|      1 |    209K|00:00:07.87 |     418K|      3 |      0 |       |       |          |         |
    |* 50 |         INDEX UNIQUE SCAN                         | AIAEMSERVTIMELIST3 |    209K|      1 |    209K|00:00:03.45 |     209K|      1 |      0 |       |       |          |         |
    |  51 |     VIEW                                          | AVI_EVAL_EFFECTIFS |      1 |     51 |   4643 |00:00:05.43 |     198K|   4761 |      0 |       |       |          |         |
    |* 52 |      FILTER                                       |                    |      1 |        |   4643 |00:00:05.40 |     198K|   4761 |      0 |       |       |          |         |
    |  53 |       HASH GROUP BY                               |                    |      1 |     51 |   5870 |00:00:05.39 |     198K|   4761 |      0 |       |       |          |         |
    |  54 |        NESTED LOOPS                               |                    |      1 |   1011 |    192K|00:00:06.96 |     198K|   4761 |      0 |       |       |          |         |
    |* 55 |         HASH JOIN                                 |                    |      1 |   1011 |    192K|00:00:01.58 |    6029 |   4761 |      0 |  1088K|  1088K| 1359K (0)|         |
    |* 56 |          TABLE ACCESS FULL                        | AEMSERVICEOFF      |      1 |   3034 |  10781 |00:00:00.05 |     423 |    227 |      0 |       |       |          |         |
    |* 57 |          TABLE ACCESS FULL                        | AEMENROLLMENT      |      1 |  76505 |    192K|00:00:00.97 |    5606 |   4534 |      0 |       |       |          |         |
    |* 58 |         INDEX UNIQUE SCAN                         | AIAEMEPISODE1      |    192K|      1 |    192K|00:00:03.05 |     192K|      0 |      0 |       |       |          |         |
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter(ROUND(SUM(TO_NUMBER("A"."QUALITE_PEDAGOGIQUE"))/COUNT(TO_NUMBER("A"."QUALITE_PEDAGOGIQUE")),2)>=3)
       3 - access("A"."SERVICE_ID"="B"."SERVICE_ID" AND "A"."SERVICEOFF_ID"="B"."SERVICEOFF_ID")
      18 - access("TI"."TITLE_ID"="Q"."TITLE_CODE")
      19 - filter((UPPER("TI"."CULTURE")='FR' AND INTERNAL_FUNCTION("TI"."TITLE")))
      20 - access("RP"."QUESTION_FK"="Q"."QUESTION_PK")
      24 - filter(("SO"."STATUS"='N' AND SUBSTR("SO"."SERVICEOFF_ID",0,4)>='0910' AND "SO"."CLIENT"='P1'))
      25 - filter("RO"."STATUS"='N')
      26 - access("RO"."CLIENT"='P1' AND "SO"."SERVICE_ID"="RO"."SERVICE_ID" AND "SO"."SERVICEOFF_ID"="RO"."SERVICEOFF_ID")
      27 - access("RP"."CLIENT"='P1' AND "RO"."ENROLLMENT_PK"="RP"."ENROLLMENT_FK")
      28 - filter("Q"."QUESTION_TYPE"='R')
      30 - access("GL2"."CLIENT"='P1' AND "GL2"."ATTRIBUTE_ID"='32' AND "GL2"."DIM_VALUE"="SO"."ED_DEPT")
      32 - access("EP"."CLIENT"='P1' AND "EP"."EPISODE_PK"="RO"."EPISODE_FK")
      33 - filter("ST"."CLIENT"='P1')
      34 - access("ST"."STUDENT_PK"="EP"."STUDENT_FK")
      36 - access("RS"."CLIENT"='P1' AND "RS"."RESOURCE_ID"="RP"."RESOURCE_ID")
      37 - filter(("HS2"."STATUS"='N' AND "from$_subquery$_023"."APP_PERIOD_FROM"<="HS2"."DATE_TO" AND "from$_subquery$_023"."APP_PERIOD_FROM">="HS2"."DATE_FROM"))
      38 - access("HS2"."CLIENT"='P1' AND "HS2"."RESOURCE_ID"="from$_subquery$_023"."QCSJ_C000000002100017" AND "HS2"."REL_ATTR_ID"='32')
      39 - filter(("HS"."STATUS"='N' AND "SO"."APP_PERIOD_FROM"<="HS"."DATE_TO" AND "SO"."APP_PERIOD_FROM">="HS"."DATE_FROM"))
      40 - access("HS"."CLIENT"='P1' AND "HS"."RESOURCE_ID"="RS"."RESOURCE_ID" AND "HS"."REL_ATTR_ID"='C2')
      42 - access("GL22"."CLIENT"='P1' AND "GL22"."ATTRIBUTE_ID"='C2' AND "GL22"."DIM_VALUE"="HS"."REL_VALUE")
      43 - filter(UPPER("GL32"."DESCRIPTION") LIKE '%FINANCE%')
      44 - access("GL32"."CLIENT"='P1' AND "GL32"."ATTRIBUTE_ID"='32' AND "GL32"."DIM_VALUE"="HS2"."REL_VALUE")
      46 - access("GL42"."CLIENT"='P1' AND "GL42"."ATTRIBUTE_ID"='C2' AND "GL42"."DIM_VALUE"="HS"."REL_VALUE")
      47 - filter((NVL("BLK"."DISABLED",0)<>1 AND "BLK"."CLIENT"='P1'))
      48 - access("BLK"."SERVICEOFF_FK"="from$_subquery$_023"."SERVICEOFF_PK")
      50 - access("TBK"."CLIENT"='P1' AND "TBK"."SERVTIMEBLK_FK"="BLK"."SERVTIMEBLK_PK")
      52 - filter(TO_NUMBER(TO_CHAR(COUNT(*)))>=15)
      55 - access("SO"."SERVICE_ID"="RO"."SERVICE_ID" AND "SO"."SERVICEOFF_ID"="RO"."SERVICEOFF_ID")
      56 - filter(("SO"."STATUS"='N' AND "SO"."CLIENT"='P1'))
      57 - filter(("RO"."STATUS"='N' AND "RO"."CLIENT"='P1'))
      58 - access("EP"."CLIENT"='P1' AND "EP"."EPISODE_PK"="RO"."EPISODE_FK")

  9. #29
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Même dans l'exécution de la requête qui répond, le CBO se vautre totalement dans l'estimation des cardinalitées (E-Rows vs A-Rows).
    Regarde la colonne LAST_ANALYZED de la vue USER_TABLES pour vérifier la dernière date de calcul des statistiques.
    Tu peux aussi comparer la colonne NUM_ROWS avec le vrai nombre de ligne de la table (pour les différentes tables composant la requête)

    A priori les stats ne sont pas à jour, utilise DBMS_STATS.GATHER_TABLE_STAT pour les récalculer.
    Une commande de base par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec DBMS_STATS.GATHER_TABLE_STAT('LE_SCHEMA','LA_TABLE',cascade=>true)
    A affiner si nécessaire.
    Voit avec ton DBA, le calcul des stats c'est plutôt son boulot.

    Regarde dbms_xplan.display_cursor pour des infos sur la commande.

  10. #30
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    J'ai fait recalculer les statistiques et la colonne LAST_ANALYZED de la vue USER_TABLES est à la date du jour.

    Cela ne change rien malheureusement.

    Est ce que changer l'ordre des jointures dans les clauses where pourrait changer quelque chose ?

  11. #31
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Il faudrait peut être faire des jointures normalisées déjà.
    ~ Lola ~

  12. #32
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par beegood Voir le message
    J'ai fait recalculer les statistiques et la colonne LAST_ANALYZED de la vue USER_TABLES est à la date du jour.
    Il faudrait repasser le plan d'exécution de Mohamed Houri maintenant que les statistiques sont à jour.

  13. #33
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    heu j'ai toujours fait mes jointures comme cela .... qu'est ce que ne va pas ?

  14. #34
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Quelle est la condition que tu ajoutes ?

    Pour ta requête :
    - UPPER(..) si tu pouvais le mettre dans la vue ça serait un plus
    - %FINANCE% --> le % en début prend beaucoup de ressource (il serait mieux de créer une autre colonne dans ta vue avec REVERSE et du coup avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (... LIKE 'FINANCE%' OR ... LIKE 'ECNANIF%')
    Attention ce n'est pas équivalent : le OR proposé ne ramènera que ce qui commence ou finit par FINANCE, et pas une valeur où le mot cherché serait au milieu, telle que 'DEPARTEMENT DE FINANCE STOCHASTIQUE'.

  15. #35
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Il faudrait peut être faire des jointures normalisées déjà.
    Pour Oracle c'est une connerie. Demandez à SQL PRO de prouver ses affirmations.

  16. #36
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Merci d'avoir pris la peine de poster le plan d'exécution comme demandé. Je dois dire que c'est très intéressant et j'aimerai beaucoup que l'on trouve la raison. Voici ci-dessous mes remarques:

    Le plan d'origine fait principalement ceci
    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
     
    ----------------------------------------------------------------------------------------------------------
    | Id  | Operation                                           | Name               | Rows  | Bytes | Cost  |
    ----------------------------------------------------------------------------------------------------------
    |   3 |    HASH JOIN                                        |                    |     1 |  2225 |  1932 |
    |   4 |     VIEW                                            | AVI_EVAL_ELEVE     |     1 |  2188 |   584 |
    |   5 |      HASH GROUP BY                                  |                    |     1 |   526 |   584 |
    ......
     
     
    |  55 |     VIEW                                            | AVI_EVAL_EFFECTIFS |    51 |  1887 |  1348 |
    |  56 |      FILTER                                         |                    |       |       |       |
    |  57 |       HASH GROUP BY                                 |                    |    51 |  3519 |  1348 |
    |  58 |        NESTED LOOPS                                 |                    |  1011 | 69759 |  1347 |
    |  59 |         HASH JOIN                                   |                    |  1011 | 63693 |  1347 |
    |  60 |          TABLE ACCESS FULL                          | AEMSERVICEOFF      |  3034 | 87986 |    95 |
    |  61 |          TABLE ACCESS FULL                          | AEMENROLLMENT      | 76505 |  2540K|  1250 |
    |  62 |         INDEX UNIQUE SCAN                           | AIAEMEPISODE1      |     1 |     6 |     0 |
    ----------------------------------------------------------------------------------------------------------
    Alors que le second plan fait ceci

    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
     
    ------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                                         | Name               | Starts | E-Rows | A-Rows |   A-Time   |
    ------------------------------------------------------------------------------------------------------------------------
    |*  3 |    HASH JOIN                                      |                    |      1 |      1 |  16736 |00:01:37.56 |
    |   4 |     VIEW                                          | AVI_EVAL_ELEVE     |      1 |      1 |  17068 |00:01:32.24 |
    |   5 |      HASH GROUP BY                                |                    |      1 |      1 |  17068 |00:01:32.10 |
    ......
     
    |  51 |     VIEW                                          | AVI_EVAL_EFFECTIFS |      1 |     51 |   4643 |00:00:05.43 |
    |* 52 |      FILTER                                       |                    |      1 |        |   4643 |00:00:05.40 |
    |  53 |       HASH GROUP BY                               |                    |      1 |     51 |   5870 |00:00:05.39 |
    |  54 |        NESTED LOOPS                               |                    |      1 |   1011 |    192K|00:00:06.96 |
    |* 55 |         HASH JOIN                                 |                    |      1 |   1011 |    192K|00:00:01.58 |
    |* 56 |          TABLE ACCESS FULL                        | AEMSERVICEOFF      |      1 |   3034 |  10781 |00:00:00.05 |
    |* 57 |          TABLE ACCESS FULL                        | AEMENROLLMENT      |      1 |  76505 |    192K|00:00:00.97 |
    |* 58 |         INDEX UNIQUE SCAN                         | AIAEMEPISODE1      |    192K|      1 |    192K|00:00:03.05 |
    ------------------------------------------------------------------------------------------------------------------------
    c'est à dire tous les deux font une HASH JOIN entre deux VIEW intermédiaires.
    La différence provient donc principalement du pavé allant de l'opération 5 (HASH GROUP BY) jusqu'à loperation 51 dans le premier(55 dans le second) (VIEW)

    Ces deux pavés sont:

    dans le premier plan
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    |   6 |       NESTED LOOPS OUTER                            |                    |     1 |   526 |   583 |
    |   7 |        NESTED LOOPS OUTER                           |                    |     1 |   493 |   580 |
    |   8 |         NESTED LOOPS                                |                    |     1 |   460 |   577 |
    |   9 |          HASH JOIN                                  |                    |     1 |   445 |   574 |
    |  10 |           NESTED LOOPS                              |                    |     1 |   393 |   568 |
    |  11 |            NESTED LOOPS                             |                    |     1 |   377 |   567 |
    |  12 |             NESTED LOOPS                            |                    |     1 |   339 |   564 |
    |  13 |              NESTED LOOPS                           |                    |     1 |   310 |   563 |
    |  14 |               NESTED LOOPS                          |                    |     1 |   300 |   562 |
    |  15 |                HASH JOIN                            |                    |     1 |   261 |   547 |
    |  16 |                 TABLE ACCESS BY INDEX ROWID         | AEMSERVTIMEBLK     |     9 |   153 |     4 |
    |  17 |                  NESTED LOOPS                       |                    |     1 |   253 |   485 |
    |  18 |                   NESTED LOOPS                      |                    |     1 |   236 |   481 |
    |  19 |                    MERGE JOIN                       |                    |    10 |  2060 |   472 |
    |  20 |                     SORT JOIN                       |                    |    31 |  5425 |   403 |
    |  21 |                      MERGE JOIN                     |                    |    31 |  5425 |   402 |
    |  22 |                       SORT JOIN                     |                    |    81 |  5184 |   306 |
    |  23 |                        TABLE ACCESS BY INDEX ROWID  | AHSRELVALUE        |     2 |    62 |     9 |
    |  24 |                         NESTED LOOPS                |                    |    81 |  5184 |   305 |
    |  25 |                          TABLE ACCESS BY INDEX ROWID| AGLDIMVALUE        |    38 |  1254 |   259 |
    |  26 |                           INDEX RANGE SCAN          | AIAGLDIMVALUE1     |   755 |       |     6 |
    |  27 |                          INDEX RANGE SCAN           | AIAHSRELVALUE3     |    16 |       |     1 |
    |  28 |                       FILTER                        |                    |       |       |       |
    |  29 |                        SORT JOIN                    |                    |   152 | 16872 |    96 |
    |  30 |                         TABLE ACCESS FULL           | AEMSERVICEOFF      |   152 | 16872 |    95 |
    |  31 |                     FILTER                          |                    |       |       |       |
    |  32 |                      SORT JOIN                      |                    |   136 |  4216 |    69 |
    |  33 |                       TABLE ACCESS FULL             | AHSRELVALUE        |   136 |  4216 |    68 |
    |  34 |                    TABLE ACCESS BY INDEX ROWID      | AHSRESOURCES       |     1 |    30 |     1 |
    |  35 |                     INDEX UNIQUE SCAN               | AIAHSRESOURCES1    |     1 |       |     0 |
    |  36 |                   INDEX RANGE SCAN                  | AIAEMSERVTIMEBLK2  |     9 |       |     1 |
    |  37 |                 TABLE ACCESS FULL                   | AEMSERVTIMELIST    | 52580 |   410K|    61 |
    |  38 |                TABLE ACCESS BY INDEX ROWID          | AEMENROLLMENT      |     1 |    39 |    15 |
    |  39 |                 INDEX RANGE SCAN                    | AIAEMENROLLMENT3   |    37 |       |     2 |
    |  40 |               TABLE ACCESS BY INDEX ROWID           | AEMEPISODE         |     1 |    10 |     1 |
    |  41 |                INDEX UNIQUE SCAN                    | AIAEMEPISODE1      |     1 |       |     0 |
    |  42 |              TABLE ACCESS BY INDEX ROWID            | AEMSTUDENT         |     1 |    29 |     1 |
    |  43 |               INDEX UNIQUE SCAN                     | AIAEMSTUDENT2      |     1 |       |     0 |
    |  44 |             TABLE ACCESS BY INDEX ROWID             | AEWEVALRESP        |     1 |    38 |     3 |
    |  45 |              INDEX RANGE SCAN                       | AIAEWEVALRESP2     |     1 |       |     2 |
    |  46 |            TABLE ACCESS BY INDEX ROWID              | AEWEVALQUEST       |     1 |    16 |     1 |
    |  47 |             INDEX UNIQUE SCAN                       | AIAEWEVALQUEST1    |     1 |       |     0 |
    |  48 |           TABLE ACCESS FULL                         | AEWTITLES          |     1 |    52 |     5 |
    |  49 |          TABLE ACCESS BY INDEX ROWID                | AGLDIMVALUE        |     1 |    15 |     3 |
    |  50 |           INDEX RANGE SCAN                          | AIAGLDIMVALUE1     |     1 |       |     2 |
    |  51 |         TABLE ACCESS BY INDEX ROWID                 | AGLDIMVALUE        |     1 |    33 |     3 |
    |  52 |          INDEX RANGE SCAN                           | AIAGLDIMVALUE1     |     1 |       |     2 |
    |  53 |        TABLE ACCESS BY INDEX ROWID                  | AGLDIMVALUE        |     1 |    33 |     3 |
    |  54 |         INDEX RANGE SCAN                            | AIAGLDIMVALUE1     |     1 |       |     2 |
    et dans le second
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    |   6 |       NESTED LOOPS OUTER                          |                    |      1 |      1 |    209K|00:00:30.79 | 
    |   7 |        NESTED LOOPS OUTER                         |                    |      1 |      1 |    209K|00:00:20.34 | 
    |   8 |         NESTED LOOPS OUTER                        |                    |      1 |      1 |  17068 |00:00:15.85 | 
    |   9 |          NESTED LOOPS                             |                    |      1 |      1 |  17068 |00:00:14.79 | 
    |  10 |           NESTED LOOPS OUTER                      |                    |      1 |      1 |    149K|00:01:29.23 | 
    |  11 |            NESTED LOOPS OUTER                     |                    |      1 |      1 |    149K|00:01:20.72 | 
    |  12 |             NESTED LOOPS                          |                    |      1 |      1 |    149K|00:01:12.06 | 
    |  13 |              VIEW                                 |                    |      1 |      3 |    213K|00:00:55.76 | 
    |  14 |               NESTED LOOPS                        |                    |      1 |      3 |    213K|00:00:54.27 | 
    |  15 |                NESTED LOOPS                       |                    |      1 |      3 |    213K|00:00:43.60 | 
    |  16 |                 NESTED LOOPS                      |                    |      1 |      3 |    213K|00:00:32.71 | 
    |  17 |                  NESTED LOOPS OUTER               |                    |      1 |      3 |    213K|00:00:22.25 | 
    |* 18 |                   HASH JOIN                       |                    |      1 |      3 |    213K|00:00:09.66 | 
    |* 19 |                    TABLE ACCESS FULL              | AEWTITLES          |      1 |      1 |      4 |00:00:00.01 | 
    |* 20 |                    HASH JOIN                      |                    |      1 |    369 |    213K|00:00:07.74 | 
    |  21 |                     TABLE ACCESS BY INDEX ROWID   | AEWEVALRESP        |      1 |      7 |    320K|00:00:15.07 | 
    |  22 |                      NESTED LOOPS                 |                    |      1 |    369 |    423K|00:00:07.64 | 
    |  23 |                       NESTED LOOPS                |                    |      1 |     51 |    103K|00:00:01.99 | 
    |* 24 |                        TABLE ACCESS FULL          | AEMSERVICEOFF      |      1 |    152 |   5610 |00:00:00.03 | 
    |* 25 |                        TABLE ACCESS BY INDEX ROWID| AEMENROLLMENT      |   5610 |      1 |    103K|00:00:01.69 | 
    |* 26 |                         INDEX RANGE SCAN          | AIAEMENROLLMENT3   |   5610 |     37 |    119K|00:00:00.73 | 
    |* 27 |                       INDEX RANGE SCAN            | AIAEWEVALRESP4     |    103K|      7 |    320K|00:00:03.17 | 
    |* 28 |                     TABLE ACCESS FULL             | AEWEVALQUEST       |      1 |   8181 |  10962 |00:00:00.05 | 
    |  29 |                   TABLE ACCESS BY INDEX ROWID     | AGLDIMVALUE        |    213K|      1 |    213K|00:00:07.46 | 
    |* 30 |                    INDEX RANGE SCAN               | AIAGLDIMVALUE1     |    213K|      1 |    213K|00:00:04.37 | 
    |  31 |                  TABLE ACCESS BY INDEX ROWID      | AEMEPISODE         |    213K|      1 |    213K|00:00:08.23 | 
    |* 32 |                   INDEX UNIQUE SCAN               | AIAEMEPISODE1      |    213K|      1 |    213K|00:00:03.54 | 
    |* 33 |                 TABLE ACCESS BY INDEX ROWID       | AEMSTUDENT         |    213K|      1 |    213K|00:00:08.21 | 
    |* 34 |                  INDEX UNIQUE SCAN                | AIAEMSTUDENT2      |    213K|      1 |    213K|00:00:03.44 | 
    |  35 |                TABLE ACCESS BY INDEX ROWID        | AHSRESOURCES       |    213K|      1 |    213K|00:00:08.16 | 
    |* 36 |                 INDEX UNIQUE SCAN                 | AIAHSRESOURCES1    |    213K|      1 |    213K|00:00:03.50 | 
    |* 37 |              TABLE ACCESS BY INDEX ROWID          | AHSRELVALUE        |    213K|      1 |    149K|00:00:09.17 | 
    |* 38 |               INDEX RANGE SCAN                    | AIAHSRELVALUE1     |    213K|      1 |    248K|00:00:04.28 | 
    |* 39 |             TABLE ACCESS BY INDEX ROWID           | AHSRELVALUE        |    149K|      1 |    149K|00:00:05.30 | 
    |* 40 |              INDEX RANGE SCAN                     | AIAHSRELVALUE1     |    149K|      1 |    180K|00:00:02.89 | 
    |  41 |            TABLE ACCESS BY INDEX ROWID            | AGLDIMVALUE        |    149K|      1 |    149K|00:00:05.16 | 
    |* 42 |             INDEX RANGE SCAN                      | AIAGLDIMVALUE1     |    149K|      1 |    149K|00:00:03.05 | 
    |* 43 |           TABLE ACCESS BY INDEX ROWID             | AGLDIMVALUE        |    149K|      1 |  17068 |00:00:05.91 | 
    |* 44 |            INDEX RANGE SCAN                       | AIAGLDIMVALUE1     |    149K|      1 |    149K|00:00:03.03 | 
    |  45 |          TABLE ACCESS BY INDEX ROWID              | AGLDIMVALUE        |  17068 |      1 |  17068 |00:00:00.57 | 
    |* 46 |           INDEX RANGE SCAN                        | AIAGLDIMVALUE1     |  17068 |      1 |  17068 |00:00:00.35 | 
    |* 47 |         TABLE ACCESS BY INDEX ROWID               | AEMSERVTIMEBLK     |  17068 |      9 |    209K|00:00:02.12 | 
    |* 48 |          INDEX RANGE SCAN                         | AIAEMSERVTIMEBLK2  |  17068 |      9 |    209K|00:00:01.20 | 
    |  49 |        TABLE ACCESS BY INDEX ROWID                | AEMSERVTIMELIST    |    209K|      1 |    209K|00:00:07.87 | 
    |* 50 |         INDEX UNIQUE SCAN                         | AIAEMSERVTIMELIST3 |    209K|      1 |    209K|00:00:03.45 |
    où (le second) l'on constate l'apparition d'une nouvelle operation VIEW supplémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    |  13 |              VIEW                                 |                    |      1 |      3 |    213K|00:00:55.76 | 
    |  14 |               NESTED LOOPS                        |                    |      1 |      3 |    213K|00:00:54.27 | 
    |  15 |                NESTED LOOPS                       |                    |      1 |      3 |    213K|00:00:43.60 | 
    |  16 |                 NESTED LOOPS                      |                    |      1 |      3 |    213K|00:00:32.71 | 
    |  17 |                  NESTED LOOPS OUTER               |                    |      1 |      3 |    213K|00:00:22.25 |
    Dépendant de son opération fille(14 NESTED LOOPS ici), une opération VIEW doit d'abord construire totalement sa réponse avant de transmettre le résultat à son opération mère(NESTED LOOP ici aussi) ce qui veut dire que comparativement au premier plan d'execution cette opération VIEW supplémentaire peut avoir ajouter un laps de temps d'attente qui d'ailleurs vaut ici 55 secondes (y compris le temps de ses opérations filles).

    Je remarque aussi la disparition dans le second plan des operations MERGE JOIN et SORT JOIN.

    Comment ce changement est arrivé? j'avoue que je n'en ai aucune idée. Je ne peux que spéculer en comparant les différences. Par exemple la toute première opération dans le premier plan est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |  25 |                          TABLE ACCESS BY INDEX ROWID| AGLDIMVALUE        |    38 |  1254 |   259 |
    |  26 |                           INDEX RANGE SCAN          | AIAGLDIMVALUE1     |   755 |       |     6 |
    Alors que dans le deuxième c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |* 24 |                        TABLE ACCESS FULL          | AEMSERVICEOFF      |      1 |    152 |   5610 |00:00:00.03 | 
    |* 25 |                        TABLE ACCESS BY INDEX ROWID| AEMENROLLMENT      |   5610 |      1 |    103K|00:00:01.69 |
    Peut-être qu'en utilisant des hints (LEADING par exemple) conduirait le CBO à commencer par la table AGLDIMVALUE et rétablirait le bon plan. Il y aussi la possibilité de supprimer ces VIEW en utilisant le hint MERGE (quoique je n'en suis pas totalement sûr).

    Sinon, quelques remarques au passage qui serviront peut-être ulterieurement et pas forcément cette fois-ci:

    L'opération suivante fait un full table scan pour ne ramener que 4 lignes. La partie Predicate peut expliquer peut-être la non utilisation de l index si index il y a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |* 19 |                    TABLE ACCESS FULL              | AEWTITLES          |      1 |      1 |      4 |00:00:00.01 |      15 |     14 |
     19 - filter((UPPER("TI"."CULTURE")='FR' AND INTERNAL_FUNCTION("TI"."TITLE")))
    L'opération 26 passe à son opération mère (25) 119.000 lignes sur lesquelles est appliqué un filtre pour éliminer 16.000 lignes. C'est une perte de temps et d'énergie qui peut être résolue en créant un index plus précis sur la table AEMENROLLMENT. Je suppose que l'index AIAEMENROLLMENT3 est défini sur (CLIENT,SERVICE_ID, SERVICEOFF_ID); avez vous essayé d'enrichir cet index avec la colonne STATUS?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    |* 25 |                        TABLE ACCESS BY INDEX ROWID| AEMENROLLMENT      |   5610 |      1 |    103K|00:00:01.69 |   55492 |   5178 |      0 |       |       |          |         |
    |* 26 |                         INDEX RANGE SCAN          | AIAEMENROLLMENT3   |   5610 |     37 |    119K|00:00:00.73 |   11878 |   1333 |
      25 - filter("RO"."STATUS"='N')
      26 - access("RO"."CLIENT"='P1' AND "SO"."SERVICE_ID"="RO"."SERVICE_ID" AND "SO"."SERVICEOFF_ID"="RO"."SERVICEOFF_ID")
    Bon couragae
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  17. #37
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Attention ce n'est pas équivalent : le OR proposé ne ramènera que ce qui commence ou finit par FINANCE, et pas une valeur où le mot cherché serait au milieu, telle que 'DEPARTEMENT DE FINANCE STOCHASTIQUE'.
    A ce niveau c'est un exemple j'ai une multitude de valeur possible et cela est au choix de l'utilisateur.

    Merci à vous Mohamed.Houri, je vais regardé cela ... j'avoue cependant pas tout comprendre

  18. #38
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    je reprend les commentaires les uns après les autres et je remarque que l'index utilisé ne me semble pas judicieux et n'est pas en rapport avec ma jointure ou alors je ne comprend pas ....

    Ma table a plusieurs index dont un AIAEMENROLLMENT1 qui reprend :
    CLIENT, ENROLLMENT_PK

    qui correspond plus à ma jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INNER JOIN aemenrollment ro  ON (ro.enrollment_pk = rp.enrollment_fk AND ro.client = 'P1' AND ro.status = 'N' )
    alors que celui qui semble utilisé est :

    AIAEMENROLLMENT3 qui reprend :
    CLIENT, SERVICE_ID, SERVICEOFF_ID

    qui se rapproche de cette jointure , mais qui concerne une autre table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INNER JOIN aemserviceoff so ON (so.service_id = ro.service_id and  so.serviceoff_id = ro.serviceoff_id AND so.client = 'P1' AND so.status = 'N' )
    et je vois dans le plan que pour cette table j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TABLE ACCESS FULL           | AEMSERVICEOFF
    alors que j'ai un index AIAEMSERVICEOFF1 qui reprend :
    CLIENT, SERVICE_ID, SERVICEOFF_ID

    j'avoue être un peu perdu

  19. #39
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Peux tu poster le nouveau plan de la requête avec les stats.
    Que donne le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select REL_VALUE, count(*)
      from agldimvalue
     group by REL_VALUE

  20. #40
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Peux tu poster le nouveau plan de la requête avec les stats.
    Que donne le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select REL_VALUE, count(*)
      from agldimvalue
     group by REL_VALUE
    AGRESSO, sort de ce corps !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Requête sur une vue indexée
    Par VladTepes dans le forum Développement
    Réponses: 0
    Dernier message: 10/08/2010, 17h37
  2. [WD15] Requête sur une vue.
    Par thierrybatlle dans le forum WinDev
    Réponses: 19
    Dernier message: 03/06/2010, 09h14
  3. Réponses: 8
    Dernier message: 03/05/2010, 11h30
  4. Problème de requête sur une vue Hibernate
    Par littlebear dans le forum Hibernate
    Réponses: 16
    Dernier message: 05/01/2009, 14h48
  5. Temps d'execution d'un select sur une vue
    Par rosewood dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2005, 16h06

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