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

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

Oracle Discussion :

[9.2] Performance et requêtes


Sujet :

Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut [9.2] Performance et requêtes
    Voilà...
    J'ai migré une base existante, d'UNIX (Oracleve 8.1.7) vers NT (Oracle 9.2.1.0)... OK !

    J'envoie une requette 'SELECT' :
    L'une tourne sur un UNIX en Oracle 8.1.7, et met 0,01 seconde à donner un résultat ...
    Et l'autre sur NT en 9.2.1.0... met 3 minutes avant de donner un résultat ...

    Le contenu des tables est rigouresement identique... les rebuilt et analyse des index et clés primaires ont été effectués dans les deux bases !

    Qu'est-ce que j'ai bien pu ommettre dans le paramètrage de ma base 9i, pour qu'il y ait une si énorme différence ?

    Questions : Quel est l'utilité des DB_CACHE_SIZE, DB_KEEP_CACH_SIZE, et DB_RECYCLE_CACHE_SIZE ?

  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
    Bonjour ,

    Pourriez vous éditer le titre afin de le rendre plus clair

    Que donnent les plan d'éxècutions ?

    DB_CACHE_SIZE: Taille du cache de données
    DB_KEEP_CACH_SIZE: Taille du cache pour les objet qui sont Keeper ou eépinglés
    DB_RECYCLE_CACHE_SIZE : Taille du cache pour les objets qui sont dans le pool recycle

    Les deux derniers sont optionnells , le premier s'il n'est pas paramétré , Oracle en 9i reprend la fameuse formule : DB_BLOCK_BUFFER * DB_BLOCK_SIZE

    Jaouad

  3. #3
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut
    Ja vais tenter d'être plus clair ...
    J'ai un select du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT toto,tata
    FROM TB1 (319 lignes)
             TB2 (37000 lignes)
             TB2 (702 000 lignes) 
           WHERE TB2.DOSSIER =  TB3.DOSSIER
          AND       TB2.NOBIS =     TB3.NOBIS
          AND TB2.variable ='SODEM'...
    là, sur UNIX ou NT la réponse est très rapide... C'est OK car les index sont utilisés de la même façon !

    quand j'effectue la même requette avec un 'OR' en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT toto,tata
    FROM TB1 (319 lignes)
             TB2 (37000 lignes)
             TB2 (702 000 lignes) 
           WHERE TB2.DOSSIER =  TB3.DOSSIER
          AND       TB2.NOBIS =     TB3.NOBIS
          AND (TB2.variable ='SODEM' or [b]TB2.variable = 'SODER'[/b])
    Sur Unix, c'est hyper rapide... sur NT la requette dure 3 minutes... l'enfer !

    J'ai effectué des AUTOTRACE sur UNIX, et voila ce que ça donne...

    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=9057 Card=88255 Bytes=6883890)
    1 0 NESTED LOOPS (Cost=9057 Card=88255 Bytes=6883890)
    2 1 HASH JOIN (Cost=77 Card=4490 Bytes=206540)
    3 2 TABLE ACCESS (FULL) OF 'TB1' (Cost=1 Card=319 Bytes =4785)
    4 2 TABLE ACCESS (FULL) OF 'TB2' (Cost=66 Card=4490 Bytes=139190)
    5 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB3' (Cost=2 Card=706665 Bytes=22613280)
    6 5 INDEX (UNIQUE SCAN) OF 'PK_TB2' (cle primaire de TB2)(UNIQUE) (Cost=1 Card=706665)

    Statistics
    ----------------------------------------------------------
    0 recursive calls
    14 db block gets
    1165 consistent gets
    911 physical reads
    0 redo size
    2098 bytes sent via SQL*Net to client
    284 bytes received via SQL*Net from client
    3 SQL*Net roundtrips to/from client
    9 sorts (memory)
    0 sorts (disk)
    20 rows processed
    ça fonctionne correctement... en 0.01 seconde

    Sur NT... la catastrophe...


    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=8070 Card=87749 Bytes=6844422)
    1 0 HASH JOIN (Cost=8070 Card=87749 Bytes=6844422)
    2 1 TABLE ACCESS (FULL) OF 'TB1' (Cost=2 Card=319 Bytes=4785)
    3 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB2' (Cost=8061,83547349652 Card=1 Bytes=31)
    4 3 NESTED LOOPS (Cost=8061,83547349652 Card=87749 Bytes=5528187)
    5 4 TABLE ACCESS (FULL) OF 'TB3' (Cost=888 Card=701988 Bytes=22463616)

    6 4 BITMAP CONVERSION (TO ROWIDS)
    7 6 BITMAP AND
    8 7 BITMAP CONVERSION (FROM ROWIDS)
    9 8 INDEX (RANGE SCAN) OF 'TPK_TB2 (cle primaire de TB2) (UNIQUE)
    10 7 BITMAP CONVERSION (FROM ROWIDS)
    11 10 INDEX (RANGE SCAN) OF 'IDX1_MOUVEMENT' (NON-UNIQUE) (Cost=43 Card=8)

    Statistics
    ----------------------------------------------------------
    0 recursive calls
    0 db block gets
    0 consistent gets
    0 physical reads
    0 redo size
    0 bytes sent via SQL*Net to client
    0 bytes received via SQL*Net from client
    0 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    5 rows processed
    En fait, quand on rajoute le 'OR', il ne prends pas l'index de TB3 et fait un acces FULL...
    Comment lui faire prendre l'index de la table la + volumineuse ?
    Cela ne doit pas être facile pour vous de voir le problème, mais peut-être avez-vous une idée car je désespère !

    Merci de m'avoir lu !

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut

  5. #5
    Membre éclairé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2003
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 701
    Points : 710
    Points
    710
    Billets dans le blog
    1
    Par défaut
    bonjour,

    je crois que dans certains cas, il faut préciser l' optimiseur d' oracle8 .
    je ne suis pas sur que ce soit un bug ...

    peux-tu passer en 9.2.0.6 sur w2k ?

    cdlt

  6. #6
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut
    Quel genre de précision ? Où plutôt, comment spécifier l'optimiseur d'Oracle ?
    J'ai effectué les DBMS_STATS sur les tables et les index, et c'est toujours pareil...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Avec un UNION au lieu du OR, ça devrait aller mieux jpense...

  8. #8
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut
    En effet, ça va beaucoup mieux... le UNION se comporte comme un chef ! Il rends une réponse en 3/4 de miettes de secondes... (Alors que le 'IN' est aussi long que le 'OR'... voire plus !)
    C'est bizarre les optimiseurs non ? Je crois que mes utilisateurs devront se contenter de cette 'solution', parce que ça fait 2 jours que je galère...

    En tout cas je te remercie...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par genio
    En effet, ça va beaucoup mieux... le UNION se comporte comme un chef ! Il rends une réponse en 3/4 de miettes de secondes... (Alors que le 'IN' est aussi long que le 'OR'... voire plus !)
    C'est bizarre les optimiseurs non ? Je crois que mes utilisateurs devront se contenter de cette 'solution', parce que ça fait 2 jours que je galère...

    En tout cas je te remercie...

    L'UNION s'imposait vu les temps que tu proposais !!

    Pour les IN, c'est très efficace pourtant quand la liste est courte, donc je suis assez surpris de ton résultat. Peut-être qu'en fait ça se comporte comme un OR, ça ne serait pas illogique après tout...

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

Discussions similaires

  1. Performance - Sous requête ou jointure
    Par Shivan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/12/2008, 16h06
  2. problème de performance sur requête avec Tsearch2
    Par Morpheas dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 05/02/2008, 12h25
  3. Performance des requêtes - jointure par fonctions
    Par denevers dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 07/12/2007, 15h11
  4. Chute des performances à chaque requête
    Par Logrus dans le forum JDBC
    Réponses: 2
    Dernier message: 03/11/2007, 13h19
  5. [performances] 40 requêtes INSERT
    Par Tukan dans le forum Requêtes
    Réponses: 6
    Dernier message: 15/10/2006, 14h16

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