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 :

Temps de reponse


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut Temps de reponse
    j'ai la requete suivante qui a une reponse rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT   W_PALLET_MOVEMENT.FGT_NUMBER
      FROm W_PALLET_MOVEMENT,W_PALLET_DETAIL_MOVEMENT 
       WHERE( W_PALLET_MOVEMENT.PLMV_ID=W_PALLET_DETAIL_MOVEMENT.PLMV_ID (+) and 
     W_PALLET_MOVEMENT.MOVEMENT_OWNER=W_PALLET_DETAIL_MOVEMENT.PDMV_OWNER (+)  )
      AND  ( ( W_PALLET_DETAIL_MOVEMENT.FGT_NUMBER  = '132296650' ) ) ;
    j'ai une deuxième requète tout aussi rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT   W_PALLET_MOVEMENT.FGT_NUMBER
      FROm W_PALLET_MOVEMENT,W_PALLET_DETAIL_MOVEMENT 
       WHERE( W_PALLET_MOVEMENT.PLMV_ID=W_PALLET_DETAIL_MOVEMENT.PLMV_ID (+) and 
     W_PALLET_MOVEMENT.MOVEMENT_OWNER=W_PALLET_DETAIL_MOVEMENT.PDMV_OWNER (+)  )
      AND  ( ( W_PALLET_DETAIL_MOVEMENT.erp_serial_number  = '132296650' ) ) ;
    Lorsque je reunis les deux requètes par 'un or' sur la condition et que j'active celle-ci je génère trop d'extent pour mon fichier temp
    sachant que j'ai un index sur chacun des champs de ma condition
    quelqu'un pourrait-il m'expliquer .

    Edit par bouyao :

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    et si tu donnais la derniére requête et les explains plans ?

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Voici la requête :
    SELECT w_pallet_movement.fgt_number
    FROM w_pallet_movement, w_pallet_detail_movement
    WHERE w_pallet_movement.plmv_id = w_pallet_detail_movement.plmv_id (+)
    AND w_pallet_movement.movement_owner =
    w_pallet_detail_movement.pdmv_owner (+)
    AND (w_pallet_detail_movement.fgt_number = '132296650'
    OR w_pallet_detail_movement.erp_serial_number = '132296650')

    et le plan :

    5[IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_1.gif[/IMG]SELECT STATEMENT4[IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_2.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_3.gif[/IMG]FILTER3[IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_5.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_4.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_6.gif[/IMG]HASH JOIN [OUTER]1[IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_5.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_5.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_7.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_8.gif[/IMG]WESCRE.W_PALLET_MOVEMENT TABLE ACCESS [FULL]2[IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_5.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_5.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_9.gif[/IMG][IMG]file:///C:/oracle/ora92/sysman/report/nio197_970652109/1_8.gif[/IMG]WESCRE.W_PALLET_DETAIL_MOVEMENT TABLE ACCESS [FULL]

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Pouvez-vous fournir un explain plan lisible sans les images ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    explain plan for ...
    select * from table (dbms_xplan.display);

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    excuse moi , voici l'explain du premier select avec une seule condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     PLAN_TABLE_OUTPUT
    ----------------------
    | Id  | Operation              |  Name                 | Rows  | Bytes | Cost  |
    ----------------------------------------------------------------------
    | 0 | SELECT STATEMENT    |                        |    11 |   396 |    33 |
    | 1 |  NESTED LOOPS          |                        |    11 |   396 |    33 |
    | 2 |   TABLE ACCESS BY INDEX ROWID|W_PALLET_DETAIL_MOVEMENT     |    11 |   198 |    11 |
    | 3 |    INDEX RANGE SCAN  | W_PALLET_DETAIL_MOVEMENT_I3 |11| |3 |
    | 4 |   TABLE ACCESS BY INDEX ROWID| W_PALLET_MOVEMENT  |1|18|2|
    | 5 |    INDEX UNIQUE SCAN | W_PALLET_MOVEMENTC1             |1 |  |1|
    ---------------------------------------------------------------------------------------------
    Note: cpu costing is off, 'plan_table' is old version
    Voici l'explain avec la condition OR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     -----------------------------------------------------------------------
    | Id  | Operation            |  Name                     | Rows  | Bytes | Cost  |
    -----------------------------------------------------------------------
    |0 | SELECT STATEMENT     |                           | 18M|   980M| 81444 |
    |1 |  FILTER                      |                           |       |       |       |
    |2 |   HASH JOIN OUTER     |                           |       |       |       |
    |3 |   TABLE ACCESS FULL  |W_PALLET_MOVEMENT|  8223K|141M|14498|
    |4 |    TABLE ACCESS FULL | W_PALLET_DETAIL_MOVEMENT|18M|670M|35873 |
    ----------------------------------------------------------------------------------
    Note: cpu costing is off, 'plan_table' is old version
    j'ai un index sur W_PALLET_MOVEMENT et un sur W_PALLET_DETAIL_MOVEMENT

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    C'est clair : une seule clause et vous manipulez 396 octets grâce aux indexes.

    Avec le OR, il n'y a plus d'indexes appropriés donc vous parcourez toutes les tables intégralement, soit 980 Mo manipulés...

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Mais j'ai bien un index sur les deux champs repris dans la clause , alors qu'entendez-vous par ' indexes appropriés ' .

  8. #8
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Comme vous ne donnez ni la structure des tables impliquées, ni les indexes existants, ni la fameuse reqûete qui prend du temps.....

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci pour ton aide et voici les infos demandées :

    table W_PALLET_MOVEMENT :

    PLMV_ID NOT NULL NUMBER(12)
    MOVEMENT_OWNER NOT NULL CHAR(1)
    U_VERSION CHAR(1)
    MOVEMENT_CODE CHAR(20)
    OPERATION_CODE NOT NULL CHAR(20)
    SUB_OPERATION_CODE CHAR(20)
    PALLET_OWNER CHAR(1)
    FGT_NUMBER CHAR(9)
    PALLET_TYPE CHAR(2)
    PACKING_TARE NUMBER
    PALLET_HEIGHT NUMBER
    PALLET_WIDTH NUMBER
    PALLET_LENGTH NUMBER
    NET_WEIGHT NUMBER
    GROSS_WEIGHT NUMBER
    PACK_PALLET_TYPE CHAR(5)
    BIN_COORD_X CHAR(20)
    BIN_COORD_Y CHAR(20)
    BIN_COORD_Z CHAR(20)
    WOOD_PALLET_TYPE CHAR(1)
    WOOD_PALLET_THICKNESS NUMBER
    PACK_END_DISK CHAR(1)
    SOURCE_SITE CHAR(3)
    PREVIOUS_SITE CHAR(3)
    PREVIOUS_ZONE CHAR(10)
    CURRENT_SITE CHAR(3)
    CURRENT_ZONE CHAR(10)
    FINAL_SITE CHAR(3)
    STATUS_CODE CHAR(2)
    QC_DECISION CHAR(1)
    CODE_DEFECT_CATEGORY CHAR(2)
    CODE_DEFECT_SUB_CATEGORY CHAR(2)
    FIRST_ENTRY_DATE DATE
    LAST_MOVEMENT_DATE DATE
    PRODUCTION_DATE DATE
    BIN_PRODUCTION_DATE DATE
    STRAPEX_STATUS_CODE CHAR(1)
    PICKING_TYPE CHAR(1)
    TS_CREATED DATE
    TS_OPERATOR_CREATED CHAR(20)
    TS_CHANGED DATE
    TS_OPERATOR_CHANGED CHAR(20)
    INV_CREATION_REASON_CODE CHAR(2)

    index
    W_PALLET_MOUVEMENTI2 (PALLET_OWNER, FGT_NUMBER, PLMV_ID)
    W_PALLET_MOVEMENTC1 (PLMV_ID, MOVEMENT_OWNER)
    W_PALLET_MOVEMENTI3 (FGT_NUMBER)



    table W_PALLET_DETAIL_MOVEMENT :

    PDMV_ID NOT NULL NUMBER(12)
    PLMV_ID NOT NULL NUMBER(12)
    PDMV_OWNER NOT NULL CHAR(1)
    U_VERSION CHAR(1)
    PALLET_OWNER CHAR(1)
    FGT_NUMBER CHAR(9)
    SEQUENCE_NUMBER NUMBER(2)
    PRODUCTION_DATE DATE
    PRODUCTION_DUE_DATE DATE
    PDN_TYPE CHAR(2)
    PDN_NUMBER CHAR(10)
    PDN_SOURCE CHAR(3)
    PDN_SERIAL CHAR(2)
    SERIAL_NUMBER CHAR(20)
    ERP_SERIAL_NUMBER CHAR(20)
    BOM_VERSION_TYPE CHAR(3)
    BOM_VERSION_LABEL CHAR(2)
    SOURCE_SITE CHAR(3)
    SOURCE_SUPPLIER CHAR(10)
    POSITION_IN_PALLET CHAR(2)
    QTY_PLANNED NUMBER(6)
    QTY_CURRENT NUMBER(6)
    ACTUAL_WEIGHT NUMBER
    ORDER_OWNER CHAR(1)
    ORDER_NUMBER CHAR(10)
    ORDER_TYPE CHAR(1)
    ORDER_LINE_NUMBER NUMBER(3)
    ORDER_LINE_VERSION CHAR(3)
    ORDER_ERP CHAR(15)
    ORDER_LINE_ERP NUMBER(6)
    OBTAINING CHAR(1)
    PRODUCT_OWNER_IN CHAR(1)
    PRODUCT_IN CHAR(15)
    PRODUCT_OWNER_OUT CHAR(1)
    PRODUCT_OUT CHAR(15)
    QC_DECISION CHAR(1)
    CODE_DEFECT_CATEGORY CHAR(2)
    CODE_DEFECT_SUB_CATEGORY CHAR(2)
    TS_CREATED DATE
    TS_OPERATOR_CREATED CHAR(20)
    TS_CHANGED DATE

    INDEX :
    W_PALLET_DETAIL_MOVEMENTP1 (PLMV_ID, PDMV_OWNER, PDMV_ID)
    W_PALLET_DETAIL_MOVEMENT_I2 (ERP_SERIAL_NUMBER)
    W_PALLET_DETAIL_MOVEMENT_I3 (FGT_NUMBER)


    select :
    SELECT
    W_PALLET_MOVEMENT.FGT_NUMBER
    FROM
    W_PALLET_MOVEMENT,
    W_PALLET_DETAIL_MOVEMENT
    WHERE
    ( W_PALLET_MOVEMENT.PLMV_ID=W_PALLET_DETAIL_MOVEMENT.PLMV_ID (+) and
    W_PALLET_MOVEMENT.MOVEMENT_OWNER=W_PALLET_DETAIL_MOVEMENT.PDMV_OWNER (+) )
    AND ( ( W_PALLET_DETAIL_MOVEMENT.FGT_NUMBER = '132296650' ) or
    ( W_PALLET_DETAIL_MOVEMENT.ERP_SERIAL_NUMBER = '132296650' ) ) ;

  10. #10
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut


    Le temps passé à éditer vos messages (bouayo ou moi-même, par exemple) , c'est autant de temps en moins pour vous aider sur le fond du problème....

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    La cardinalité dégagé par vos deux valeurs et assez importante pour qu'oracle juge qu'un FTS soit moins couteux

    Construisez des histogrammes sur vos colonnes indéxès et le cas échéant essayer un Hint

    Ps : s'il vous plait veuillez utilisez les balises codes , cela fait moins de travail pour les modos qui peuvent passer plus de temps sur votre probléme

  12. #12
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    question bête... avez-vous tout simplement un UNION entre vos deux requêtes ?

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    L'union marche tres bien .
    mais le problème est que la requête est générée par Business Objects avec un OR et celui-ci fait éclater mon fichier temp .

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

Discussions similaires

  1. nvl et temps de reponse
    Par yrogerg_d dans le forum SQL
    Réponses: 20
    Dernier message: 09/11/2006, 15h54
  2. [XPath] meilleur API au niveau du temps de reponse
    Par Mouss99 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/09/2006, 18h58
  3. temps de reponse d'une requetes ?
    Par Melvine dans le forum Oracle
    Réponses: 1
    Dernier message: 27/03/2006, 17h54
  4. Réponses: 4
    Dernier message: 13/03/2006, 18h46
  5. ameliorer le temps de reponse
    Par subzero82 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/08/2005, 13h18

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