Télécharger la présentation
1
Évaluation des requêtes relationnelles
SQL QUOI Évaluateur de requêtes du SGBD COMMENT en fonction du schéma interne
2
Dans la suite, on va considérer les tables
Exemple courant Dans la suite, on va considérer les tables Livre(ISBN, titre, année, éditeur, #code) Catégorie(code, description, #code_parent)
3
Requête interne SELECT titre, descripteur FROM livre, categorie
WHERE ISBN= AND livre.code=categorie.code
4
Plan d ’exécution 1
5
Plan d ’exécution 2
6
Plan d ’exécution 3
7
Estimation du coût des opérations physiques
TempsES : temps d’accès à la mémoire secondaire (MS) TempsUCT souvent négligeable TailleMC : espace mémoire centrale TailleMS : espace mémoire secondaire
8
Statistiques TempsPosDébut
Temps qu’il faut pour se positionner au début du premier octet à transférer (ex: 10ms) TempsTrans Temps qu’il faut pour transférer un bloc (ex: 1ms) TempsESBloc (ex: 11ms) TailleBloc (ex: 2KO) NT Nombre de lignes de la table T TailleLigneT Taille d’une ligne de la table T FBT Facteur de blocage moyen de T (#lignes/bloc) FBMT Facteur de blocage Max de T BT Nombre de blocs de T
9
Coût des opérations de base
Hypothèses Néglige effet de l ’antémémoire (cache) Néglige écriture du résultat TailleLigne < TailleBloc Sans interruption
10
Balayage (BAL) TempsES (BAL) = BT * TempsTrans + NombrePos * TempsPosDébut
11
Exemple : TempsES (BALEditeur)
Allocation sérielle sans fragmentation interne BEditeur = NEditeur / FBEditeur = 50/ 60 = 1 bloc TempsES (BALEditeur) = 11 ms
12
Exemple : TempsES (BALCatégorie)
Allocation sérielle sans fragmentation interne BCatégorie = 4 000/ 40 = 100 blocs Meilleur cas : 100 * 1 ms + 1 * 10 ms = 110 ms Pire cas : 100 *1 ms+100* 10 ms = ms
13
Exemple : TempsES (BALLivre)
Allocation sérielle sans fragmentation interne BLivre = / 20 = blocs Meilleur cas : TempsES (BALLivre) = 50,01 secs Pire cas : TempsES (BALLivre) = 9,16 minutes
14
Exemple : TempsES (BALLivre)
Arbre-B+ primaire sur la clé primaire ISBN FBLivre = 2/3 FBMLivre = 13 BLivre = NLivre/ FBLivre = / 13 = blocs Pire cas (consécutivité des feuilles non assurée) ! = * 1ms * 10ms = ms = 14,1 mn
15
Sélection par égalité dans un index arbre-B+ primaire (S=IP)
TempsES (S=IP) = Parcours des niveaux d ’index (HauteurI -1) * TempsESBloc + Parcours des feuilles SelT (CléIndex = Valeur)/ FBT* TempsESBloc
16
Suite Cas d ’une clé candidate TempsES (S=IP )= HauteurI * TempsESBloc
Estimation de HauteurI 1 + log OrdreMoyenI (CardT (CléIndex) / FBT) OrdreMoyenI = 2/3 OrdreI FBT = 2/3 FBMT
17
Index primaire code de la table Catégorie (clé)
OrdreMoyenI = 2/3 OrdreI = 66 FBCatégorie = 2/3 FBMCatégorie = 26 HauteurI = 1 + log OrdreMoyenI (CardCatégorie (code) / FBCatégorie) = 1+ log 66 (4 000 / 26) = 3 TempsES (S=IP) = HauteurI *TempsESBloc = 33 ms
18
Index primaire sur #code de la table Livre (clé étrangère)
OrdreMoyenI = 2/3 OrdreI = 66 FBLivre = 2/3 FBMLivre = 13 HauteurI = 1 + log OrdreMoyenI (CardLivre (code) / FBLivre) = 3 FacteurSélectivitéLivre (code) = 1/ CardLivre (code) = 1/4 000 SelLivre (code = Valeur ) = /4000 = 250 lignes TempsES (S=IP) = (HauteurI -1) * TempsESBloc + SelLivre (code = Valeur)/ FBLivre)* TempsESBloc = 2* 11 ms + ( 250/ 13) * 11 ms = 22 ms +20 * 11 ms = 242 ms
19
Index primaire sur ISBN de Livre
OrdreMoyenI = 2/3 OrdreI = 66 FBLivre = 2/3 FBMLivre = 13 HauteurI = 1 + log OrdreMoyenI (CardLivre (ISBN) / FBLivre) = 4 TempsES (S=IP) = HauteurI *TempsESBloc = 44 ms
20
Sélection par égalité dans un index arbre-B+ secondaire (S=IS)
21
Estimation de TempsES (S=IS)
Niveaux d ’index (HauteurI -1) * TempsESBloc Feuilles de l ’index SelT (CléIndex = Valeur)/ OrdreMoyenI *TempsESBloc Blocs de l ’organisation primaire SelT (CléIndex = Valeur)*TempsESBloc TempsES (S=IS sur clé candidate) (HauteurI +1)*TempsESBloc
22
Estimation de HauteurI pour index secondaire
Hypothèses clés répétées FB = OrdreMoyen HauteurI = logOrdreMoyenI (NT)
23
Index secondaire code de Livre (clé étrangère)
HauteurI = log66( ) = 4 SelLivre (code = Valeur )= 250 lignes TempsES (S=IS) = 2 827ms TempsES (S=ISa) = 2 827ms TempsES (S=IP) = 242ms
24
Index secondaire sur code de Livre (clé étrangère)
HauteurI = log66( ) = 4 SelLivre (code = Valeur) = lignes TempsES (S=IS) = ms TempsES (S=ISa) = ms Pire que TempsES (BALLivre) = 50,01 secs !
25
Index secondaire sur ISBN de Livre (clé primaire)
HauteurI = log66( ) = 4 TempsES(S=IS sur clé candidate)= (HauteurI +1)*TempsESBloc = 55 ms ~TempsES (S=IP) = HauteurI *TempsESBloc = ms
26
Sélection par intervalle dans un index arbre-B+ primaire (S>IP)
~ clé non unique CléIndex [Valeur1..Valeur2] TempsES (S>IP) = (HauteurI -1) * TempsESBloc + SelT (CléIndex [Valeur1..Valeur2])/ FBT* TempsESBloc
27
Index primaire sur code de la table Livre (clé étrangère)
OrdreMoyenI = 2/3 OrdreI = 66 FBLivre = 2/3 FBMLivre = 13 HauteurI = 3 TempsES (S>IP) = ms
28
Tri externe si M est petit
TRI D'UNE TABLE (TRI) Utilité jointure par tri-fusion élimination des doubles (DISTINCT) opérations d ’agrégation (GROUP BY) résultats triés (ORDER BY) Tri externe si M est petit tri-fusion
29
Étape tri Tri fusion externe nombre de groupes = BT /M = 12 /3 = 4
Coût = 2 * ( BT /M * TempsPosDébut + BT * TempsTrans) = 104 ms
30
Étape fusion Coût des passes de fusion
= BT*(2*log M-1 (BT /M)-1) * TempsESBloc = 12*(2*log 2 (12 /3)-1) *11ms = 396 ms
31
Coût total du tri-fusion externe
TempsES (TRI) = 2*(BT /M* TempsPosDébut + BT*TempsTrans) + BT*(2*log M-1 (BT /M)- 1) * TempsESBloc = 104 ms ms = 500 ms
32
Tri de Livre Allocation sérielle sans fragmentation interne M = 50 TempsES (TRI) = 29,5 mins
33
OPÉRATIONS DE JOINTURE
Cas de deux tables R|X|S Extension directe à d ’autres cas union, intersection, jointure externe, ...
34
Jointure par boucles imbriquées
Boucles imbriquées par lignes (BI) TempsES (BI) = BR * TempsESBloc+NR*(BS * TempsTrans+ TempsPosDébut) Meilleur cas (Tampon assez grand) : TempsES (BI) = TempsES (BALR) + TempsES (BALS) = (BR + BS) * TempsTrans + 2*TempsPosDébut
35
BI : Livre |X| Catégorie
R=Livre et S=Catégorie TempsES (BI) = 30,57 hrs R = Catégorie et S = Livre TempsES (BI) = 56,57 hrs Meilleur cas (sans relecture) TempsES (BI) = ms
36
Boucles imbriquées par blocs (BIB)
TempsES (BIB) = BR * TempsESBloc + BR * (BS * TempsTrans + TempsPosDébut)
37
BIB: Livre |X| Catégorie
R=Livre et S=Catégorie TempsES (BIB) = 100,83 mins R = Catégorie et S = Livre TempsES (BIB) = 83,37 mins Meilleur cas (sans relecture) TempsES (BIB) = ms
38
Boucles imbriquées multi-blocs (BIM)
TempsES (BIM) = BR * TempsTrans + BR/(M-2) * TempsPosDébut + BR/(M- 2) * (BS * TempsTrans + TempsPosDébut)
39
BIM: Livre |X| Catégorie
R=Livre et S=Catégorie TempsES (BIM) = 175,04secs R = Catégorie et S = Livre TempsES (BIM) = 150,16secs
40
Jointure par boucles imbriquées avec index sur la table interne (BII)
TempsES (BII) = BR * TempsESBloc + NR * TempsES (Sélection par index)
41
BII: Livre |X| Catégorie
Cas des index primaires R=Livre et S=Catégorie TempsES (BII) = 9,32 hrs R = Catégorie et S = Livre TempsES (BII) = 16,15 mins
42
Jointure par tri-fusion (JTF)
TempsES (JTF) = TempsES (TRIR) + TempsES (TRIS) + 2*(BR + Bs) * TempsESBloc
43
JTF: Livre |X| Catégorie
M = 50 TempsES (JTF) = TempsES (TRILivre) + TempsES (TRICatégorie) + 2*(BLivre + BCatégorie) * TempsESBloc = ms >>TempsES (BIM) = ms (R = Catégorie)
44
Si 100 fois plus de Catégories
M = 50 TempsES (JTF) = ms < TempsES (BIM) = ms M = 10 TempsES (JTF) = ms << TempsES (BIM) = ms
45
Optimisation Chercher le meilleur plan d ’exécution?
coût excessif Solution approchée à un coût raisonnable Générer les alternatives heuristiques Choisir la meilleure estimation approximative du coût
46
Plans d'exécutions équivalents
Plusieurs arbres algébriques équivalents etc.
47
Règles d ’équivalences de l ’algèbre relationnelle
Eclatement d'une sélection conjonctive (SE) e1 ET e2 (T) = e1 ( e2 (T)) Commutativité de la sélection (SC) e1 ( e2 (T)) = e2 ( e1 (T)) Elimination des projections en cascades (PE) liste1 ( liste2 (T)) = liste1 (T) Commutativité de la jointure (JC) T1 |X| T2 = T2 |X| T1 Associativité de la jointure (JA) T1 |X| (T2 |X| T3) = (T1 |X| T2) |X| T3 Etc …
48
Plusieurs plans d ’exécution pour un arbre algébrique
Pour chaque opération logique plusieurs choix d ’opérations physiques etc.
49
Mise en œuvre du plan d'exécution
Matérialisation des tables intermédiaires Pipeline
50
MISE EN ŒUVRE PAR MATÉRIALISATION
51
MISE EN ŒUVRE PAR PIPELINE
52
Heuristiques d'optimisation
Élaguer l ’espace des solutions solutions non applicables Exemples d ’heuristiques sélections le plus tôt possible projections le plus tôt possible arbres biaisés à gauche seulement les jointures les plus restrictives en premier jointures supportées par index en premier
53
Heuristique : arbres biaisés à gauche seulement
Jointure de n tables (2*(n-1))!/(n-1)! ordres différents pour n tables n! biaisés à gauche
54
Minimiser le coût Stratégies Optimisation par coût
programmation dynamique amélioration itérative recuit simulé algorithme génétique
55
ESTIMATION DU COÛT D'UN PLAN D'EXÉCUTION
TempsES(Plan avec pipeline) = TempsES (JTFLivre|X|Catégorie) = ms
56
Autre exemple TempsES(Plan avec pipeline) =
TempsES(S=IS pour index sur ISBN) + N s ISBN=1(Livre) * TempsES(S=IS sur code de Catégorie) = 55 ms + 33 ms = 88 ms
57
ESTIMATION DE LA TAILLE DU RÉSULTAT D'UNE OPÉRATION
Taille d'une sélection SelT (Expression de sélection)/ FBMT blocs Taille d'une projection N C1,C2,…,Cn(T) = (1- colonnes Ci de la projection (1- FacteurSélectivitéT (Ci)))*NT Taille d'une jointure naturelle NR |X| S = NR * NS / maximum(CardR(cléJointure), CardS(cléJointure))
58
Contrôle du processus d'optimisation
Cas Oracle outils EXPLAIN PLAN SQL Trace SQL Analyse (Enterprise Manager Tuning Pack) Oracle EXPERT
59
Indices (hints)
60
Paramètre OPTIMIZER_MODE
COST (statistique): minimise le coût estimé besoin de statistiques (ANALYSE) mieux mais plus cher ALL_ROWS minimise le temps total (plutôt MERGE JOIN) FIRST_ROWS minimise temps réponse (plutôt NESTED LOOPS) RULE (heuristique) appelé à disparaître ? (Il semble que oui)
61
Changement du mode pour une session
ALTER SESSION SET OPTIMIZER_GOAL = RULE | ALL_ROWS | FIRST_ROWS | CHOOSE
62
Exemple d ’utilisation de EXPLAIN PLAN
SQL> start utlxplan.sql Pour créer la table plan_table Table created. ... SQL> run 1 explain plan 2 set statement_id = 'com' 3 for select * from commandes, lignes_de_commande 4* where no_commande = commande_no_commande Explained.
63
Suite SQL> run 1 SELECT LPAD(' ',2*(LEVEL-1))||operation||' '||options 2 ||' '||object_name 3 ||' '||DECODE(id, 0, 'Cost = '||position) "Query Plan" 4 FROM plan_table 5 START WITH id = 0 AND statement_id = 'com' 6* CONNECT BY PRIOR id = parent_id AND statement_id ='com' Query Plan SELECT STATEMENT Cost = NESTED LOOPS TABLE ACCESS FULL LIGNES_DE_COMMANDE TABLE ACCESS BY ROWID COMMANDES INDEX UNIQUE SCAN COMMANDE_PK
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.