utilisation de la commande explain plan

Transcription

utilisation de la commande explain plan
Université de Valenciennes
Institut des Sciences et Techniques
de Valenciennes
Année Universitaire 2008-2009
Licence 3 Informatique
Bases de Données Aspects Systèmes
Enoncé du TP 2
Partie 1 : JDBC
Créer un programme java qui permet de saisir votre nom en entrée et de récupérer l’ensemble
des informations concernant les vols que vous avez empruntez.
Partie 2 : Optimisation
Utilisez l’ordre set timing on pour mesurer les temps d’exécution des requêtes avant et après
création d’index supplémentaires.
En utilisant l’outil EXPLAIN PLAN d’oracle, analysez les plans d’exécution choisis par
oracle.
UTILISATION DE LA COMMANDE EXPLAIN PLAN
ORACLE fournit sous SQLPLUS un outil, EXPLAIN, qui donne une description du plan
d'exécution choisi par le système pour une requête quelconque.
EXPLAIN PLAN est une commande qui permet d'expliquer le plan d'exécution ou le chemin
d'accès que l'optimiseur va utiliser pour exécuter la commande SQL. Les résultats de la
commande EXPLAIN PLAN sont mis dans la table PLAN_TABLE
Les différentes étapes avant d'utiliser la commande EXPLAIN PLAN sont :
- de créer une table (PLAN_TABLE) destinée à contenir toutes les informations relatives à un
plan d'exécution
- d'exécuter une requête en demandant le stockage des explications relatives à cette requête
dans la table précédemment créée
- d'interroger la table précédemment remplie pour connaître le plan d'exécution.
Création de la table PLAN_TABLE
SQL> CREATE TABLE PLAN_TABLE (
STATEMENT_ID VARCHAR2 (30),
TIMESTAMP DATE,
REMARKS VARCHAR2 (80),
OPERATION VARCHAR2 (30),
OPTIONS VARCHAR2 (30),
OBJECT_NODE VARCHAR2 (30),
OBJECT_OWNER VARCHAR2 (30),
OBJECT_NAME VARCHAR2 (30),
OBJECT_INSTANCE NUMBER (38),
OBJECT_TYPE VARCHAR2 (30),
SEARCH_COLUMNS NUMBER (38),
ID NUMBER (38),
PARENT_ID NUMBER (38),
POSITION NUMBER (38),
OTHER LONG);
Signification des champs de la table
STATEMENT_ID /* la valeur provient de la commande SQL. */
TIMESTAMP /* date d'exécution de EXPLAIN PLAN. */
REMARKS /* commentaire mis dans la commande. */
OPERATION /* le nom de l'opération interne effectuée, voir tableau*/
OPTIONS /* voir tableau. */
OBJECT_NODE /* nom du lien de base de données utilisé pour référencer l'objet. */
OBJECT_OWNER /* propriétaire de la table ou de l'index. */
OBJECT_NAME /* nom de la table ou de l'index. */
OBJECT_INSTANCE /* position de l'objet dans la commande SQL (numérotation de gauche à droite. */
OBJECT_TYPE /* type de l'objet. */
SEARCH_COLUMNS /* non utilisé. */
ID /* numéro affecté à chaque étape dans le plan d'exécution. */
PARENT_ID /* numéro de l'étape suivante qui utilisera comme flux d'entrée les sorties de l'étape numéro ID. */
POSITION /* ordre de traitement des étapes qui ont le même PARENT_ID. */
Les différentes OPERATIONS et OPTIONS du plan d'exécution
OPERATIONS
AGGREGATE
AND-EQUAL
CONNECT BY
COUTING
FILTER
OPTIONS
GROUP BY
SIGNIFICATION
Une recherche d’une seule ligne qui est le résultat de
l’application d’une fonction de group à un groupe de lignes
sélectionnées.
Une opération qui a en entrée des ensembles de rowids et
retourne l’intersection de ces ensembles en éliminant les
doublants. Cette opération est utilisée par le chemin d’accès par
index.
Recherche de ligne dans un ordre hiérarchique
Opération qui compte le nombre de lignes sélectionnées.
Accepte un ensemble de ligne, applique un filtre pour en
éliminer quelque unes et retourne le reste.
FIRST ROW
Recherché de le première ligne seulement.
FOR UPDATE
Opération qui recherche et verrouille les lignes pour une mise à
jour
INDEX
UNIQUE SCAN Recherche d’une seule valeur ROWID d’un index.
NDEX
RANGE SCAN Recherche d’une ou plusieurs valeurs ROWID d’un index.
L’index est parcouru dans un ordre croissant.
INDEX
RANGE SCAN Recherche d’un ou plusieurs ROWID d’un index. L’index est
parcouru dans un ordre décroissant.
DESCENDING
INTERSECTION
Opération qui accepte deux ensembles et retourne l’intersection
en éliminant les doublons.
MARGE JOIN+
Accepte deux ensembles de lignes (chacun est trié selon un
critère), combine chaque ligne du premier ensemble avec ses
correspondants du deuxième et retourne le résultat.
MARGE JOIN+ OUTER
MARGE JOIN pour effectuer une jointure externe
MINIUS
Différence de deux ensembles de lignes.
NESTED
Opération qui accepte deux ensembles, l’un externe et l’autre
LOOPS
interne. Oracle compare chaque ligne de l’ensemble externe
avec chaque ligne de l’ensemble interne et retourne celles qui
satisfont une condition.
NESTED
OUTER
Une boucle imbriquée pour effectuer une jointure externe.
LOOPS
PROJECTION
Opération interne
REMOTE
Recherche de données d’une base distante.
SEQUENCE
Opération nécessitant l’accès à des valeurs du séquenceur
SORT
SORT
SORT
SORT
TABLE
ACCESS
TABLE
ACCESS
TABLE
ACCESS
TABLE
ACCESS
UNION
VIEW
UNIQUE
GROUP BY
JOIN
ORDER BY
FULL
Tri d’un ensemble de lignes pour éliminer les doublons.
Opération qui fait le tri à l’intérieur de groupes
Tri avant la jointure (MERGE-JOIN).
Tri pour un ORDER BY.
Obtention de toutes lignes d’une table.
CLUSTER
Obtention des lignes selon la valeur de la clé d’un cluster indexé.
HASH
Obtention des lignes selon la valeur de la clé d’un hash cluster
BY ROW ID
Obtention des lignes on se basant sur les valeurs ROWID.
Union de deux ensembles avec élimination des doublons.
Opération qui utilise une vue et retourne le résultat à une autre
opération.
Utilisation de EXPLAIN PLAN
On choisit un identifiant pour identifier le plan d’exécution et on spécifie la requête à analyser :
SQL> EXPLAIN PLAN
SET STATEMENT_ID=' Identifiant_requête'
FOR requête ;
Exemple :
SQL> EXPLAIN PLAN
SET STATEMENT_ID='exemple'
FOR SELECT NOM from ACTEURS order by NOM
On interroge ensuite la table PLAN_TABLE pour afficher le plan d’exécution :
SQL> SELECT * FROM PLAN_TABLE, par exemple;
On peut ne pas afficher tous les champs et améliorer la présentation :
SQL> SELECT STATEMENT_ID,
FROM PLAN_TABLE
WHERE STATEMENT_ID='exemple';
OPERATION,
OPTIONS,
ID,
PARENT_ID,
POSITION