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

Traitement et optimisation de requêtes

Présentations similaires


Présentation au sujet: "Traitement et optimisation de requêtes"— Transcription de la présentation:

1 Traitement et optimisation de requêtes
Traitement de requêtes SQL Optimisation de requêtes Modèles et estimation de coût Espace de recherche et règles de transformation Stratégies de recherche

2 Traitement de requêtes
Requête déclarative (SQL) Compilateur/Optimiseur Générateur de plans Estimation de coûts Plan d'exécution « optimal » (accès physique aux données) Exécution

3 Comment évaluer une requête SQL efficacement ?
Problème général Comment évaluer une requête SQL efficacement ? Requête : le nom et le titre des employés qui travaillent dans des projets avec un budget > 250 et plus que 2 employés: SELECT DISTINCT Ename, Title FROM Emp, Project, Works WHERE Budget > 250 AND Emp.Eno=Works.Eno AND Project.Pno=Works.Pno AND Project.Pno IN (SELECT Pno FROM Works GROUP BY Pno HAVING COUNT(*) > 2)

4 Problème Requête SQL = expression déclarative
Plan d’exécution = programme impératif Boucles, tests, … Opérations sur des tables et des index (algèbre physique) Génération de tables et index temporaires Problème : Comment trouver un plan d’exécution correcte (il fait ce qu’on attend) et efficace (il le fait vite) !!!

5 Un plan d'exécution possible
T1  Lire la table Project et sélectionner les tuples de Budget > 250 T2  Joindre T1 avec la relation Works T3  Joindre T2 avec la relation Emp T4  Grouper les tuples de Works sur Pno et pour les groupes qui ont plus de 2 tuples, projeter sur Pno T5  Joindre T3 avec T4 T6  Projeter T5 sur Ename, Title Résultat  Éliminer doublons dans T6

6 Représentation graphique
PEname, Title Comment obtenir ce plan? Comment exécuter chaque nœud/sous-arbre? T5 T3 T4 PPno T2 s|G|>2 Emp T1 sBudget>250 Group byPno Works Project Works PEname, Title(PPno(s|G|>2 GroupPno (Works)) (Emp ((sBudget> Project) Works)))

7 Étapes du traitement d’une requête
Requête SQL Répertoire Système : Schéma Index Statistiques Analyse Simplification Optimisation Normalisation Restructuration Plan d'exécution “optimal”

8 Analyse Analyse lexicale et syntaxique :
Validation par rapport à la syntaxe SQL Vérification des types : présence des attributs et relations dans le schéma compatibilité des types dans les prédicats Décomposition en requêtes/sous-requêtes Traduction algébrique « directe » :  ( ())

9 Simplification Objectif : Simplifier la requête Comment ?
Simplifier les conditions de sélection (prédicats) : p1  ¬( p1)  faux p1  (p1  p2)  p1 p1  faux  p1 (a=b  b=c  a=c)  (a=b  b=c) Éliminer des opérations redondantes : ex. : pas besoin de distinct après projection sur une clé

10 Exemple de simplification
SELECT Title FROM Emp WHERE Ename = ‘J. Doe’ OR (NOT(Title = ‘Programmer’) AND(Title = ‘Programmer’ OR Title = ‘Elect. Eng.’) AND NOT(Title = ‘Elect. Eng.’)) A ( B(B C)C)  A ((B C )  (B  C))  A

11 Normalisation et traduction
Normalisation des conditions : Forme normale conjonctive (conjonction de disjonctions) : (p11p12…p1n) … (pm1pm2…pmn) Traduction en algèbre (physique) : OR : union ou sélection AND : jointure ou sélection

12 Traduction en algèbre ENAME Conversion en arbre algébrique Exemple :
SELECT Ename FROM Emp, Works, Project WHERE Emp.Eno = Works.Eno AND Works.Pno = Project.Pno AND Emp.Ename <>‘J.Doe’ AND Project.name = ‘CAD/CAM’ AND (Works.Dur=12 OR Works.Dur=24) DUR=12 OR DUR=24 PNAME=“CAD/CAM” ENAME≠“J. DOE” PNO ENO Project Works Emp

13 Alternatives de traduction
SELECT Ename FROM Emp e,Works w WHERE e.Eno = w.Eno AND w.Dur > 37 Stratégie 1: ENAME(DUR>37EMP.ENO=ASG.ENO(Emp  Works)) Stratégie 2: ENAME(Emp ENO (DUR>37 (Works))) La stratégie 2 semble “meilleure” car elle évite un produit cartésien et sélectionne un sous-ensemble de Works avant la jointure Problème : Comme mesurer la qualité d’une stratégie ?

14 Alternatives ENAME ENAME DUR=12 OR DUR=24 PNAME=“CAD/CAM”
PNO ENAME≠“J. DOE” ENO PNAME=“CAD/CAM” PNO DUR=12 OR DUR=24 ENAME≠“J. DOE” ENO Project Works Emp Project Works Emp

15 Optimisation de requête
Objectif : trouver le plan d’exécution le moins « coûteux » Fonction de coût : donne une estimation du coût total réél d’un plan d’exécution Coût total = coût I/O + coût CPU On peut négliger le coût CPU : coût I/O = 1000 * coût CPU Problème 1 : Définition d’une bonne fonction de coût Solution : statistiques et estimations Problème 2 : Taille de l’espace de recherche Espace de recherche = ensemble des expressions algébriques équivalentes pour une même requête Solution : recherche non-exhaustive d’une bonne solution (pas forcément la meilleure) avec des heuristiques

16 Estimer le coût d’un plan
La fonction de coût donne une estimation des temps I/O et CPU nombre d’instructions et d’accès disques (écriture/lecture) Estimation du nombre d’accès disque pendant l’évaluation de chaque nœud de l’arbre algébrique utilisation de pipelines (en mémoire) ou de relations temporaires (écrits sur disque) Estimation de la taille du résultat de chaque nœud par rapport à ses entrées : sélectivité des opérations – “facteur de réduction”

17 Implémentation et coût des opérateurs
Sélection (avec R contenant n pages disques) : parcours séquentiel (scan) le nombre d’accès disques est en O(n) sélection avec index index B+ – O(log(n)) index haché – O(1) Projection : sans élimination des doublons – O(n) avec élimination des doublons en triant – O(n log(n)) en hachant – O(n+t) où t = nombre de pages du résultat

18 Implémentation et coût des opérateurs
Jointure (avec R et S contenant n et m pages disques) boucle imbriquée (nested loop): T = R⋈R.A=S.B S foreach tuple rR do foreach tuple sS do if r.A==s.B then T = T + <r,s> Lectures/écritures : O(n*m) Amélioration possible pour réduire les accès disques boucles imbriquées par blocs de k pages O(n + (n / k) * m), où k ~ # pages mémoire disponibles Cas le plus simple : R et/ou S tient en mémoire centrale (n/k = 1)

19 Implémentation et coût des opérateurs
T = R⋈R.A=S.B S Boucle imbriquée et index sur attribut S.B : O(n * log(m)) foreach tuple rR do foreach tuples sS accédé par indexS.B(r.A) do T = T + <r,s> Jointure par tri-fusion : O(n*log(n) + m*log(m)) trier R et S sur les attributs de jointure (R.A, S.B) : n*log(n) + m*log(m) fusionner les relations triées : n+m (jointure sur une clé) Jointure par hachage : O(3*(n+m)) hacher R et S avec la même fonction de hachage H : (n+m) lectures, (n+m) écritures pour chaque paquet i de R et de S, joindre les tuplets où r.A=s.B : m+n lectures

20 Estimation de la taille des résultats intermédiaires : Statistiques
Relation R: cardinalité : card(R) largeur (arité) de R : taille d’un nuplet fraction de nuplets participant à une sélection, jointure, … Attribut A: domaine de A : dom(A) valeurs max(A), min(A), … dans la base de données nombre de valeurs distinctes dans la base de données distribution des valeurs (histogrammes) dans la base de données Hypothèses (dans la suite) : indépendance entre les différentes valeurs d'attributs distribution uniforme des valeurs d'attribut dans leur domaine

21 Tailles des relations intermédiaires
Sélection : taille(R) = card(R) largeur(R) card(F (R)) = SF (F) card(R) où S F est une estimation de la sélectivité du prédicat : S F(A = valeur) = card(∏A(R)) 1 max(A) – valeur valeur – min(A) S F(A > valeur) = S F(A < valeur) = max(A) – min(A) max(A) – min(A) SF(p(Ai) p(Aj)) = SF(p(Ai))  SF(p(Aj)) SF(p(Ai) p(Aj)) = SF(p(Ai)) + SF(p(Aj)) – (SF(p(Ai))  SF(p(Aj))) SF(A  valeur) = SF(A= valeur)  card({valeurs})

22 Tailles des relations intermédiaires
Projection card(A(R)) <=card(R) (égalité si A est unique) Produit cartésien card(R  S) = card(R) card(S) Union borne sup. : card(R  S) = card(R) + card(S) borne inf. : card(R  S) = max{card(R), card(S)} Différence borne sup. : card(R–S) = card(R) borne inf. : 0

23 Tailles des relations intermédiaires
Jointure : cas particulier: A est clé de R et B est clé étrangère de S : card(R A=B S) = card(S) plus généralement card(R S) = SFJ card(R) card(S)

24 Espace de recherche Espace de recherche : Observations :
ensemble des plans équivalents pour une même requête peut être généré en appliquant des règles de transformation Observations : Deux plans équivalents ont en général des coûts différents. L'ordre des opérations est importante : opérations plus ou moins coûteuses et sélectives

25 Espace de recherche … ENAME ENAME DUR=12 OR DUR=24 PNAME=“CAD/CAM”
ENAME≠“J. DOE” Project Works Emp PNO ENO ENAME DUR=12 OR DUR=24 PNAME=“CAD/CAM” ENAME≠“J. DOE” PNO ENO Project Works Emp

26 Règles de transformation
Commutativité des opérations binaires R  S  S  R R S  S R R  S  S  R Associativité des opérations binaires ( R  S )  T  R  (S  T) ( R S ) T  R (S T ) Idempotence des opérations unaires A’(A’’(R))  A’(R) p1(A1)(p2(A2)(R))  p1(A1)  p2(A2)(R) où R[A] et A'  A, A"  A et A'  A"

27 Règles de transformation
Commutativité de la sélection et de la projection Commutativité de la sélection avec les opérations binaires p(A)(R  S)  (p(A) (R))  S p(Ai)(R (Aj,Bk) S)  (p(Ai) (R)) (Aj,Bk) S p(Ai)(R  T)  p(Ai) (R)  p(Ai) (T) où Ai appartient à R et T Commutativité de la projection avec les opérations binaires C(R  S)  A’(R)  B’(S) C(R (Aj,Bk) S)  A’(R) (Aj,Bk) B’(S) C(R  S)  C (R)  C (S) où R[A] et S[B]; C = A'  B' où A'  A, B'  B, Aj  A', Bk  B'

28 Heuristique L'ordre des opérations est importante : opérations plus ou moins coûteuses et sélectives Idée : faire les opérateurs les moins coûteux (projection, sélection) et les plus sélectives en premier, de manière à réduire la taille des données d’entrée pour les opérateurs les plus coûteux (jointure) Méthode heuristique : descendre les sélections, puis les projections au maximum grâce aux règles de transformation

29 Arbres de jointures Avec N relations, il y a O(N!) arbres de jointures équivalents qui peuvent être obtenus en appliquant les règles de commutativité et d'associativité SELECT Ename,Resp FROM Emp, Works, Project WHERE Emp.Eno=Works.Eno AND Works.PNO=Project.PNO Project Emp Works Emp Project Works Works Project Emp

30 Exemple ENAME SELECT Ename FROM Project p, Works w, Emp e
WHERE w.Eno=e.Eno AND w.Pno=p.Pno AND Ename<>`J. Doe’ AND p.Pname=`CAD/CAM’ AND (Dur=12 OR Dur=24) DUR=12 OR DUR=24 PNAME=“CAD/CAM” ENAME≠“J. DOE” Project Works Emp

31 Requête équivalente Ename
Pname=`CAD/CAM’  (Dur=12  Dur=24) Ename<>`J. DOE’ Works Project Emp

32 Autre requête équivalente
Ename Pno,Ename Pno Pno,Eno Eno,Ename Pname = `CAD/CAM’ Dur =12 Dur=24 Ename <> `J. Doe’ Project Works Emp

33 Stratégies de recherche
Déterministe : part des relations de base et construit les plans en ajoutant une relation à chaque étape technique : programmation dynamique excellent jusqu'à 5-6 relations Aléatoire : recherche de l'optimalité autour d'un point de départ aléatoire réduit le temps d'optimisation (au profit du temps d'exécution) technique : recuit simulé meilleur avec > 5-6 relations

34 Stratégies de recherche
Déterministe R4 R3 R3 R1 R2 R1 R2 R1 R2 Aléatoire R3 R2 R1 R2 R1 R3

35 Algorithmes de recherche
Limiter l'espace de recherche heuristiques par ex. appliquer les opérations unaires avant les autres limiter la forme des arbres Arbre linéaire Arbre touffu R4 R3 R1 R2 R3 R4 R1 R2

36 Un peu de pratique avec CBO
4 modes d’optimisation rule, choose, all_rows, et first_rows optimizer_mode=first_rows Retourne les lignes dès que possible Le temps de traitement peut être plus long et peut utiliser plus de ressources que les autres plans Pratique pour les OLTP et requiert un index optimizer_mode=all_rows Retourne l’ensemble des lignes en même temps Minimise les ressources à utiliser optimizer_mode=first_rows_n Optimise l’exécution pour un faible ensemble de tuples escomptés Valeurs possibles : 1, 10,100, et1000


Télécharger ppt "Traitement et optimisation de requêtes"

Présentations similaires


Annonces Google