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