Traitement et optimisation de requêtes

Slides:



Advertisements
Présentations similaires
Optimisation SQL Server
Advertisements

L’optimiseur ORACLE L’optimiseur ORACLE suit une approche classique: Génération de plusieurs plans d’exécution. Estimation du coût de chaque plan généré.
Optimisation des requêtes
Structures de données avancées : MTH ( Multidimensional trie hashing )
Évaluation des requêtes relationnelles
Material/Sources: Daniel Bardou, Julie Dugdale &
Évaluation des requêtes relationnelles
SQL - Subtilités.
Fonctionnalités des SGBD
Witold Litwin Structures physiques Witold Litwin
Algèbre relationnelle
Optimisation algébrique de requêtes relationnelles
Optimisation de Requêtes
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
To Tune or not to Tune? To Tune or not to Tune? A Lightweight Physical Design Alerter Costa Jean-Denis Le Yaouanc Aurélie Mécanismes de SGBD 2007.
Contrôles d'accès aux données
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Bases de données et SGBD relationnels
Les fichiers indexés (Les B-arbres)
Introduction à l’algorithmique
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 Tri Externe Chapitre 13: Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver.
1 Evaluation des Operations Relationnelles Chapitre 14, Section 14.4.
1 Évaluation des Requêtes: Survol Chapitre Objectifs Catalogue Préliminaires: Techniques de base pour traiter des requêtes Chemin daccès Correspondance.
Algèbre Relationnelle
Optimisation des Requêtes Relationnelles
1 Évaluation des Requêtes: Survol Chapitre Objectifs Catalogue Préliminaires: Techniques de base pour traiter des requêtes Chemin daccès Correspondance.
1 Tri Externe Chapitre 13: Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver.
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
1 Evaluation des Operations Relationnelles : Algorithmes Additionnels Chapitre 14, ,
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 Survol du Stockage et de lIndexage Chapitre 8. 2 Objectifs Stockage persistant Organisation des fichiers Fichiers de données Fichiers dindexes Operations.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Évaluation des Requêtes: Survol Chapitre 12.
Cours N°2 Base de Données & Langage SQL
Les concepts et les méthodes des bases de données
Initiation aux bases de données et à la programmation événementielle
OPTIMISATION DE BASE DE DONNEES ORACLE
L’adaptativité pour un solveur de l’équation de Vlasov
Vers l'échantillonnage d'un entrepôt de données
Algèbre Relationnelle : Implémentation
Traduction des opérations sous MySQL
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Bases de données fédéréEs hétérogènes
Optimisation de requêtes
Mini-SGBD Implémentation des opérateurs algébriques Yohann HUBERT Christophe PANNEAU Licence informatique Année Maître de stage : M. KHAYATA.
Arbres binaires et tables de hachage
1 G. Gardarin Optimisation de Requêtes  1. Introduction  2. Arbres relationnels  3. Restructuration algébrique  4. Modèle de coût  5. Choix du meilleur.
OPTIMISATION Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
GF-11: Tri Interne Efficace et Tri Externe
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Adapté de Michael Negnevitsky
Sélection de colonnes (la projection)
Recherches locales et méta-heuristiques
1 Initiation aux bases de données et à la programmation événementielle Responsable : Souheib BAARIR. (le sujet de votre .
22/04/2015© Robert Godin. Tous droits réservés.1 10 Évaluation des requêtes relationnelles n SQL – QUOI n Évaluateur de requêtes du SGBD – COMMENT – en.
Copyright  Oracle Corporation, Tous droits réservés. 2 Sélection et Tri des Lignes Retournées par un SELECT.
1 Survol du Stockage et de l’Indexage Chapitre 8.
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Langage Relationnel Graphe de Requêtes
Structures de données avancées : Introduction D. E ZEGOUR Institut National d ’Informatique.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Matière Sélectionnée: Triage Externe, Join à Hachage, … Chapitres 13—15: 13.1—13.5, 14.4,
Structures de données avancées : MTH ( Multidimensional trie hashing ) D. E ZEGOUR Institut National d ’Informatique.
INTRODUCTION AUX BASES DE DONNEES Algèbre relationnelle
Op é rateurs ensemblistes Module 4. 2 La clause GROUP BY La clause GROUP BY est nécessaire dès que l'on utilise des fonctions de calculs statistiques.
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
Amin Mesmoudi. Les Besoins LSST en stockage et accès aux données (1/2) Stockage: 2 TableTaille#enregistrements#colonnes (arité) Object109 TB38 B470 Moving.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
Algèbre relationnelle - 1 / Djamel Berrabah Algèbre relationnelle Modèle relationnel : rappel Algèbre relationnelle.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Transcription de la présentation:

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

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

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)

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) !!!

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

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>250000 Project) Works)))

É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”

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 » :  ( ())

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é

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

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

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

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 ?

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

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

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”

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

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)

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

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

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})

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

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)

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

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

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"

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'

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

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

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

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

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

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

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

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

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