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 :

TKPROF écrats entre cpu et elapsed, causes possibles ?


Sujet :

Administration Oracle

  1. #1
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut TKPROF écrats entre cpu et elapsed, causes possibles ?
    Bonjour,

    Je suis sous windows sur oracle 10g.

    Suite à la lecture de cet excellent article : http://oracle.developpez.com/guide/tuning/tkprof/

    je me suis mis à tracer des sessions longues qui utilisent des requetes SDO. dans l'article on peut lire :
    Il faut vérifier qu’il n’y a pas de différence notable entre CPU et Elapsed
    Je tombe sur :
    SELECT DIMINFO
    FROM
    ALL_SDO_GEOM_METADATA WHERE OWNER = 'B62REC7' AND TABLE_NAME = 'FIGURE' AND
    COLUMN_NAME = 'SDO'


    call count cpu elapsed disk query current rows
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    Parse 1 0.10 0.11 3 6 0 0
    Execute 97277 7.42 21.92 0 0 0 0
    Fetch 97277 321.72 1303.48 18 2431925 0 97277
    ------- ------ -------- ---------- ---------- ---------- ---------- ----------
    total 194555 329.26 1325.52 21 2431931 0 97277

    Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 45 (B62REC7) (recursive depth: 1)
    donc j'en déduit qu'il y a une grosse marge pour optimiser. Vous en pensez quoi ? Par où commencer ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    comment as tu activer ta trace?

    Si t'as un ecart entre le temps de service (CPU) et le temps de réponse (elapsed) c'est que tu as un temps d'attente important (ensemble des wait events).

    Tu peux activer ta trace pour voir les temps d'attente associées à ta requête.
    Tu peux également interroger les vues v$session_event et v$session_wait

  3. #3
    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 : 56
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Vérifies dans un rapport awr (quitte à en générer manuellement avant et après ta requête avec exec dbms_workload_repository.create_snapshot les contentions en fin de report, notamment les buffer busy waits.
    N'y a t-il pas des objets en relation avec ta requête qui sont concernés ?
    Si trop de buffer busy waits, tu peux interroger v$session_wait pour savoir quels blocs posent problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT p1 "File", p2 "Block", p3 "Reason" FROM v$session_wait WHERE event='buffer busy waits' ;
    Si index => pct_free à augmenter pour avoir moins de lignes par blocs, ou recréer l'index dans un TS ayant une taille de bloc plus petite (+ cache associé).

    Voilà, c'est une piste mais il y a en a d'autres selon les attentes observées.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 3 437
    Points : 3 527
    Points
    3 527
    Par défaut
    Je commencerais par me demander s'il est bien nécessaire d'exécuter une requête environ 100 000 fois.

    Essayez d'utiliser DBMS_MONITOR avec waits=>TRUE pour tracer une session avec Oracle 10g http://download.oracle.com/docs/cd/B...e.htm#CHDDGCCB.

    N'utilisez AWR que si vous avez la licence d'utiliser le diagnosic pack http://download.oracle.com/docs/cd/B...s.htm#CIHHIGBI

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/11/2010, 20h31
  2. Jointure entre plusieurs tables: es-ce possible ?
    Par student_php dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/11/2010, 19h02
  3. Réponses: 7
    Dernier message: 10/12/2009, 09h43
  4. Cle etrangere entre deux schemas : est-ce possible ?
    Par fpoirier dans le forum Oracle
    Réponses: 2
    Dernier message: 13/09/2007, 14h16
  5. [FAQ] [3D] Comment exploiter le parallelisme entre CPU et GPU ?
    Par Laurent Gomila dans le forum Contribuez
    Réponses: 3
    Dernier message: 19/05/2006, 21h58

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