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

Administration Oracle Discussion :

Problème comportement Oracle


Sujet :

Administration Oracle

  1. #1
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut Problème comportement Oracle
    Bonjour,

    Je suis en Oracle 10GR2 et j'ai un souci que je vous expose ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    prod)>select * from CONTRAT partition (m200901) where NU_CONTRAT = '102795462';
    
    Execution Plan
    ----------------------------------------------------------
              0
    SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=1 Bytes=308)
              1                  0
      PARTITION RANGE (SINGLE) (Cost=11 Card=1 Bytes=308)
              2                  1
        TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'CONTRAT' (TABLE) (Cost=11 Card=1 Bytes=308)
              3                  2
          INDEX (SKIP SCAN) OF 'PK_CONTRAT' (INDEX (UNIQUE)) (Cost=10 Card=1)
    La réponse en quasi-instannée
    prod)>select * from CONTRAT partition (m200901) where nu_affa in ('112946548','102795462');

    Execution Plan
    ----------------------------------------------------------
    0
    SELECT STATEMENT Optimizer=CHOOSE (Cost=44037 Card=2 Bytes=616)

    1 0
    PARTITION RANGE (SINGLE) (Cost=44037 Card=2 Bytes=616)

    2 1
    TABLE ACCESS (FULL) OF 'CONTRAT' (TABLE) (Cost=44037 Card=2 Bytes=616)
    Ma table CONTRAT est partitionnée, les stats sur la partition sont bonnes.
    Pourquoi dans un cas, l'optimiseur Oracle utilise l'index et pas dans l'autre.
    Merci de vos réponses.
    LBO72.

  2. #2
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Petit complément :
    Dans le second cas, j'ai ma réponse au bout de 40s !!!!!

    En vous remerciant.
    LBO72.

  3. #3
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Je pense à un "problème" de sélectivité du CBO.
    En effet, il n'y a pas plus sélectif qu'une égalité : 1/nb de valeurs distinctes
    Le IN est moins sélectif (je ne connais la formule).
    Un hint index_ss devrait te donner le même plan que celui de ta 1ère requête.

  4. #4
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Merci bien 13thFloor,

    Je testerai le index_ss hint et te tiens au courant. Sinon, par hasard, connais-tu un bon livre en français qui traite ce genre de problématique de performance ?

    En te remerciant.
    LBO72

  5. #5
    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 LBO72 Voir le message
    Pourquoi dans un cas, l'optimiseur Oracle utilise l'index et pas dans l'autre.
    Parce que dans un cas vous filtrez sur une colonne indexée (qui se trouve être la clef primaire) et pas dans l'autre.

    Créez un index local sur le champ NU_AFFA.

  6. #6
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Merci Waldar pour votre réponse,

    Dans le deuxieme cas, je me suis planté de requête. Au fait elle est identique à la première sauf qu'elle utilise un IN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    prod)>select * from CONTRAT partition (m200901) where NU_CONTRAT in ('112946548','102795462');
    
    Execution Plan
    ----------------------------------------------------------
    0
    SELECT STATEMENT Optimizer=CHOOSE (Cost=44037 Card=2 Bytes=616)
    
    1 0
    PARTITION RANGE (SINGLE) (Cost=44037 Card=2 Bytes=616)
    
    2 1
    TABLE ACCESS (FULL) OF 'CONTRAT' (TABLE) (Cost=44037 Card=2 Bytes=616)
    alors que si je fais :

  7. #7
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    alors que si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    prod)>  SELECT * FROM CONTRAT PARTITION(m200901) 
             WHERE NU_CONTRAT IN('102795462')
    
    Execution Plan
    ----------------------------------------------------------
              0
    SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=1 Bytes=308)
              1                  0
      PARTITION RANGE (SINGLE) (Cost=11 Card=1 Bytes=308)
              2                  1
        TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'CONTRAT' (TABLE) (Cost=11 Card=1 Bytes=308)
              3                  2
          INDEX (SKIP SCAN) OF 'PK_CONTRAT' (INDEX (UNIQUE)) (Cost=10 Card=1)
    La réponse est instantanée.

    Cdlt,

  8. #8
    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
    Quel est le type de votre champ NU_CONTRAT ?

  9. #9
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Le champ est VARCHAR2(15).

    Merci.
    LBO72.

Discussions similaires

  1. Probléme avec oracle 9i ids
    Par Moez.B dans le forum Oracle
    Réponses: 3
    Dernier message: 06/04/2006, 11h41
  2. Réponses: 1
    Dernier message: 22/03/2006, 08h24
  3. Problème sur Oracle Toolbox
    Par Doctor Z dans le forum Oracle
    Réponses: 9
    Dernier message: 09/11/2004, 08h48
  4. Problème Migration Oracle
    Par bob_doulz dans le forum Administration
    Réponses: 4
    Dernier message: 20/04/2004, 09h56
  5. Problème composant Oracle
    Par alexmorel dans le forum Bases de données
    Réponses: 12
    Dernier message: 24/02/2004, 08h53

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