IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[Tuning] Temps execution


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Par défaut [Tuning] Temps execution
    Bonjour,

    Je suis débutant (mais alors vraiment débutant !), et j'ai "hérité" d'une BD et d'un site intranet déjà développés, mais à faire évoluer...
    Je suis sous Oracle 8i, et l'une de mes requêtes met un temps assez exeptionnel à s'exécuter ( 1 min 30 s) ; et comme je dois l'utiliser à plusieurs reprises, j'atteins plus d'une heure d'attente...
    Cette requête est utilisée de la même façon sur plusieures tables différentes, mais le temps de chargement varie selon la table changée. Je m'explique, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numaff FROM donnees, communes, agents, delais
    WHERE to_char(communes.code_insee)=donnees.code_insee 
    AND (donnees.ident=agents.initiales or donnees.ident=agents.code) 
    AND delais.maj<=10 
    AND delais.numaff=donnees.numaff and to_char(donnees.datemaj)=2006
    Ici, tout va très bien, seulement si je remplace la table 'donnees' par 'archives' (cette table est une table archivant les données de la table 'donnees', donc avec les mêmes colonnes) le temps de chargement explose.
    J'ai rajouté numaff en clé primaire dans la table 'archives' et indexé cette table (ces 2 manip' avaient déjà été effectuées sur la table 'donnees') en pensant que ça permettrait de raccourcir le temps de chargement, mais ça n'a rien changé.
    Comme ces 2 tables sont similaires et que mes connaissances sont plus que limitées, je sèche vraiment !

    Si quelqu'un avait une idée sur le pourquoi du comment de cette bizarrerie...

  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
    Par défaut
    Peux t'on avoir la volulmétrie pour chaques tables et surtout l'explain Plan

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Par défaut
    Citation Envoyé par Jaouad
    Peux t'on avoir la volulmétrie pour chaques tables
    => environ 800 données dans la première table et 1500 dans la table 'archives', le tout pour 46 colonnes...


    Citation Envoyé par Jaouad
    l'explain Plan
    kesako ?!


    Citation Envoyé par davy.g
    Les fonctions (ici TO_CHAR) dans la clause WHERE, c'est pas terrible pour les performances il me semble !!!
    Je sais, mais je ne crois pas avoir vraiment le choix...

  4. #4
    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
    Par défaut
    tu ne dois pas passer par l'index :

    sous Sql*Plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set autot trace exp stat 
    set timing on 
    WHERE to_char(communes.code_insee)=donnees.code_insee 
    AND (donnees.ident=agents.initiales or donnees.ident=agents.code) 
    AND delais.maj<=10 
    AND delais.numaff=donnees.numaff and to_char(donnees.datemaj)=2006 ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Par défaut
    Citation Envoyé par Jaouad
    tu ne dois pas passer par l'index :

    sous Sql*Plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set autot trace exp stat 
    set timing on 
    WHERE to_char(communes.code_insee)=donnees.code_insee 
    AND (donnees.ident=agents.initiales or donnees.ident=agents.code) 
    AND delais.maj<=10 
    AND delais.numaff=donnees.numaff and to_char(donnees.datemaj)=2006 ;
    Je ne peux pas passer sous sql plus : je l'exécute dans une page internet (.jsp) (rectifiez moi si je me trompe)
    Voici les "codes" des tables :
    donnees :
    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
    CREATE TABLE "COMMUN"."DONNEES"("CDCHAN" NUMBER NOT NULL, "NUMAFF" 
        VARCHAR2(6) NOT NULL, "ZONA4" NUMBER, "DEPCHA" VARCHAR2(10), 
        "CMMCHA" VARCHAR2(10), "ADRCHA" VARCHAR2(33), "LIBELCHA" 
        VARCHAR2(55), "LIBCHA" VARCHAR2(20), "AUTORIS" VARCHAR2(2), 
        "SRCHA" NUMBER, "RESPMCH" VARCHAR2(4), "DRSCHA" NUMBER, "NUMVS1" 
        NUMBER, "NUMVS2" NUMBER, "ZONA8" VARCHAR2(10), "ZONB8" VARCHAR2(
        10), "ZONA9" VARCHAR2(10), "ZONB9" VARCHAR2(10), "AGENTCHA" 
        VARCHAR2(4), "TYPAFG" VARCHAR2(10), "INDCA" VARCHAR2(2), "INDBR" 
        VARCHAR2(2), "INDSR" VARCHAR2(2), "INDHR" VARCHAR2(2), "JUSCHA1" 
        VARCHAR2(60), "JUSCHA2" VARCHAR2(60), "JUSCHA3" VARCHAR2(60), 
        "RETCHA1" VARCHAR2(70), "RETCHA2" VARCHAR2(70), "RETCHA3" 
        VARCHAR2(70), "ZONA10" VARCHAR2(10), "RESPAUT" VARCHAR2(4), 
        "ZCAL13A" VARCHAR2(20), "ZCAL13B" VARCHAR2(20), "ZCAL13C" 
        VARCHAR2(20), "SERVICE" VARCHAR2(2), "ALARCHA" VARCHAR2(2), 
        "COMPLOT" VARCHAR2(2), "ZCAL11A" VARCHAR2(20), "ZCAL11B" 
        VARCHAR2(20), "ZCAL11C" VARCHAR2(20), "ZCAL9D" VARCHAR2(20), 
        "ZCAL15A" VARCHAR2(20), "ZCAL15B" VARCHAR2(20), "ZCAL15C" 
        VARCHAR2(20), 
        CONSTRAINT "NUMCHAKEY" PRIMARY KEY("NUMCHA") USING 
        INDEX  
        TABLESPACE "COMMUN" 
        STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505 
        PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10 
        INITRANS 2 MAXTRANS 255) 
        TABLESPACE "COMMUN" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 
        255 
        STORAGE ( INITIAL 16K NEXT 960K MINEXTENTS 1 MAXEXTENTS 121 
        PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) 
        PARALLEL ( DEGREE DEFAULT ) 
        NOLOGGING
    archives :
    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
    CREATE TABLE "COMMUN"."ARCHIVES"("CDCHAN" NUMBER NOT NULL, 
        "NUMAFF" VARCHAR2(6) NOT NULL, "ZONA4" NUMBER, "DEPCHA" VARCHAR2(
        10), "CMMCHA" VARCHAR2(10), "ADRCHA" VARCHAR2(33), "LIBELCHA" 
        VARCHAR2(55), "LIBCHA" VARCHAR2(20), "AUTORIS" VARCHAR2(2), 
        "SRCHA" NUMBER, "RESPMCH" VARCHAR2(4), "DRSCHA" NUMBER, "NUMVS1" 
        NUMBER, "NUMVS2" NUMBER, "ZONA8" VARCHAR2(10), "ZONB8" VARCHAR2(
        10), "ZONA9" VARCHAR2(10), "ZONB9" VARCHAR2(10), "AGENTCHA" 
        VARCHAR2(4), "TYPAFG" VARCHAR2(10), "INDCA" VARCHAR2(2), "INDBR" 
        VARCHAR2(2), "INDSR" VARCHAR2(2), "INDHR" VARCHAR2(2), "JUSCHA1" 
        VARCHAR2(60), "JUSCHA2" VARCHAR2(60), "JUSCHA3" VARCHAR2(60), 
        "RETCHA1" VARCHAR2(70), "RETCHA2" VARCHAR2(70), "RETCHA3" 
        VARCHAR2(70), "ZONA10" VARCHAR2(10), "RESPAUT" VARCHAR2(4), 
        "ZCAL13A" VARCHAR2(20), "ZCAL13B" VARCHAR2(20), "ZCAL13C" 
        VARCHAR2(20), "SERVICE" VARCHAR2(2), "ALARCHA" VARCHAR2(2), 
        "COMPLOT" VARCHAR2(2), "ZCAL11A" VARCHAR2(20), "ZCAL11B" 
        VARCHAR2(20), "ZCAL11C" VARCHAR2(20), "ZCAL9D" VARCHAR2(20), 
        "ZCAL15A" VARCHAR2(20), "ZCAL15B" VARCHAR2(20), "ZCAL15C" 
        VARCHAR2(20), "DATE_ARCHIVE" DATE NOT NULL, 
        CONSTRAINT "NUMCHAARCHKEY" PRIMARY KEY("NUMCHA") USING 
        INDEX  
        TABLESPACE "COMMUN" 
        STORAGE ( INITIAL 40K NEXT 64K MINEXTENTS 1 MAXEXTENTS 505 
        PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10 
        INITRANS 2 MAXTRANS 255) 
        TABLESPACE "COMMUN" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 
        255 
        STORAGE ( INITIAL 16K NEXT 1440K MINEXTENTS 1 MAXEXTENTS 121 
        PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) 
        PARALLEL ( DEGREE DEFAULT ) 
        NOLOGGING

  6. #6
    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
    Par défaut
    Dans ce cas là est ce que tu peux me donner les ordres de création de l'index

  7. #7
    Membre confirmé Avatar de Arvulis
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 117
    Par défaut
    Jaouad a fait un bon tuto ici pour l'explain plan : http://oracle.developpez.com/guide/tuning/tkprof/

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Les fonctions (ici TO_CHAR) dans la clause WHERE, c'est pas terrible pour les performances il me semble !!!

  9. #9
    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
    Par défaut
    Citation Envoyé par davy.g
    Les fonctions (ici TO_CHAR) dans la clause WHERE, c'est pas terrible pour les performances il me semble !!!
    Par forcément , si un index fonction ( voir la partie : Pourquoi un index n'est pas utilisé )
    a été crée pour pallier à cela

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Peux tu donner une description de ta table ? :
    La clause WHERE suivante semble bizarre non ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and to_char(donnees.datemaj)=2006
    ca devrait être plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and to_char(donnees.datemaj)='2006'
    non ?

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

Discussions similaires

  1. [IIS][ASP.net] temps execution page aspx
    Par lenoil dans le forum IIS
    Réponses: 1
    Dernier message: 27/04/2007, 15h24
  2. [ methode ] temps execution
    Par hocinema dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 08/09/2005, 11h53
  3. temps execution CreateProcess
    Par dighou dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2005, 16h18
  4. [MFC] pb temps execution
    Par ricky78 dans le forum MFC
    Réponses: 4
    Dernier message: 21/01/2005, 11h50
  5. Temps execution mysql
    Par azman0101 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/07/2004, 09h42

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