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 :

Optimisation de requete oracle


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Points : 59
    Points
    59
    Par défaut Optimisation de requete oracle
    Je lance une requete oracle sur 4 instances identiques (même schéma oracle), chaque instance est sur une base différente
    le temps de réponse de la requête est à l'ordre de 5mn, par contre sur linstance N°: 1, la requete ne repond pas pourtant tout est similaire, voici la requête et son plan d'exécution sur cette instance°1 :

    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
    SELECT  distinct psc.vente_id , pp.msisdn,sum(pp.amount),count(*) 
    FROM ppc_sim_cust psc, ppc_payments pp 
    WHERE pp.opsc_ask_state=5 
    AND pp.opsc_reply=0 
    AND psc.offre_id ='41'
    AND psc.status = 'i' 
    AND psc.stamsi = 'A' 
    AND psc.vente_id = pp.vente_id
    AND ((pp.opsc_reply_date is null 
          AND to_date('20061120','YYYYMMDD')<=pp.insert_date )
      OR (pp.opsc_reply_date is not null 
          AND to_date('20061120','YYYYMMDD')<=pp.opsc_reply_date )) 
    AND ( (pp.payment_object = 'R' AND pp.payment_type='RIB' ) OR ( pp.payment_object = 'R' AND pp.payment_type='CB') OR ( pp.payment_object = 'R' AND pp.payment_type='SC') OR ( pp.payment_object = 'R' AND pp.payment_type='DAB'))
    AND psc.vente_id NOT LIKE '%1'
    group by psc.vente_id , pp.msisdn
    having  count(*) > 4;
    Pourriez vous me dire d'ou pourrait venir cette difference de temps d'execution entre les instances et comment la trouver, et comment opitmiser cette requete, malgré que (AND psc.vente_id NOT LIKE '%1') n'utilse pas l'index a cause du %.

    Les deux tables ont un index sur le vente_id


    Merci de votre reponse,

    cdt,
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Points : 59
    Points
    59
    Par défaut
    Le plan d'execution est en PJ
    Merci

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    On pourrait avoir le plan sur une instance où ça va bien ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Plusieurs remarques et questions
    - Y a-t-il exactement les mêmes données sur toutes les bases ?
    - Les stats sont-t-elle à jour sur toutes les bases ?
    - Y a-t-il dans toutes les clauses de filtrage, une (ou une combinaison) qui est particulièrement discriminante (disons, renvoyant moins d'1/10 des données sur sa table...)
    - Les colonnes vente_id sont-elle indexées sur les 2 tables ?
    - Le distinct est parfaitement inutile puisqu'il y a un group-by (oracle l'a éliminé de lui meme d'après le plan)
    - tant qu'a faire un group-by sur vente_id, autant prendre la colonne coté PP et non PSC, histoire que les 2 colonnes de groupement appartiennent à la même table.

  5. #5
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 105
    Points
    105
    Par défaut
    Je vois que tu as une clause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AND psc.vente_id NOT LIKE '%1'
    dans ta requête, il est souvent judicieux d'éviter d'utiliser un like avec un motif qui commence par %.
    Peux tu tester la même requête sans ce like ?
    Le hasard ne favorise que les esprits préparés.

Discussions similaires

  1. Optimisation requete oracle
    Par Mehdilis dans le forum Oracle
    Réponses: 11
    Dernier message: 01/09/2006, 10h58
  2. Optimisation de requetes SQL sous oracle
    Par santana2006 dans le forum Oracle
    Réponses: 5
    Dernier message: 28/08/2006, 19h26
  3. [Oracle] Optimisation de requête
    Par bruno782 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/08/2006, 10h14
  4. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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