La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Évaluation des requêtes relationnelles

Présentations similaires


Présentation au sujet: "Évaluation des requêtes relationnelles"— Transcription de 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

64


Télécharger ppt "Évaluation des requêtes relationnelles"

Présentations similaires


Annonces Google