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 :

Comment lire un plan d'exécution? [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 992
    Points : 2 498
    Points
    2 498
    Par défaut Comment lire un plan d'exécution?
    Bonjour,

    En parcourant le net j'ai lu tout et n'importe quoi sur comment on devait lire un plan d'exécution.
    Voici un plan venant de ce site http://www.dba-oracle.com/t_order_se...lans_steps.htm

    J'ai compris les points suivants :
    1) lire des lignes les plus indentées vers les moins indentées
    2) si plusieurs lignes ont le même niveau d'indentation, lire de haut en bas

    Là où je coince c'est quand il y a plusieurs sous-niveaux ayant la même profondeur d'indentation : est-ce qu'on doit lire en premier TOUTES les lignes avec le niveaux d'indentation le plus profond ou bien on en lit un puis on remonte l'arbre vers le haut pour redescendre vers la deuxième feuille la plus profonde?

    Dans le cas ci-dessous, j'aurais lu dans l'ordre suivant : 5, 6, 11, 12 dans un premier temps mais le site dit 5, 6, 4, 3, 2, 11, 12, 10, 13, 9, 8, 7, 1 donc je suis bien loin d'avoir tout compris.
    Est-ce que vous pourriez m'expliquer comment on parcourt l'arbre d'un plan d'exécution; c'est tout sauf trivial!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Execution Plan
    ----------------------------------------------------------
     
       0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2871 Card=2 Bytes=143)
       1    0   UNION-ALL
       2    1     SORT (GROUP BY) (Cost=2003 Card=1 Bytes=59)
       3    2       FILTER
       4    3         HASH JOIN (Cost=1999 Card=1 Bytes=59)
       5    4           INDEX (FAST FULL SCAN) OF 'XIN8OPS_FLT_LEG' (UNIQUE) 
       6    4           INDEX (RANGE SCAN) OF 'XIN3BAG_TAG_FLT_LEG' (UNIQUE)
       7    1     SORT (GROUP BY) (Cost=868 Card=1 Bytes=84)
       8    7       FILTER
       9    8         NESTED LOOPS (Cost=864 Card=1 Bytes=84)
      10    9           HASH JOIN (Cost=862 Card=1 Bytes=57)
      11   10             INDEX (FAST FULL SCAN) OF 'XIN1SCHED_FLT_LEG' (UNIQUE)
      12   10             INDEX (FAST FULL SCAN) OF 'XIN8OPS_FLT_LEG' (UNIQUE)
      13    9           INDEX (RANGE SCAN) OF 'XIN2BAG_TAG_FLT_LEG' (UNIQUE)
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 073
    Points
    8 073
    Par défaut
    Oui, sur ce coup là Burleson a raison.


    L'indentation représente la filiation entre étape mère et étape fille.
    Par exemple, la jointure HASH JOIN à l'étape 4 a deux filles (5 et 6).
    Certaines opérations n'ont aucune fille (ne dépendent de "personne"), par exemple INDEX RANGE SCAN.
    Certaines ont une seule fille, par exemple SORT.
    Certaines ont 2 filles précisément, c'est le cas des jointures.
    Certaines ont au moins 2 filles, comme UNION.

    On commence à parcourir (et non à exécuter) à l'étape 0.

    Une étape ne peut pas s'effectuer tant que ses filles ne sont pas traitées, et ce récursivement.
    Toute étape du plan génère un ensemble de lignes, et les renvoie à sa mère qui va les retraiter.

    Les filles d'une même étape s'effectuent dans leur ordre d'apparition, du haut vers le bas.
    Par exemple, l'étape 1 UNION ALL a deux filles, les étapes 2 et 7 (SORT GROUP BY toutes les deux).
    Par conséquent toute la branche de l'étape 2 s'effectue avant toute la branche de l'étape 7.

    Donc on part du haut, on parcourt l'indentation jusqu'à trouver une étape n'ayant pas de fille, la 5.
    On traite toutes ses soeurs dans l'ordre, la 6
    On peut remonter à sa mère et traiter 4.
    On peut remonter à sa mère et traiter 3
    On peut remonter à sa mère et traiter 2

    2 a une soeur, la 7, mais celle-ci à des filles.
    On parcourt l'indentation jusqu'à trouver une étape n'ayant pas de fille (la 11).
    On traite toutes ses soeurs dans l'ordre (12 en plus)
    On peut remonter à sa mère et traiter 10
    10 a une soeur que l'on traite, la 13
    On peut remonter à sa mère et traiter 9
    On peut remonter à sa mère et traiter 8
    On peut remonter à sa mère et traiter 7
    On peut remonter à sa mère et traiter 1
    On peut remonter à sa mère et traiter 0

    Si on récapitule, ça donne bien 5, 6, 4, 3, 2, 11, 12, 10, 13, 9, 8, 7, 1, 0.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 992
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut Pomalaix,

    Un grand merci pour ton post, passionnant comme d'habitude
    Je viens de tout lire et c'est clair comme de l'eau de roche!

    En revanche peux-tu me dire à quoi correspond la deuxième colonne, celle qui commence à 0 et finit à 9? J'ai du mal à deviner sa logique.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

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

Discussions similaires

  1. Comment fige t-on le plan d'exécution d'une requête
    Par alexisongagna dans le forum Administration
    Réponses: 4
    Dernier message: 02/01/2013, 18h13
  2. Comment je peut lire un plan vectoriel avec une application java
    Par herguem dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 02/11/2010, 18h34
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 20h20
  4. Réponses: 2
    Dernier message: 06/12/2002, 08h50
  5. Réponses: 5
    Dernier message: 20/08/2002, 19h01

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