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 :

requête trop lente


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut requête trop lente
    Bonjour,
    J'ai une requête que je trouve qui est troooooooop lente en elle prend beaucoup de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(1)   FROM TABLE1
     
    WHERE ADM_CUSTOMER_ID =  (SELECT CUSTOMER_ID   
     
    FROM TABLE2  WHERE COL_2  IS NULL CONNECT BY CUSTOMER_ID = PRIOR  
     
    COL_2   START WITH CUSTOMER_ID = :b1  );
    Merci de m'aidez je suis complétement bloquez

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Description de vos tables, volumétrie, jeu de données, explain plan, version d'Oracle ?

    Les requêtes hierarchiques sont coûteuses, mais en avez-vous vraiment besoin ?

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut requête trop lente aidez moi ?.
    bonjour,

    Oracle version :8.1.7.4
    OS : Sun Solaris 64 bits 5.8

    Notre requete est :

    Explain Plan :
    Plan

    SELECT STATEMENT HINT: FIRST_ROWS Cost: 70,409 Bytes: 13 Cardinality: 1
    41 SORT AGGREGATE Bytes: 13 Cardinality: 1
    40 FILTER
    32 VIEW SYSADM.SEMA_NPTE_CUSTOMER Cost: 70,409 Bytes: 13 Cardinality: 1
    31 SORT UNIQUE Cost: 70,409 Bytes: 103 Cardinality: 1
    30 FILTER
    26 NESTED LOOPS Cost: 70,407 Bytes: 103 Cardinality: 1
    20 NESTED LOOPS Cost: 70,402 Bytes: 95 Cardinality: 1
    18 NESTED LOOPS Cost: 70,392 Bytes: 400 Cardinality: 5
    15 MERGE JOIN Cost: 66,732 Bytes: 79,300 Cardinality: 1,220
    12 SORT JOIN Cost: 66,729 Bytes: 1,844,808 Cardinality: 32,943

    11 NESTED LOOPS Cost: 66,365 Bytes: 1,844,808 Cardinality: 32,943
    8 MERGE JOIN Cost: 479 Bytes: 1,614,207 Cardinality: 32,943

    5 MERGE JOIN Cost: 456 Bytes: 2,848,096 Cardinality: 89,003

    2 SORT JOIN Cost: 421 Bytes: 1,246,042 Cardinality: 89,003

    1 TABLE ACCESS FULL SYSADM.CONTR_SERVICES_CUG Cost: 66 Bytes: 1,246,042 Cardinality: 89,003

    4 SORT JOIN Cost: 35 Bytes: 113,490 Cardinality: 6,305
    3 TABLE ACCESS FULL SYSADM.CLOSED_USER_GROUP Cost: 5 Bytes: 113,490 Cardinality: 6,305
    7 SORT JOIN Cost: 23 Bytes: 39,610 Cardinality: 2,330
    6 TABLE ACCESS FULL SYSADM.CUG_ADMINISTRATION Cost: 11 Bytes: 39,610 Cardinality: 2,330
    10 TABLE ACCESS BY INDEX ROWID SYSADM.CONTRACT_ALL Cost: 2 Bytes: 274,180,858 Cardinality: 39,168,694
    9 INDEX UNIQUE SCAN UNIQUE SYSADM.PKCONTRACT_ALL Cost: 1 Cardinality: 39,168,694
    14 SORT JOIN Cost: 4 Bytes: 9 Cardinality: 1
    13 TABLE ACCESS FULL SYSADM.RATEPLAN Cost: 2 Bytes: 9 Cardinality: 1
    17 TABLE ACCESS BY INDEX ROWID SYSADM.PROFILE_SERVICE Cost: 3 Bytes: 24,504,975 Cardinality: 1,633,665
    16 INDEX UNIQUE SCAN UNIQUE SYSADM.PK_PROFILE_SERVICE Cost: 2 Cardinality: 1,633,665
    19 INDEX UNIQUE SCAN UNIQUE SYSADM.PK_PR_SERV_STATUS_HIST Cost: 2 Bytes: 75,172,020 Cardinality: 5,011,468
    25 TABLE ACCESS BY INDEX ROWID SYSADM.CONTRACT_HISTORY Cost: 5 Bytes: 17,591,168 Cardinality: 2,198,896
    24 INDEX RANGE SCAN UNIQUE SYSADM.PKCONTRACT_HISTORY Cost: 4 Cardinality: 2,198,896
    23 SORT AGGREGATE Bytes: 8 Cardinality: 1
    22 TABLE ACCESS BY INDEX ROWID SYSADM.CONTRACT_HISTORY Cost: 6 Bytes: 16 Cardinality: 2
    21 INDEX RANGE SCAN UNIQUE SYSADM.PKCONTRACT_HISTORY Cost: 4 Cardinality: 2
    29 SORT AGGREGATE Bytes: 7 Cardinality: 1
    28 FIRST ROW Cost: 2 Bytes: 14 Cardinality: 2
    27 INDEX RANGE SCAN (MIN/MAX) UNIQUE SYSADM.PKCUG_ADMINISTRATION Cost: 2 Cardinality: 2
    39 FILTER
    38 CONNECT BY
    34 FILTER
    33 INDEX UNIQUE SCAN UNIQUE SYSADM.PKCUSTOMER_ALL Cost: 2 Bytes: 5 Cardinality: 1
    35 TABLE ACCESS BY USER ROWID SYSADM.CUSTOMER_ALL
    37 TABLE ACCESS BY INDEX ROWID SYSADM.CUSTOMER_ALL Cost: 3 Bytes: 7 Cardinality: 1
    36 INDEX UNIQUE SCAN UNIQUE SYSADM.PKCUSTOMER_ALL Cost: 2 Cardinality: 1
    sachant que ma table SEMA_NPTE_CUSTOMER est une vue crée sur une autre vue sema_npte_contract qui est crée sur des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE FORCE VIEW sysadm.sema_npte_customer (admin_customer_id, cug_id,cug_interlock_code, cug_activation_date)  
    AS
    SELECT DISTINCT admin_customer_id, cug_id, cug_interlock_code,
    cug_activation_dat
    FROM sema_npte_contract
    WHERE npte = 'X';
    merci de votre aide

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je déteste les vues...

    Alors si en plus la vue est basée sur une autre vue ...

    Faut savoir que les requêtes sur des vues sont équivalentes à remplacer le nom de la vue par son select.

    Essayes un peu pour voir ce que ça donne qu'on rigole, parce que sema_npte_contract, on ne sait pas du tout ce que c'est.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est moi, c'est moi !
    Citation Envoyé par McM Voir le message
    Je déteste les vues...

    Alors si en plus la vue est basée sur une autre vue ...

    Faut savoir que les requêtes sur des vues sont équivalentes à remplacer le nom de la vue par son select.

    Essayes un peu pour voir ce que ça donne qu'on rigole, parce que sema_npte_contract, on ne sait pas du tout ce que c'est.

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Citation Envoyé par smaildba Voir le message
    bonjour,

    Oracle version :8.1.7.4
    OS : Sun Solaris 64 bits 5.8

    Notre requete est :

    Explain Plan :
    Plan


    sachant que ma table SEMA_NPTE_CUSTOMER est une vue crée sur une autre vue sema_npte_contract qui est crée sur des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE FORCE VIEW sysadm.sema_npte_customer (admin_customer_id, cug_id,cug_interlock_code, cug_activation_date)  
    AS
    SELECT DISTINCT admin_customer_id, cug_id, cug_interlock_code,
    cug_activation_dat
    FROM sema_npte_contract
    WHERE npte = 'X';
    merci de votre aide
    Bonjour,

    sema_npte_contract est une vue sur d'autre table mais est ce que vous pouvez nous donnez des recommandations par rapport à l'ecriture ou a syntaxe de notre requete en se baant sur le plan d'action.

    Merci

  7. #7
    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
    A priori c'est le tri qui fait mal, faudrait peut-être voir si t'as besoin d'en faire autant. Le CONNECT BY dans une sous-requête IN, moi ça me parait étrange déjà

    après, vu la complexité du plan d'exécution et le manque de détail, j'vois mal comment on pourrait t'aider

  8. #8
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Un conseil... ben celui de McM ?
    Recolle la requête avec les définition des vues... et tu devrais être sidéré par le résultat.

    Ta sous-requête renvoie un seul identifiant à partir d'un identiant.
    On se dit que le faire à la main devrait prendre moins de trois seconde (genre petit à petit).
    Ca veut dire clairement qu'à force de faire des jointures sur des trucs qui font des SELECT DISTINCT et autres, l'optimiseur perd complètement de vue le fait que le problème est à peu près basique...

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut requête trop lente
    Citation Envoyé par pacmann Voir le message
    Salut !

    Un conseil... ben celui de McM ?
    Recolle la requête avec les définition des vues... et tu devrais être sidéré par le résultat.

    Ta sous-requête renvoie un seul identifiant à partir d'un identiant.
    On se dit que le faire à la main devrait prendre moins de trois seconde (genre petit à petit).
    Ca veut dire clairement qu'à force de faire des jointures sur des trucs qui font des SELECT DISTINCT et autres, l'optimiseur perd complètement de vue le fait que le problème est à peu près basique...
    Bonjour,
    je comprend pas ? c'est quoi McM? vous avez une idée ??

    Merci d'avance

Discussions similaires

  1. requête trop lente
    Par ultimus dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/04/2010, 22h08
  2. Optimisation de requêtes trop lentes..
    Par Nevrosl dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/03/2010, 13h38
  3. Requête trop lente
    Par shadeoner dans le forum SQL
    Réponses: 11
    Dernier message: 23/05/2008, 10h24
  4. Requête trop lente, comment l'optimiser?
    Par getz85 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 29/01/2008, 13h40
  5. auto-killer une requête trop lente
    Par Nico57 dans le forum Oracle
    Réponses: 5
    Dernier message: 05/12/2006, 18h04

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