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 :

Parse to execute ratio 65%


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Par défaut Parse to execute ratio 65%
    Bonjour,
    sur ma base de données (9.2.0 sous Linux red hat) je suis confronté au problème de performance suivant :
    Parse to execute ratio 65%
    et cela dès le démarrage de la base.
    Je regarde la vu v$sqlarea
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select EXECUTIONS, PARSE_CALLS from v$sqlarea
    et je trouve 311 enregistrements avec le rapport Parse/Execute > 60%.
    COmment peut-on dans ce conditions repérer la cause de ce "Parse to execute ratio 65%" et l'éliminer car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    In an operational environment, optimally a SQL statement should be parsed once and executed many times. This alert could indicate poor cursor reuse. Find out what specific SQL statements have a parse count that is equal to the execute count. These statements are contributing to ineffective cursor sharing
    D'avance merci.

  2. #2
    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
    Par défaut
    La cause principale de ce problème est en général la non utilisation des binds variables dans le code SQL, càd l'utilisation abusive de SQL dynamique avec des valeurs littérales en dur au lieu de bind variables: le code est à chaque exécution compilé ("hard parse") au lieu d'utiliser un plan en mémoire qui existe déja ("soft parse") suite à une compilation qui a déjà eu lieu.

    Tom Kyte ne dira pas le contraite (c'est un peu son dada ).

    Voir par exemple: http://asktom.oracle.com/pls/ask/f?p...:2588723819082

  3. #3
    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
    Citation Envoyé par pifor
    la non utilisation des binds variables dans le code SQL, càd l'utilisation abusive de SQL dynamique avec des valeurs littérales en dur au lieu de bind variables
    pourquoi dynamique ??? SQL tout court avec des valeurs en dur plutôt que des variables alors que le cursor_sharing est EXACT plutôt que SIMILAR.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Par défaut
    Merci à tous pour ces éclaircissements. Je n'ai pas bien compris , vaut-il mieux dans ce cas avoir cursor_sharing en EXACT ou en SIMILAR ?
    D'avance merci.

  5. #5
    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
    Par défaut
    pourquoi dynamique ??? SQL tout court avec des valeurs en dur plutôt que des variables alors que le cursor_sharing est EXACT plutôt que SIMILAR.
    Oui: c'est vrai. Le SQL venant du client est toujours par définition dynamique.
    Côté serveur, le SQL dans le PL/SQL utilise par défaut les bind variables sauf s'il est construit dynamiquement avec EXECUTE IMMEDIATE sans la clause USING et le paramètre cursor_sharing a la valeur EXACT.

  6. #6
    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
    Par défaut
    vaut-il mieux dans ce cas avoir cursor_sharing en EXACT ou en SIMILAR ?
    Dans votre cas, il est probable que SIMILAR devrait limiter les hard parse.
    Mais on ne peut que vous conseiller de le tester sur un environnement représentatif de votre système de production (idéalement une copie complète) et de comparer les temps d'exécutions de l'ensemble des requêtes et le ratio en question. Attention: changer ce paramètre peut améliorer les performances dans certains cas et les dégrader dans d'autres cas...

  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
    il faut voir le parametre cursor_sharing (attention c'est pas anodin quand même) et/ou revoir le dév pour introduire plus de variables

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/03/2010, 14h58
  2. Rapport Parse Call /Execution dans STATSPACK
    Par Wurlitzer dans le forum Oracle
    Réponses: 5
    Dernier message: 13/03/2007, 18h56
  3. Parse to Execute
    Par big1 dans le forum Oracle
    Réponses: 4
    Dernier message: 09/03/2007, 17h12
  4. Parse, Execute, Curseurs & PHP
    Par mtopoloff dans le forum SQL
    Réponses: 1
    Dernier message: 27/02/2007, 19h51
  5. [ORACLE 8.1.7.3] Plus de parse que d'execute ?
    Par had69 dans le forum Oracle
    Réponses: 8
    Dernier message: 24/10/2005, 13h54

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