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 :

Sous-select dans la clause FROM


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut Sous-select dans la clause FROM
    ORACLE 7.3
    est-ce que quelqu'un sait s'il y a un paramètre spécifique à renseigner dans le fichier de configuration ORACLE pour pouvoir utiliser plusieurs sous-select dans la clause FROM ?

    j'ai une requête avec 3 sous-select qui passe très bien sur un serveur de test (également en 7.3) et qui ne rend jamais la main sur notre serveur de prod (la session disparait et l'appli est sans réponse)
    avec 2 sous-select cela ne passe pas non plus, avec 1 seul c'est ok

    merci de votre aide

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est un problème de perf pas de syntaxe. Vérifie que la volumétrie est la même et que les indexes sont bien créés à l'identique.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Citation Envoyé par orafrance Voir le message
    c'est un problème de perf pas de syntaxe. Vérifie que la volumétrie est la même et que les indexes sont bien créés à l'identique.
    la volumétrie est la même, le USER de la base réelle a été dupliqué sur la base de test,
    la requête retourne 400 lignes en 15 secondes sur la BDD de test,

    je pense qu'il s'agit d'un problème avec l'optimizer qui rend son tablier devant une requête trop complexe : 3 sous-select + 5 tables dans la clause FROM
    après vérification des paramètres :
    optimizer_search_limit = 5 sur la BDD réelle n'est pas défini sur la BDD de test
    timed_statistics = true sur BDD réelle et = False sur BDD de test
    log_archive_start = true sur BDD réelle et = False sur BDD de test

    cela peut-il avoir une incidence ?

    je pense qu'une solution serait de zapper l'optimizer, mais j'ai du mal avec la doc en anglais, où puis-je trouver de la doc en français sur les HINT ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    timed_statistics peut-être optimizer_search_limit probablement pas puisque 5 est la valeur par défaut... éventuellement essaye 10

    log_archive_start n'a rien à voir avec les perfs

  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
    D'accord timed_statistics ajout un surcharge mais mais j'ai de doute que c'est lui la cause.

    Il n'est pas clair si sur le serveur de production la requête s'exécute ou pas, si non quelle est l'erreur ?

    Donc je pense que pour le serveur de test l'optimiseur des requêtes travail en mode règle et probablement en mode coût sur la base de production. Il est simple de vérifier par un hint SQL sur la base de production:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select /*+ RULE */ col1, col2, ... from ...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Je ne pensais pas que le CBO était dispo en 7.3... faudrait en effet vérifier l'optimizer mode

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Il n'est pas clair si sur le serveur de production la requête s'exécute ou pas, si non quelle est l'erreur ?

    Donc je pense que pour le serveur de test l'optimiseur des requêtes travail en mode règle et probablement en mode coût sur la base de production. Il est simple de vérifier par un hint SQL sur la base de production:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select /*+ RULE */ col1, col2, ... from ...
    il n'y a aucun message d'erreur, la session est virée sans autre explication,

    sinon les EXPLAIN PLAN sont les mêmes (sans hint) sur les 2 BDD,

    le hint /*+ RULE */ n'est pas reconnu sur la BDD d'epxloitation : aucun changement dans l'EXPLAIN PLAN alors qu'il est amélioré sur la BDD de test

    je pense qu'il s'agit bien d'un problème avec l'optimizer et les stats

  8. #8
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Citation Envoyé par DIJON Voir le message
    je pense qu'une solution serait de zapper l'optimizer, mais j'ai du mal avec la doc en anglais, où puis-je trouver de la doc en français sur les HINT ?
    Si tu veux juste te passer de l'optimiseur, tu peux utiliser /*+ RULE */.
    Quand à la doc Oracle officielle elle est malheureusement uniquement disponible en anglais à ma connaissance.
    (attention les hints ne sont pas recommandés... peut être qu'il te faut juste mettre à jour les stats)
    Quoi que je suis en train de me demander si l'optimiseur ne fonctionne pas forcément en mode RULE (c'est à dire utilisation des index en priorité) en version 7.3

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2014, 13h35
  2. [11g] Sous-requête dans la clause FROM
    Par FANDENEGI dans le forum SQL
    Réponses: 6
    Dernier message: 20/02/2014, 13h50
  3. [Doctrine] sous-requete dans la clause FROM
    Par jotatan dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 20/01/2012, 08h31
  4. select dans la clause From
    Par bidson dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/03/2007, 15h22
  5. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33

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