L`optimiseur ORACLE suit une approche classique: Génération d
Transcription
L`optimiseur ORACLE suit une approche classique: Génération d
L’optimiser ORACLE L’optimiser ORACLE suit une approche classique: Génération de plusieurs plans d’exécution. Estimation du coût de chaque plan généré. Choix du meilleur et exécution. Tout ceci est automatique, mais il est possible d’influer, voire de forcer le plan d’exécution. 1 Estimation du coût d’un plan d’exécution Beaucoup de paramètres entrent dans l’estimation du coût : – Les chemins d’accès disponibles. – Les opérations physiques de traitement des résultats intermédiaires. – Des statistiques sur les tables concernées (taille, sélectivité). – Les statistiques sont calculées par appel explicite à l’outil ANALYSE. – Les ressources disponibles. 2 Règles Priorité • 1 Accès à un enregistrement par ROWID • 2 Accès à un enregistrement dans un cluster • 3 Accès à un enregistrement dans une table de hachage (hash cluster ) • 4 Accès à un enregistrement par clé unique (avec un index) • ... ... • 15 Balayage complet de la table 3 Principaux paramètres • OPTIMIZER_MODE (RULE, CHOOSE, FIRST_ROW, ALL_ROWS). • SORT_AREA_SIZE (taille de la zone de tri). • HASH_AREA_SIZE (taille de la zone de hachage). • HASH_JOIN_ENABLED considère les jointures par hachage. 4 Création des statistiques 1. Calcul de la taille et du nombre de lignes : ANALYSE TABLE Autos COMPUTE STATISTICS FOR TABLE 3. Analyse des index : ANALYSE TABLE Autos COMPUTE STATISTICS FOR ALL INDEX 6. Analyse de la distribution des valeurs : ANALYSE TABLE Autos COMPUTE STATISTICS FOR COLUMNS serial, color, model 5 Les chemins d’accès • Parcours séquentiel (FULL TABLE SCAN). • Par adresse (ACCESS BY ROWID). • Parcours de regroupement (CLUSTER SCAN). On récupère alors dans une même lecture les n-uplets des 2 tables du cluster. • Recherche par hachage (HASH SCAN). • Parcours d’index (INDEX SCAN). 6 Opérations physiques • INTERSECTION : intersection de deux ensembles de n-uplet. • CONCATENATION : union de deux ensembles. • FILTER : élimination de n-uplets (sélection). • PROJECTION : opération de l’algèbre relationnelle. D’autres opérations sont liées aux algorithmes de jointures. 7 Algorithmes de jointure ORACLE utilise trois algorithmes de jointures : • Tri/fusion quand il n’y a pas d’index. Opération SORT et MERGE. • Jointure par hachage quand il n’y a pas d’index. Opération HASH JOIN • Boucles imbriquées quand il y a au moins un index. Opération NESTED LOOP. 8 L’outil TRACE • L’outil TRACE donne le plan d’exécution et les coûts d’exécution d’une requête. • set timing on • set autotrace trace • La description comprend : – Le chemin d’accès utilisé. – Les opérations physiques (tri, fusion, intersection, ...). – L’ordre des opérations. • Il est représentable par un arbre. 9 Optimisation dans ORACLE Autos ( serialNo, model, color) Sales (serial, dealer, datesales, price) Dealers (name, city, departement, phone) 10 Sélection sans index set timing on set autotrace trace select * from autos where model = 'Gobi' ; Ecoulé : 00 :00 :00.02 Plan d'exécution ------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ---------------------------------------------------------------| 0 | SELECT STATEMENT | | 32 | 544 | 3 (0)| |* 1 | TABLE ACCESS FULL | AUTOS | 32 | 544 | 3 (0)| ---------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------1 - filter("MODEL"='Gobi') 11 Plan d’exécution PROJECTION PARCOURSSEQUENTIEL AUTOS 12 Sélection avec index set timing on set autotrace trace select * from dealers where name = 'dealer1'; Ecoulé : 00 :00 :00.00 Plan d'exécution ---------------------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 38 | 1 (0)| | 1 | TABLE ACCESS BY INDEX ROWID | DEALERS | 1 | 38 | 1 (0)| |* 2 | INDEX UNIQUE SCAN | PK_DEALERS | 1| | 0 (0)| ------------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------2 - access("ID_DEALER"='dealer1') 13 Plan d’exécution PROJECTION ACCESDIRECT TRAVERSÉEINDEX Dealers IndexDealers 14 Jointure avec index Set timing on Set autotrace trace SELECT serialNo, model, color FROM Autos A, Sales s WHERE serial = serialNo; Ecoulé : 00 :00 :00.01 Plan d'exécution ---------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost %CPU)| -----------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 236 | 5428 | 2 (0)| | 1 | NESTED LOOPS | | 236 | 5428 | 2 (0)| | 2 | INDEX FULL SCAN | PK_SALES | 236 | 1416 | 1 (0)| | 3 | TABLE ACCESS BY INDEX ROWID| AUTOS | 1| 17 | 1 (0)| |* 4 | INDEX UNIQUE SCAN | PK_AUTOS | 1 | | 0 (0)| -----------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------4 - access("SERIAL"="SERIALNO") 15 Plan d’exécution PROJECTION BOUCLEIMBRIQUEE PARCOURSINDEX IndexSales ACCESDIRECT RecherchePar Clé serial=serialN o IndexAutos Autos 16 Jointure sans index On force ici l’optimiseur à ne pas utiliser l’index de sales et timing on et autotrace trace ELECT /*+ NO_INDEX(s) */ serialNo, model, color ROM Autos Ecoulé : 00 :00 :00.04A, Sales s Plan d'exécution HERE serial = serialNo; ---------------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows| Bytes | Cost | ------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 236 | 5428 | 4 | | 1 | NESTED LOOPS | | 236 | 5428 | 4 | | 2 | TABLE ACCESS FULL | SALES | 236 | 1416 | 3 | | 3 | TABLE ACCESS BY INDEX ROWID | AUTOS | 1 | 17 | 1 | | 4 | INDEX UNIQUE SCAN | PK_AUTOS | 1 | | 0| ------------------------------------------------------------------------- 17 Plan d’exécution PROJECTION BOUCLEIMBRIQUEE ACCESDIRECT PARCOURSSEQUENTIEL Sales RecherchePar Clé serial=serialN o IndexAutos Autos 18 Jointure sans index On force ici l’optimiseur à ne pas utiliser les index et timing on et autotrace trace ELECT /*+ NO_INDEX(s) NO_INDEX(A)*/ serialNo, model, color Ecoulé : 00 :00 :00.02 ROM Autos A, Sales s Plan d'exécution HERE serial = serialNo; --------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost | -----------------------------------------------------------| 0 | SELECT STATEMENT | | 236 | 5428 | 7 | | 1 | HASH JOIN | | 236 | 5428 | 7 | | 2 | TABLE ACCESS FULL| AUTOS | 236 | 4012 | 3 | | 3 | TABLE ACCESS FULL| SALES | 236 | 1416 | 3 | -----------------------------------------------------------19 Plan d’exécution PROJECTION HashJoin PARCOURSSEQUENTIEL Sales PARCOURSSEQUENTIEL Autos 20