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 :

Plan d'exécution avec Bind Variable


Sujet :

Administration Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut Plan d'exécution avec Bind Variable
    Bonjour,

    Je suis à la recherche d'une méthode permettant de visualiser dans le plan d'exécution, les valeurs des BIND VARIABLE utilisées. Est-ce possible car les méthodes classiques (enfin me concernant) ne me le permettent pas.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    C'est impossible au niveau de l'explain plan.
    Extrait du guide explain plan :

    Description des phases de traitement d’une requête

    Les étapes de découpage d'une requête SQL
    1. Ouverture
    2. Analyse ou phase de « Parse »
    3. Attachement ou « Bind »
    4. Exécution
    5. Extraction ou « Fetch »
    6. Fermeture
    Les variables sont valorisées après que le plan d'exécution ait été défini.

  3. #3
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    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 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut dbms_xplan.display_cursor
    Bonjour,
    dbms_xplan.display_cursor admet le format non-documenté 'ADVANCED' qui donne les valeurs des bind variabels lues au moment du parse (d'après ce blog)
    Cordialement,
    Franck.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    Bonjour et merci pour vos réponses.

    En effet, en suivant les indications du lien de Pachot, ça fonctionne.


  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    Juste un petit complément Franck.
    Lorsque les Bind Variables changent, le plan renvoyé par DBMS_XPLAN.DISPLAY_CURSOR affiche toujours les valeurs utilisées par la première exécution, ce qui est trompeur.

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    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 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Non, ce n'est pas trompeur: le plan d'exécution est établi au moment de l'optimisation de la requête. Les bind variables affichées sont celles qui ont servi à établir ce plan d'exécution: ce sont celles de la première exécution. Par définition.
    Si tu veux les valeurs de chaque exécution, alors c'est possible avec sql_trace, ou v$sql_bind_capture, mais cela n'a plus rien à voir avec le plan d'exécution.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    Pourtant, j'ai utilisé v$sql_bind_capture. Ci-dessous, j'ai modifié mes Bind Variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SYS@orcl> execute :var := 'a'
     
    ProcÚdure PL/SQL terminÚe avec succÞs.
     
    SYS@orcl> execute :var2 := 'b'
     
    ProcÚdure PL/SQL terminÚe avec succÞs.
     
    SYS@orcl> select count(*) from test where col = :var or col = :var2 ;
     
      COUNT(*)
    ----------
             0
    Voici le SQL_ID de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SYS@orcl> select sql_text, sql_id, child_number from v$sql where sql_text like '%col = :var or col = :var2%';
     
    SQL_TEXT                                                                                             SQL_ID        CHILD_NUMBER
    ---------------------------------------------------------------------------------------------------- ------------- ------------
    select count(*) from test where col = :var or col = :var2                                            gdgxw2ssaub1u            0
    Et lorsque j'interroge v$sql_bind_capture, je vois les Bind Variables utilisées lors de la première requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select c.was_captured, c.name, c.datatype_string, c.VALUE_STRING from v$sql_bind_capture c where c.sql_id='gdgxw2ssaub1u';
    Dont voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WAS NAME                           DATATYPE_STRING VALUE_STRING
    --- ------------------------------ --------------- --------------------------------------------------
    YES :VAR                           CHAR(32)        bbbb
    YES :VAR2                          CHAR(32)        cccc
    Je n'utilise peut-être pas la bonne méthode ???

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    le bind capture n'est fait que périodiquement : il n'affiche donc pas les "vraies" valeurs

    pour connaître les bind values , il faut faire une trace ...

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    Merci Marc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2010, 22h38
  2. Plan d'exécution avec un bind variable
    Par couak dans le forum Administration
    Réponses: 23
    Dernier message: 15/10/2009, 17h12
  3. Optimiser la requête avec un plan d'exécution
    Par irnbru dans le forum Développement
    Réponses: 1
    Dernier message: 20/08/2008, 00h07
  4. Réponses: 11
    Dernier message: 29/05/2008, 16h26
  5. Bind variables et plan d'execution
    Par Wurlitzer dans le forum Oracle
    Réponses: 6
    Dernier message: 26/02/2007, 14h04

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