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 :

requête à optimiser


Sujet :

Administration Oracle

  1. #21
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Yong,

    j'ai effectivement publié le nouveau plan d'exécution (ci dessus)
    en fait, je me base par rapport au temps écoulé

  2. #22
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par yong321 Voir le message
    Lady701,

    Le temps écoulé est trompeuse, parce qu'elle pourrait être affectée par la mémoire cache de données (data in Oracle buffer cache) et de nombreux autres facteurs. Toujours utiliser consistent gets ou buffer gets en tant que métrique. Est-il nettement inférieur à celui 56891 maintenant?

    Et bien sûr nous montrer le nouveau plan d'exécution (comme pachot dit).

    Yong Huang
    le dernier plan d'execution

    Plan d'exécution
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=HINT: ALL_ROWS (Cost=2386 Card=64
    39 Bytes=1159020)

    1 0 SORT* (ORDER BY) (Cost=2386 Card=6439 Bytes=1159020) :Q147438
    0001

    2 1 TABLE ACCESS* (FULL) OF 'TD_ETABLISSEMENTS' (Cost=2324 C :Q147438
    ard=6439 Bytes=1159020) 0000



    1 PARALLEL_TO_SERIAL SELECT A1.C0 C0,A1.C1 C1,A1.C2 C2,A1.C3 C3,A
    1.C4 C4,A1.C5 C5,A1.C6 C6,A1.C7 C7,A

    2 PARALLEL_TO_PARALLEL SELECT /*+ NO_EXPAND ROWID(A1) */ NLSSORT(A1
    ."ENSEIGNE") C0,A1."CODE_POSTAL" C1,



    Statistiques
    ----------------------------------------------------------
    20 recursive calls
    4 db block gets
    61253 consistent gets
    61233 physical reads
    864 redo size
    13163 bytes sent via SQL*Net to client
    717 bytes received via SQL*Net from client
    8 SQL*Net roundtrips to/from client
    2 sorts (memory)
    0 sorts (disk)
    91 rows processed

    effectivement mon consistents gets > 56891

  3. #23
    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
    Un histogramme sur la table td_etablissements pourrait aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec dbms_gather_table_stats('schéma_propriétaire','TD_ETABLISSEMENT',estimate_percent=>100,method_opt=>'for all indexed columns size auto',granularity=>'ALL',cascade=>true);
    Si les colonnes ETAT_ETAB, CODE_TP et DRA sont indexées.

  4. #24
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Je continue à trouver cette méthodologie d’optimisation que je vais la résumer ici, vraiment bizarre:

    A : J’ai un problème de performance avec cette requête
    X : Change ça, qu’est-ce que ça donne ? Pourquoi telle truc ?
    A : Je ne sais pas pourquoi. Mais si je change telle autre truc c’est super !
    Y : Et si t’essaye ça, que est-ce que ça donne ?
    Z : Est ce-que les statistiques sont à jour ?
    A : Je ne sais pas, je ne suis pas DBA
    Etc.
    Bref, pour optimiser un traitement ou une requête SQL (sauf quelques cas banales) il est toujours conseillé de commencer par s’assurer que les statistiques sont à jour. Ensuite faite une trace SQL étendue pour arriver à comprendre où le temps passe. Une fois que vous est arrivé à comprendre pourquoi les choses se passent mal, vous pouvez commencer à envisager une des multiples solutions disponibles pour optimiser : création/modification des indexes, changement dans la manière de collecte des statistiques, utilisation des hints SQL, modifications de la requête SQL, modification des paramètres de la session (comme disait Tom Kyte parfois on peut « optimiser » en activant la trace SQL), etc.

  5. #25
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    [QUOTE=mnitu;4960127]Je continue à trouver cette méthodologie d’optimisation que je vais la résumer ici, vraiment bizarre:

    MNITU, veuillez excuser mon manque d'expérience dans le domaine

  6. #26
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Un histogramme sur la table td_etablissements pourrait aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec dbms_gather_table_stats('schéma_propriétaire','TD_ETABLISSEMENT',estimate_percent=>100,method_opt=>'for all indexed columns size auto',granularity=>'ALL',cascade=>true);
    Si les colonnes ETAT_ETAB, CODE_TP et DRA sont indexées.
    Merci pour votre aide

  7. #27
    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
    Il faut lire exec dbms_stats.gather_table_stats au lieu de l'ignominie que j'ai tapée.

  8. #28
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Il faut lire exec dbms_stats.gather_table_stats au lieu de l'ignominie que j'ai tapée.
    no souci, j'avais compris MERCI

  9. #29
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Juste une petite remarque sur la condition is null et l'index.

    http://www.dba-oracle.com/oracle_tip...lls_values.htm

    Cordialement Salim.

  10. #30
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour Salim,
    Ici ce sont des index bitmaps, qui indexent les NULL.
    Et cet article n'est pas très juste... Pour indexer les NULL avec un index normal (non bitmap) il suffit de faire un index sur la colonne et sur une constante, par exemple: create index ... on ... ( champnull , 0 ) car seules les entrées entièrement nulles ne sont pas indexées.
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  11. #31
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Génial, je continue à apprendre
    merci aux internautes et aux rédacteurs Developpez.com

Discussions similaires

  1. Sous-Sous-Requête: Optimisation possible ?
    Par FMaz dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/04/2008, 03h49
  2. [SQL2K5] Plan de requête optimisable ?
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/08/2007, 11h33
  3. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  4. Réponses: 10
    Dernier message: 20/10/2006, 16h36
  5. requête à optimiser
    Par tung-savate dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/10/2005, 07h38

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