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 :

sql_id child_number et plan d'exécution


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 140
    Points : 71
    Points
    71
    Par défaut sql_id child_number et plan d'exécution
    salut ,
    dans quel cas un sql_id peut avoir plusieurs child_number ?
    Est-ce dans le cas de variable bind ? (Point 1)
    Peut-on dire q'un sql_id peut avoir plusieurs plans d'exécution ? et INVERSEMENT ? (Point 2)
    Y-a-t-il un lien entre le point 1 et le point 2 ?
    merci beaucoup pour vos précisions ...
    A+

  2. #2
    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
    Jetez un œil dans V$SQL_SHARED_CURSOR

  3. #3
    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
    Bref il semble que ma réponse est considéré trop succincte. Comme expliqué dans le lien fourni les raisons pour lesquelles un nouveau curseur enfant est créé sont nombreuses, donc ne sont pas liée seulement aux variables de liaison.

    Deux enfant issues d’un même curseur (mais le terme est trompeur parce que il n’existe pas de curseur sans enfant) peuvent avoir des plans d’exécutions différents. Je ne crois pas qu’on peut dire qu’un plan est partagé par plusieurs curseurs mais plutôt que deux curseur enfant peuvent avoir le même plan.

    Il y a un lien entre les problèmes de variables de liaison et le nombre de curseurs enfant si on prend en compte juste le mécanisme d’adaptive cursor sharing. Mais comme précisé ce n’est pas la seule raison.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Lorsqu'on utilise les bind variables (les variable de liaison) le but est de partager les ressources. Le plan d’exécution(child_cursor) en fait partie et sera partagé (donc un seul child_cursor = 0) jusqu'au moment où il y a un événement qui expulsera le child_cursor de la SGA ou qu'un changement dans les paramètres de l'optimisateur a lieu provoquant un "hard parse" ou une nouvelle optimisation (donc nouveau child_cursor).

    Donc, qui dit bind variable dit partage du plan donc dit un 'seul' child_cursor. Sauf dans le cas où vous êtes en 11gR2 et que votre curseur devient bind aware entraînant l'entrée en jeu de l'adaptive cursor sharing . Dans ce cas oui, plusieurs child_cursor peuvent apparaître pour un même sql_id (même lors de l'utilisation des bind variables). C'est justement un des ''problèmes'' connus de l'adaptive cursor sharing.

    En conclusion, oui il est possible d'avoir plusieurs plans d'exécutions(child_cursor) pour un même sql_id mais l'inverse n'a pas de sens à mon sens. Bien qu'il soit possible que différent sql_id peuvent avoir des plans identiques. Dans ce cas ces sql_id ont soit la même force_matching_signature ou bien il ont le même plan hash value (le même plan d'exécution) mais avec des predicats différents comme montré ici

    Si vous avez d'autres questions n’hésitez pas
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  5. #5
    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,

    Il y a des tas de raisons pour lesquelles un curseur va avoir un nouveau child cursor. La présence de bind variable est plutôt là pour aider à partager un curseur, mais de nombreuses raisons peuvent faire qu'un nouveau child cursor est créé quand même.

    Oui un même plan d'exécution peut être suivi par des requêtes qui ont un sql_id différent. Il suffit de changer les ordres de jointures, passer des IN en JOIN, ou simplement renommer des alias, etc. Le sql_id et le force_nmatching_signature seront différents, mais le plan le même.

    Je ne vois pas de lien entre les 2 points.

    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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/04/2008, 16h29
  2. Plan d'exécution pas logique
    Par pat29 dans le forum Administration
    Réponses: 6
    Dernier message: 07/03/2008, 14h37
  3. Réponses: 12
    Dernier message: 22/06/2006, 10h26
  4. Plan d' exécution
    Par rod59 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2006, 21h50
  5. Comparer des plan d'exécution
    Par sygale dans le forum Oracle
    Réponses: 7
    Dernier message: 06/04/2006, 17h58

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