Sie sind auf Seite 1von 25

NFE113 Administration et configuration des bases de donnes 2011

Optimisation des Requtes


Daprs J. Akoka - I. Wattiau

Eric Boniface

Introduction
Fournir l'algorithme d'accs la B.D. pour rpondre une requte exprime en langage assertionnel Les tapes
Analyse de la requte correction et simplification Ordonnancement en squence d'oprations lmentaires plan d'excution Excution

Loptimisation des requtes consiste


Maximiser le paralllisme entre les entres/sorties Minimiser
Le nombre d'E/S La taille mmoire ncessaire l'excution Le temps unit centrale
2

Analyse de requtes
Sur un exemple
COURS (code, nomcours, nomprof) NOTE (code, matricule, note) ETUDIANT (matricule, nom, adresse)

Question
Quels sont les noms des cours suivis par l'tudiant DUPONT donns par le professeur DURAND ? En SQL :
Select nomcours From cours Where nomprof = 'DURAND and code in (select code from note where matricule in (select matricule from etudiant where nom = 'DUPONT'));
3

Analyse de requtes
Graphe de connexion des relations

Condition ncessaire pour que la question soit correcte : connexit du graphe des relations et qualifications cohrentes 2 requtes sont quivalentes si graphes d'attributs transitivement identiques On peut complter les graphes en y reprsentant les contraintes d'intgrit gnration d'autres requtes quivalentes

Ordonnancement et problmes
L'analyse de la requte l'ensemble des oprations de l'algbre relationnelle excuter
Une opration peut tre excute ds que ses oprandes sont disponibles Si l'opration A n'utilise pas le rsultat de l'opration B et vice-versa, A et B peuvent tre excutes en parallle

Identification des problmes


Non existence d index appropris Non re-compilation de procdures stockes aprs modifications importantes de la base Existence de statistiques obsoltes

Dcision doptimisation
Quand une requte s excute plus lentement que des requtes similaires Quand le temps d excution est jug anormal par rapport la taille des tables et par rapport aux index existants Quand un plan nutilise pas un index quil devrait Quand le temps d excution dune requte dans une procdure stocke > celui de la requte directe Dans les SGBD du march, deux mthodes
Mthode dite syntaxique, principalement restructurations algbriques Mthode destimation de cots
6

Restructurations algbriques
Etapes
1. 2. 3. 4. 5.

Ecrire la suite des oprations Dcouper les restrictions comportant plusieurs prdicats Remonter les restrictions le plus haut possible Regrouper les restrictions successives dune mme relation Refaire 2 et 3 pour les projections

Restructurations algbriques
Arbre algbrique restructur

Estimation de cots
valuer le cot d excution de la requte en utilisant des statistiques sur Nb exact ou estim de tuples et de blocs par table Nb de niveaux dindex et nb de valeurs distinctes par attribut
Slectivit d un attribut = nb de val. diffrentes / nb tuples (1 pour les cls)

Nb estim de L/E logiques et physiques, ...

Optimiseur Oracle
Analyse de la requte
Vrification de la syntaxe Recherche des tables et des colonnes dans le dictionnaire de donnes

Ordonnancement squence d'oprations lmentaires


Gnration d'un meta-code, requte SQL combine avec des rfrences des index, des rservations d'espaces, etc.

Excution
Recherche dans les index Si ncessaire, transfert de blocs en mmoire centrale Calcul de la rponse Affichage de la rponse
10

Optimiseur Oracle
Deux stratgies d optimisation
A base de rgles (syntaxique) A base de cots

Choix pour une requte, pour session ou une instance Ajout de directives doptimisation dans une requte Dans ORACLE, les index sont utiliss selon la forme des clauses WHERE selon l'ordre suivant
ROWID = cste Colonne d'index Unique = cste Index concatn unique = cste Index concatn non unique = cste Colonne d'index non unique = cste Index concatn = cste

11

Optimiseur Oracle
Dans ORACLE, les index sont utiliss selon la forme des clauses WHERE selon l'ordre suivant (suite)
Partie gauche d'un index concatn = cste Colonne d'index unique BETWEEN cste Colonne d'index non unique BETWEEN cste AND cste ou LIKE 'cste%' Colonne d'index unique > cste Colonne d'index non unique > cste ou < cste SORT/MERGE (jointures seulement) MAX (colonne indexe) ou MIN ORDER BY index AND cste ou LIKE"cste%" Parcours complet de la table
12

Optimiseur Oracle

Exemple de plan : select p.libelle, s.qte from produit p, stock s where p.prodnum=s.prodnum;

Explain plan set statement_id= XXX for select p.libelle . Puis select id, parent_id, operation, object_base,options from plan_table;
13

Exemple doprations

Exemple
Cinma(id-cinma*, nom, adresse) salle(id-salle*, nom, capacit^,id-cinma**) film(id-film*,titre, anne, idralisateur**) sance(id-sance*,heuredbut,heurefin,idsalle**,idfilm) artiste(id-artiste*,nom,datenaissance) * index unique ** index non unique ^ avec ou sans
14

Exemples
Slection sans index
SELECT * FROM cinema WHERE nom='Le Rex'; Plan d excution
0 SELECT STATEMENT 1 TABLE ACCESS FULL CINEMA

Opration 1 trs coteuse car balaie toute la table Cinma

Slection avec index


SELECT * FROM cinema WHERE IDcinma=1908; Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY INDEX ROWID CINEMA 2 INDEX UNIQUE SCAN IDX-CINEMA-ID

Avec ID-Cinema : index unique


15

Exemples
Slection conjonctive avec index
SELECT capacit FROM salle WHERE IDcinma=187 AND nom='Salle 1'; Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY INDEX ROWID SALLE 2 INDEX RANGE SCAN IDX-SALLECINEMA-ID

Avec ID-Cinema : index non unique

16

Exemples
Slection conjonctive avec 2 index
SELECT nom FROM salle WHERE IDcinema=1098 AND capacit=150 Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY ROWID SALLE 2 AND-EQUAL 3 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID 4 INDEX RANGE SCAN IDX-CAPACITE

Avec ID-cinema et Capacit : index non unique (sans index = id prcdente)

17

Exemples
Slection conjonctive avec 2 index
SELECT nom FROM salle WHERE IDcinema=1098 AND capacit=150 Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY ROWID SALLE 2 AND-EQUAL 3 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID 4 INDEX RANGE SCAN IDX-CAPACITE

Avec ID-cinema et Capacit : index non unique (sans index = id prcdente)

18

Exemples
Slection disjonctive avec des index
SELECT nom FROM salle WHERE IDcinema=1098 OR capacit>150 Plan d'excution
0 SELECT STATEMENT 1 CONCATENATION 2 TABLE ACCESS BY ROWID SALLE 3 INDEX RANGE SCAN IDX-CAPACITE 4 TABLE ACCESS BY ROWID SALLE 5 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID

Avec ID-cinema et Capacit : index non unique

19

Exemples
Slection avec et sans index
SELECT nom FROM salle WHERE IDcinema=1098 OR nom='salle 1' Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS FULL SALLE

Avec ID-cinema : index non unique Lindex nest pas utilis

20

Exemples
Jointure avec 1 index
SELECT film.*FROM film, sance WHERE Film.idfilm=sance.idfilm Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL sance 3 TABLE ACCESS BY ROWID FILM 4 INDEX UNIQUE SCAN IDFILM_IDX

Avec film.idfilm : index unique

21

Exemples
Jointures avec 2 index
SELECT cinema.nom, capacite FROM cinema, salle WHERE cinema.IDcinema=salle.ID-cinema; Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL SALLE 3 TABLE ACCESS BY ROWID CINEMA 4 INDEX UNIQUE SCAN IDX-CINEMA-ID

Avec cinema.ID-cinema : index unique et salle.ID-cinema : index non unique

22

Exemples
Jointure avec 2 index et slection avec 1 index
SELECT cinema.nom, capacite FROM cinema, salle WHERE cinema.ID-cinema=salle.ID-cinema AND capacite>150; Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS BY INDEX ROWID SALLE 3 INDEX RANGE SCAN IDX-CAPACITE 4 TABLE ACCESS BY INDEX ROWID CINEMA 5 INDEX UNIQUE SCAN IDX-CINEMA-ID

Avec cinema.ID-cinema : index unique et salle.ID-cinema : index non unique et capacite : index non unique

23

Jointures
Jointures par boucles imbriques
Parcourir les tuples dune table (relation externe) Pour chaque tuple slectionn, trouver les tuples dans lautre table (relation interne) qui joignent Dans la relation externe, les tuples accds une seule fois Dans la relation interne, sans index, les tuples sont accds de nombreuses fois Importance du choix de lordre des jointures

4 algorithmes
Boucles imbriques si tables de grande taille Tri-fusion Hachage Par groupement en cas de cluster
24

Directives doptimisation
Choose : stratgie base de cots avec optimisation globale si des stats existent, sinon base de rgles Rule : stratgie base de rgles (dfaut) all_rows : base de cots avec optimisation globale first_rows : base de rgles avec minimisation du temps de rponse

25