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 :

[Oracle] performance entre ANSI join et Natural join


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut [Oracle] performance entre ANSI join et Natural join
    Bonjour,

    Je suis conforter à un problème que je ne comprends pas bien. Nous appliquons actuellement sur nos projet la norme ANSI pour effectuer les jointures dans les requêtes et vues (sur du Oralce 9iR2 9.2.0.7). Il en est ressorti de nombreux problèmes de performance.
    Je me suis donc penché dessus et j'ai constaté ceci :
    Lorsque la requête contient de nombreuse jointure ANSI, les plans d'exécution mettent un temps fou à être calculés. Si je transforme ces jointures en "Natural Join", c'est super rapide (on passe de 20 secondes à 1 seconde).

    Quelqu'un a-t'il déjà rencontré ce problème ? Y'a-t'il un problème de paramétrage de la base ?

    Merci d'avance.

    Aurélien

  2. #2
    Expert confirmé 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
    Par défaut
    Citation Envoyé par AurelGTS Voir le message
    ...
    Lorsque la requête contient de nombreuse jointure ANSI, les plans d'exécution mettent un temps fou à être calculés. Si je transforme ces jointures en "Natural Join", c'est super rapide (on passe de 20 secondes à 1 seconde).
    ...
    Bonjour Aurélien,

    Tu parle bien de calcul des plans d'exécution par le CBO, trace possible via l'événement 10053 ou des temps d'exécution des requêtes ?

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Un exemple (ansi/natural) afin de voir d'ou vient le souci ?

    Par natural joins tu fais références au 'natural join xxxx' ou à la syntaxe traditionelles des jointures made in Oracle (SQL86)[FONT=Courier New][/FONT]
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Bonjour,

    Par natural join, je fais référence à l'écriture ancienne Oracle :AND, OR, (+).

    Pour l'exemple, je vais avoir du mal à donner un jeu de données étant donné les nombre de table qu'il faut introduire (environ 15-20 jointures dans les problèmes que je rencontre.)

    Peut-être auriez-vous le temps de faire le test sur des requêtes importantes sur vos environnements (sans vouloir abuser...).

    Sinon, je parle bien du calcul du plan d'execution par le CBO, oui.

    Aurélien

  5. #5
    Expert confirmé 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
    Par défaut
    J’ai connaissance d’un problème similaire concernant Oracle 10R2. Pour certaines requêtes l’optimiseur CBO a besoin d’un minute (58 secondes) pour élaborer les plans d’exécutions (au passage ça sert à rien de mentionner qu’il trouvait les bons plans). L’équipe qui a constaté le problème a ouvert un TAR avec Oracle et comme solution de contournement ils ont utilisé le RBO . Récemment ils ont reçu un patch qui corrige le problème.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    C'est bon à savoir. Je vais voir si on a le support d'Oracle.

    Merci

Discussions similaires

  1. [Oracle] [Oracle] Natural join/join impossible.Tables mal construites ?
    Par Louack dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 07/04/2010, 11h20
  2. NATURAL JOIN USING vs JOIN ON
    Par cbalmefrezol dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/10/2008, 09h45
  3. Différence de performance entre JOIN et Subselect ?
    Par guidav dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/07/2007, 10h01
  4. Réponses: 1
    Dernier message: 15/11/2006, 15h35
  5. Requête avec NATURAL JOIN
    Par blids dans le forum SQL
    Réponses: 4
    Dernier message: 06/08/2004, 11h52

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