Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Info 409 - Bases de données avancées
Université Libanaise Faculté des Sciences – Section I Master 1 Informatique Info Bases de données avancées Semestre: 2 Année Universitaire: 2017/ Crédits: 5 Dr. Antoun Yaacoub
2
Plan Partie I Partie II Partie III Partie IV Pannes système
Gestionnaire de transactions Contrôle concurrentiel Bases de données distribuées Partie II Implémentation des SGBDs: Enregistrements, blocs et adressage Structures d’index: Arbre binaire balancé et table de hachage Partie III Optimisation des requêtes Exécution des requêtes Partie IV Bases de données déductives Bases de données orientées objet
3
Optimisation et exécution des requêtes
select e.nom from enseignant e where e.ville in ( select V from ( select e1.ville as V, count(e1.enseignant_id) as cc from enseignant e group by e1.ville) where cc >= any (select count(e2.enseignant_id) from enseignant e2 group by e2.ville) ) ; Optimisation et exécution des requêtes Partie III
4
Référence Fundamentals of Database Systems 6th Edition Elmasri, Navathe Addison-Wesley
5
Plan Survoler les techniques utilisées par un SGBD pour traiter, optimiser et exécuter des requêtes de haut niveau.
6
Etapes typiques lors du traitement d’une requête de haut niveau
Lecture: identification des mots-clés SQL, des relations et des attributs Analyse: vérifier les règles de syntaxe Validation: vérifier l’existence des attributs et des relations dans la BD Optimiseur de requête: conception d’une stratégie d'exécution lecture, analyse et validation Forme immédiate de la requête (arbre) optimiseur de requête Plan d’exécution Générateur de code de la requête Code pour exécuter la requête Processeur d’exécution BD Résultat la requête
7
Introduction Trouver la stratégie optimale nécessite généralement trop de temps, sauf pour la plus simple des requêtes. La recherche d’une stratégie optimale d'exécution de requête nécessite la disponibilité d‘informations détaillées Sur la façon dont les fichiers sont mis en œuvre et Sur le contenu du fichier Des informations qui peuvent ne pas être entièrement disponible dans le catalogue du SGBD.
8
Optimisation Chaque SGBD possède un certain nombre d'algorithmes générales d'accès de base de données qui implémentent les opérations relationnelles telles que SELECT, JOIN ou des combinaisons de ces opérations. Seules les stratégies d'exécution qui peuvent être implémentées par les algorithmes d'accès SGBD et qui s'appliquent à une requête et un modèle physique particuliers peuvent être considérées par le module d'optimisation des requêtes.
9
Traduire les requêtes SQL en algèbre relationnel
10
Rappel Opérateur de sélection 𝝈
Select * from EMPLOYEE where Dno=4 𝝈 Dno=4 (EMPLOYEE) Select * from EMPLOYEE where Salary> 𝝈 Salary>30000 (EMPLOYEE) La forme générale 𝝈 <Condition de sélection> (RELATION)
11
Rappel Opérateur de projection 𝝅
Select Lname, Fname, Salary from EMPLOYEE 𝝅 Lname, Fname, Salary (EMPLOYEE) La forme générale 𝝅 <liste d′attributs> (RELATION)
12
Rappel Opérateur de jointure ⋈
Select E.*, D.* from EMPLOYEE E , DEPARTMENT D DEPARTMENT ⋈ Mgr_ssn=Ssn EMPLOYEE La forme générale 𝑹⋈ <condition de jointure> 𝑺
13
Rappel Opérateur de groupe ℑ
ℑF Prononcé script F La forme générale <attributs de groupe> 𝕴 <list de fonction> 𝑹 Select COUNT Ssn, AVERAGE Salary from EMPLOYEE group by Dno Dno 𝕴 COUNT Ssn, AVERAGE Salary (EMPLOYEE)
14
Les étapes d’optimisation
La requête SQL est traduite en une expression équivalente en algèbre relationnel Optimiser la requête
15
Traduction des requêtes SQL en une expression équivalente en algèbre relationnel
Les requêtes SQL sont décomposées en des blocs de requêtes: SELECT-FROM-WHERE (GROUP BY- HAVING) Chaque bloc est traduit en algèbre relationnel Exemple: SELECT E.lname, E.fname FROM EMPLOYEE E WHERE E.salary > (SELECT MAX(E1.salary) FROM EMPLOYEE E WHERE E1.Dno=5) Bloc 1 Bloc 2 SELECT E.lname, E.fname SELECT MAX(E1.salary) FROM EMPLOYEE E FROM EMPLOYEE E WHERE E.salary > C WHERE E1.Dno=5 𝝅 lname,fname(𝝈 salary>c(EMPLOYEE)) 𝕴 MAX salary(𝝈 Dno=5(EMPLOYEE))
16
Algorithme de tri externe
17
Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 1: créer N/(M –1)=4 groupes triés chacun de taille (M – 1) blocs 1 2 4 2 9 1 5 3 8 3 2 8 5 2 Mémoire centrale
18
Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 2: fusionner (M –1)=2 groupes triés en un groupe trié 1 1 2 2 4 9 2 3 3 5 8 2 5 8 Mémoire centrale
19
Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 2: fusionner (M –1)=2 groupes triés en un groupe trié 1 1 2 2 2 3 3 4 5 8 9 2 5 8 Mémoire centrale
20
Algorithmes de Tri externe
Algorithmes de tri: peuvent être utilisés pour les requêtes ayant une clause ORDER-BY, des opérations JOIN, UNION, INTERSECT, EXCEPT, l’option DISTINCT. Tri externe: Adéquat pour les gros fichiers ou les enregistrements qui ne se calent pas dans la mémoire principale, utiliser une stratégie de tri-fusion: Trier de petits sous-fichiers triés (runs) du fichier principal (en mémoire) (par conséquent) Fusionner les runs triés.
21
En détail Deux phases: Phase de tri: Phase de la fusion:
Les runs du fichier qui peuvent se tenir dans l'espace disponible de la mémoire tampon sont lues dans la mémoire, Les runs sont triés à l'aide d'un algorithme de tri interne, Les runs sont écrits sur le disque comme des sous-fichiers triés temporaires. Phase de la fusion: Les runs triés sont fusionnés pendant une ou plusieurs passes.
22
Les étapes de tri externe tri-fusion
La phase de tri La taille d’un run et le nombre de runs (nR) sont dictés par: le nombre de blocs de données (b) et l’espace tampon disponible (nB). Par exemple, si nB=5 blocs, b = 1024 blocs, alors nR= 𝑏 𝑛𝐵 =205 runs. Après la phase de tri, 205 runs triés sont sauvegardés comme des sous- fichiers temporaires sur le disque.
23
Les étapes de tri externe tri-fusion
La phase de fusion Les runs triés sont fusionnés pendant une ou plusieurs passes La degré de fusion (dM): nombre de runs qui peut être fusionné ensemble en une passe. Dans chaque passe Un bloc tampon est nécessaire pour maintenir un bloc de chacun des runs fusionnés Un bloc est nécessaire pour maintenir un bloc du résultat de fusion dM= min(nB-1, nR) Nombre des passes=logdM(nR)
24
Reprenons l’exemple Par exemple, si nB=5 blocs, b = 1024 blocs, alors nR= 𝑏 𝑛𝐵 =205 runs. Après la phase de tri, 205 runs triés sont sauvegardés comme des sous- fichiers temporaires sur le disque. dM= min(nB-1, nR) = min(4, 205) = 4 Les 205 runs triés seront fusionnés à chaque étape 4 à la fois (4-way merging) – 52 – 13 – 4 – On a besoin de 4 passes, vérifions Nombre des passes=logdM(nR) = log4(205) = 4
25
i ← 1; j ← b; {taille du fichier en blocs} k ← nB; {taille du tampon en blocs} m ← ( j/k); {Phase de tri} while (i ≤ m){ Lire les k (ou ce qui reste) blocs suivants du fichier dans le tampon; Trier les enregistrements dans le tampon et écrire comme des sous-fichiers temporaires; i ← i + 1; } {Phase de fusion : fusion des sous-fichiers jusqu'à ce qu'il ne reste que 1} i ← 1; p ← logk-1m {p est le nombre de passes pour la phase de fusion} j ← m; while (i ≤ p) { n ← 1; q ← j/(k–1) ; {nombre de sous-fichiers à écrire dans cette passe} while (n ≤ q) do { lire kes k–1 (ou ce qui reste) sous-fichiers suivants 1 bloc à la fois; fusionner et écrire comme un nouveau sous-fichier 1 bloc à la fois; n ← n + 1; } j ← q; i ← i + 1; }
26
Divers algorithmes pour les opérations usuelles
27
Plan Implémentation de l’opération de sélection
Implémentation de l’opération de jointure Implémentation de l’opération de projection Implémentation de l’opération de produit cartésien Implémentation de l’opération de l’union Implémentation des opérations d’intersection et d’exception Implémentation des opérations de min, max, count, avg et sum Implémentation de l’opération de group by
28
Implémentation de l’opération de sélection
29
Implémentation de l’opération de sélection
Select = opération de recherche pour localiser les enregistrements dans un fichier de données qui satisfont une certaine condition. Méthodes de recherche pour des sélections simple: Algorithmes de recherche sont appelés file scans, car ils scannent les enregistrements d’un fichier pour retrouver les enregistrements qui satisfont la condition de sélection. Diapos suivants: 6 méthodes de recherche implémentant l’opération de sélection.
30
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections SIMPLE
S1 - Recherche linéaire: Retrouver chaque enregistrement dans le fichier et tester si les valeurs de ses attributs satisfont la condition de sélection. La recherche est effectuée dans les tampons. S2 – Recherche binaire: Si la condition de sélection contient une égalité et le fichier est ordonné. Généralement, la recherche binaire n’est pas utilisée en BD parce que les fichiers ordonnés ne sont utilisés que s’ils disposent d’un index primaire. S3a – Utilisation d’un index primaire: Si la condition de sélection contient une égalité sur un attribut disposant d’un index primaire. Cette condition retrouve un seul enregistrement.
31
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections SIMPLE
S3b – Utilisation d’une clé de hachage: Si la condition de sélection contient une égalité sur un attribut ayant une clé de hachage. Cette condition retrouve un seul enregistrement. S4 – Utilisation d’un index primaire pour retrouver plusieurs enregistrements: Si la condition de sélection contient une comparaison is >, >=, <, ou <= sur un attribut ayant un index primaire. S5 – Utilisation d’un index de groupe (cluster) pour retrouver plusieurs enregistrements: Si la condition de sélection contient une égalité sur un attribut non clé ayant un index de groupe. S6 – Utilisation d’un index secondaire (B+-tree): Cette méthode retrouve 1 enregistrement si le champ d’indexation est une clé. Utilisée aussi si la condition de sélection contient une comparaison is >, >=, <, ou <=.
32
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S7 – Sélection conjonctive en utilisant un indice individuel: Si un attribut impliqué dans une des conditions simples de la condition de sélection conjonctive a un chemin d'accès qui permet l'utilisation l'une des méthodes S2 à S6, utiliser cette condition pour récupérer les enregistrements et puis vérifier si chaque enregistrement récupéré satisfait aux conditions simples restants dans la condition de sélection conjonctive.
33
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S8 – Sélection conjonctive à l'aide d'un indice composite: Si deux ou plusieurs attributs sont impliqués dans des conditions d'égalité dans la condition de sélection conjonctive et un index composite (ou une structure de hachage) existe sur les champs combinés. Par exemple, si un index a été créé sur la clé composite (Dno, Salary, Sex), nous pouvons utiliser directement l'index.
34
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S9 – Sélection conjonctive par intersection de pointeurs d’enregistrements: Si un index secondaires (ou d'autres chemin d'accès) sont disponibles sur plus d'un des attributs concernés dans des conditions simples de la condition de sélection conjonctive, et si les index comprennent des pointeurs d'enregistrements (plutôt que des pointeurs de bloc) , alors chaque index peut être utilisé pour récupérer l'ensemble de pointeurs d'enregistrements qui satisfont la condition individuelle. L'intersection de ces ensembles de pointeurs d'enregistrements donne les pointeurs d'enregistrements qui satisfont la condition de sélection conjonctive, qui sont ensuite utilisés pour récupérer directement ces enregistrements. Si une partie seulement des conditions ont des index secondaires, chaque enregistrement récupéré est ensuite testé pour déterminer s'il satisfait aux conditions. En général, la méthode S9 suppose que chacun des index est sur un champ non- clé du fichier, parce que si une des conditions est une condition d’égalité sur un attribut clé, alors un seul enregistrement satisfaisait à la condition entière.
35
Implémentation de l’opération de sélection Méthodes de recherche pour des sélections DISJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 OR Salary > OR Sex = ‘F’ (EMPLOYEE) peu d'optimisation peut être fait, parce que les enregistrements satisfaisant à la condition disjonctive sont l'union des enregistrements répondant aux conditions individuelles. Si une des conditions n'a pas un chemin d'accès utiliser la force brute, approche linéaire de recherche. Si un chemin d'accès existe sur chaque condition simple dans la disjonction optimiser la sélection en récupérant les enregistrements satisfaisant chaque condition et appliquer ensuite l’opération union pour éliminer les doublons.
36
Implémentation de l’opération de jointure
37
Implémentation de l’opération de jointure
Join= opération nécessitant un temps de traitement énorme. On considère les jointures de la forme: 𝑹⋈ A=B 𝑺 Méthodes implémentant la jointure: Diapos suivants: 4 méthodes de recherches implémentant la jointure
38
Implémentation de l’opération de jointure
Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J1 – Jointure à boucles (blocs) imbriquées : C'est l'algorithme par défaut (brute force), car il ne nécessite pas de chemins d'accès spécifiques de chaque fichier dans la jointure Pour chaque enregistrement t dans R (boucle externe), récupérer tous les enregistrements s de S (boucle interne) et tester si les deux enregistrements satisfont la condition de jointure t[A] = s[B].
39
Implémentation de l’opération de jointure
Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J2 – Jointure à boucles simples (en utilisant une structure d'accès pour retrouver les enregistrements): Si un index (ou une clé de hachage) existe pour l'un des deux attributs de jointure (disons attribut B du fichier S), récupérer chaque enregistrement t dans R (boucle sur le fichier R), puis utiliser la structure d'accès (tel qu’un index ou une clé de hachage) pour récupérer directement les enregistrements correspondants s de S qui satisfont s[B]=t[A].
40
Implémentation de l’opération de jointure
Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J3 – Jointure de tri-fusion: Si les enregistrements de R et S sont triés par valeur des attributs de jointure A et B, respectivement, nous pouvons mettre en œuvre la jointure de la manière la plus efficace possible. Les deux fichiers sont analysés simultanément dans l'ordre des attributs de la jointure, et faire correspondre les enregistrements qui ont les mêmes valeurs pour A et B. Si les fichiers ne sont pas triés, ils peuvent être triés en utilisant d'abord le tri externe.
41
Implémentation de l’opération de jointure
Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J4 – Jointure de partition-hachage: Les enregistrements des fichiers R et S sont partitionner en petits fichiers. Le partitionnement de chaque fichier se fait en utilisant la même fonction de hachage h sur les attributs jointure A de R et B de S. Phase de partitionnement: Tout d'abord, un seul passage dans le fichier ayant le moins d'enregistrements (disons R) hache ses enregistrements; les enregistrements de R sont cloisonnés dans les buckets de hachage. Après cette phase, nous supposons que la taille du fichier peut tenir entièrement dans la mémoire principale. La collection des enregistrements ayant la même valeur de h(A) sont placés dans la même partition. Phase de sondage: Un seul passage dans l'autre fichier (S) hache alors chacun de ses enregistrements à l'aide de la même fonction de hachage h(B) pour sonder le bucket approprié, et l’enregistrement est combiné avec tous les enregistrements correspondants de R dans ce bucket.
42
Influence des tampon disponibles et choix du fichier de la boucle externe sur les performances de la jointure à boucles imbriquées J1 L'espace tampon disponible a un effet important. Pour la requête suivante: EMPLOYEE⋈ Dno=Dnumber DEPARTMENT Supposons que le nb de tampons disponibles dans la mémoire principale est nB = 7 blocs À titre d'illustration , supposons que le fichier DEPARTMENT se compose de rD = 50 enregistrements stockés dans bD = 10 blocs de disque et que le fichier EMPLOYEE se compose de rE = 6000 enregistrements stockés dans bE = blocs de disque. 7 blocs : 5 blocs pour la boucle externe + 1 bloc pour la boucle interne + 1 bloc de tampon Algo: Lecture de 5 blocs à partir du fichier de la boucle externe, Lecture d’1 bloc à partir du fichier de la boucle interne, utiliser ses enregistrements pour sonder les blocs de boucle externe en mémoire pour trouver les enregistrements correspondants, Les enregistrements joints contenus dans la mémoire tampon sont ajoutés au fichier (sur le disque)
43
Choix du fichier de la boucle externe
Dans la jointure de boucle imbriquée, cela fait une différence quel fichier est choisi pour la boucle externe et quel fichier pour la boucle interne. EMPLOYEE est utilisée en boucle externe Chaque bloc de EMPLOYEE est lu une fois L’ensemble du fichier DEPARTMENT est lu à chaque lecture de nB-2 blocs du fichier EMPLOYEE Nombre total d’accès de bloc (lecture) pour le fichier de la boucle externe = bE. Nombre de fois que (nB-2) blocs de la boucle externe sont chargés en mémoire = 𝑏𝐸 𝑛𝐵−2 . Nombre total d’accès de bloc (lecture) pour le fichier de la boucle interne= bD* 𝑏𝐸 𝑛𝐵−2 . Le nombre total d’accès de bloc (lecture): bE+ bD* 𝑏𝐸 𝑛𝐵−2 = * = 6000 accès de blocs (+ écriture des blocs réusltants sur le disque).
44
Choix du fichier de la boucle externe
Dans la jointure de boucle imbriquée, cela fait une différence quel fichier est choisi pour la boucle externe et quel fichier pour la boucle interne. DEPARTMENT est utilisée en boucle externe Chaque bloc de DEPARTMENT est lu une fois L’ensemble du fichier EMPLOYEE est lu à chaque lecture de nB-2 blocs du fichier DEPARTMENT Nombre total d’accès de bloc (lecture) pour le fichier de la boucle externe = bD. Nombre de fois que (nB-2) blocs de la boucle externe sont chargés en mémoire = 𝑏𝐷 𝑛𝐵−2 . Nombre total d’accès de bloc (lecture) pour le fichier de la boucle interne= bE* 𝑏𝐷 𝑛𝐵−2 . Le nombre total d’accès de bloc (lecture): bD+ bE* 𝑏𝐷 𝑛𝐵−2 = * 10 5 = 4010 accès de blocs (+ écriture des blocs réusltants sur le disque).
45
Choix du fichier de la boucle externe
Règle d’or Il est avantageux d’utiliser un fichier ayant moins de blocs en boucle externe qu’en boucle interne dans l’algorithme de jointure à boucle imbriquée.
46
Implémentation de l’opération de projection
47
Implémentation de l’opération de projection
Une opération de PROJECTION 𝝅 <liste d′attributs> (R) est simple à mettre en œuvre si <liste d′attributs> comprend une clé de la relation R, car dans ce cas le résultat de l'opération aura le même nombre de lignes que R. Si <liste d′attributs> ne comprend pas une clé de R, alors les tuples dupliqués doivent être éliminés. Ceci peut être effectué en: triant le résultat de l'opération, puis en éliminant les tuples dupliqués. utilisant une fonction de hachage pour éliminer les doublons: à chaque fois qu’un enregistrement est haché et inséré dans un bucket du fichier de hachage, on vérifie si l’enregistrement existe déjà dans le bucket; s'il s'agit d'un doublons, on ne l’insère pas dans le bucket.
48
Implémentation de l’opération de produit cartésien
49
Implémentation de l’opération de produit cartésien
Une opération coûteuse à mettre en œuvre: RxS aura m*n enregistrements (m est le nombre d'enregistrements de R et n le nombre d'enregistrements de S) RxS aura j+k attributs (j est le nombre d'attributs de R et k le nombre d'attributs de S) Par conséquent, il est important d'éviter l'opération de produit cartésien et de la substituer par d'autres opérations telles que la jointure lors de l'optimisation de la requête.
50
Implémentation des opérations d’union, d’intersection et d’exception
51
Implémentation des opérations d’union, d’intersection et d’exception
La méthode courante pour implémenter ces opérations est d’utiliser une variante de la technique de tri-fusion: Les 2 relations sont triées sur le même attribut Ensuite, un seul balayage de chaque relation est suffisant pour produire le résultat. Le hachage peut être utilisé aussi Une table est tout d’abord scannée et ensuite partitionnée (table de hachage avec des buckets) Les enregistrements de l’autre table sont scannés un à la fois et utilisés pour sonder la partition appropriée.
52
Implémentation des opérations d’union, d’intersection et d’exception
Pour implementer RS, hacher les enregistrements de R, puis hacher les enregistrements de S, mais n’insérer pas les enregistrements dupliqués dans les buckets. Pour implementer RS, hacher les enregistrements de R, puis en hachant les enregistrements de S, sonder le bucket pour voir si un enregistrement identique y existe, si c’est le cas, ajouter l’enregistrement au fichier résultant. Pour implementer R-S, hacher les enregistrements de R, puis en hachant les enregistrements de S, sonder le bucket pour voir si un enregistrement identique y existe, si c’est le cas, supprimer le du bucket.
53
Implémentation des opérations de min, max, count, avg et sum
54
Implémentation des opérations de min, max, count, avg et sum
Les fonctions d’agrégation peuvent être calculées en scannant la table ou en utilisant un index approprié (s’il est disponible). SELECT MAX(salary) FROM EMPLOYEE Si un index (B+-tree) sur salary existe, suivre le pointeur le plus à droite (le plus à gauche pour MIN) dans chaque noeud d'index de la racine vers la feuille la plus à drotie (la plus à gauche pour MIN). La dernière (première) entrée du nœud est la plus grande (petite) valeur. L’index peut être utilisé pour count, avg et sum seulement si l’index est dense.
55
Implémentation de l’opération de group by
56
Implémentation de l’opération de group by
SELECT Dno, AVG(Salary) FROM EMPLOYEE GROUP BY Dno; Tout d’abord trier ou hacher sur l’attribut de regroupement pour partitionner le fichier en des groupes appropriés Ensuite, l'algorithme calcule la fonction d'agrégation pour les tuples de chaque groupe. Noter que si un index de groupe (cluster) existe sur les attributs de regroupement, alors les enregistrements sont déjà subdivisés, et il est seulement nécessaire d’appliquer le calcul à chaque groupe.
57
Combinaison des opérations en utilisant des pipelines
58
Combinaison des operations en utilisant des pipelines
Une requête SQL est traduite en une séquence d'opérations relationnelles. Si les opérations sont exécutées une à la fois, le résultat de chaque opération doit être sauvegardé temporairement sur le disque (surcharge excessive, nécessite trop de temps) Solution: utiliser le résultat d'une opération comme entrée de l'opération suivante sans créer de fichiers temporaires. (pipelining, on-the-fly)
59
Exemple 1 Considérons la requête: SELECT S.sname FROM Reserves R, Sailors S WHERE R.sid = S.Sid AND R.bid= AND S.rating >5 En algèbre relationnel 𝝅 sname(𝝈 bid=100 AND rating>5( Reserves ⋈ sid=sid Sailors)) 𝝅 sname on−the−fly 𝝈 bid=100 AND rating>5 on−the−fly Appliquer la sélection et la projection à chaque uplet du résultat de la jointure au moment de sa production. Le résultat de la jointure avant les selections et les projections n’est pas sauvegardé. J2 Jointure à boucles simples Reserves 𝒄𝒐𝒎𝒎𝒆 𝒇𝒊𝒄𝒉𝒊𝒆𝒓 𝒅𝒆 𝒍𝒂 𝒕𝒂𝒃𝒍𝒆 𝒆𝒙𝒕𝒆𝒓𝒏𝒆 ⋈ sid=sid Reserves Sailors Scan du fichier Scan du fichier
60
Exemple 2 (A⋈B )⋈C Les deux jointures peuvent être évaluées en pipeline en utilisant une version de jointure à boucles imbriquées J1. Le noeud joignant A et B produit des tuples quand le noeud parent le demande. Quand le noeud parent reçoit ses tuples du fils gauche (table externe), tous les enregistrements internes qui leur correspondent sont retrouvés et joints avec les enregistrements externes. Les tuples externes sont ensuite jetés. Et le processus continue on−the−fly ⋈ ⋈ C A B
61
Approches pour l’optimisation des requêtes
62
Approches pour l’optimisation des requêtes
Approche heuristique: approche à base de règles Règles heuristiques: pour convertir une requête (arbre) en une requête équivalente (arbre) mais plus efficace EXEMPLE: une des heuristique est d’appliquer les opérations SELECT et PROJECT avant d’appliquer JOIN ou toute autre opération binaire, parce que la taille du fichier résultant depuis la relation binaire est généralement une fonction multiplicative des tailles des fichiers d’entrée. Approche basée sur les coûts
63
Notation Un arbre de requête est une structure de données qui correspond à une expression de l'algèbre relationnelle. Il représente les entrées (relations) de la requête en tant que nœuds feuilles de l'arbre, et représente les opérations d'algèbre relationnelle comme noeuds internes. L'ordre d'exécution des opérations commencent avec les nœuds feuilles, qui représentent les relations de la base de données, et se termine au niveau du nœud racine, qui représente la dernière opération de la requête. L'exécution se termine lorsque l'opération du nœud racine est exécutée et produit la relation résultante de la requête.
64
Exemple Requête: Pour chaque projet situé à 'Stafford', récupérer le numéro de projet, le numéro de département de contrôle, le nom, l’adresse et la date de naissance du chef de service. For every project located in ‘Stafford’, retrieve the project number, the controlling department number, and the department manager’s last name, address, and birthdate. SELECT P.Pnumber, P.Dnum, E.Lname, E.Address, E.Bdate FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS E WHERE P.Dnum=D.Dnumber AND D.Mgr_ssn=E.Ssn AND P.Plocation= ‘Stafford’;
65
Exemple En algèbre relationnel 𝝅 Pnumber, Dnum, Lname, Address, Bdate (((𝝈 Plocation=‘Stafford’ (PROJECT)) ⋈ Dnum=Dnumber (DEPARTMENT)) ⋈ Mgr_ssn=Ssn (EMPLOYEE)) 𝝅 Pnumber, Dnum, Lname, Address, Bdate ⋈ Mgr_ssn=Ssn ⋈ Dnum=Dnumber EMPLOYEE 𝝈 Plocation=‘Stafford’ DEPARTMENT PROJECT
66
Exemple Arbre de requête initial
𝝅 Pnumber, Dnum, Lname, Address, Bdate 𝝈 Dnum=Dnumber AND Mgr_ssn=Ssn AND Plocation=‘Stafford’ Χ Χ EMPLOYEE PROJECT DEPARTMENT
67
Exemple d’une transformation de requête
Requête: Trouver les noms des employés nés après 1957 travaillant sur le projet Aquarius SELECT Lname FROM EMPLOYEE, WORKS_ON, PROJECT WHERE Pname=‘Aquarius’ AND Pnumber=Pno AND Essn=Ssn AND Bdate > ‘ ’;
68
Etapes Arbre de requête initial 𝝅 Lname Déplacer SELECT vers le bas
Appliquer SELECT restrictive au début 𝝈 Pname=‘Aquarius’ AND Pnumber=Pno AND Essn=Ssn AND Bdate > ‘ ’ Remplacer 𝝈 et Χ par ⋈ Χ 𝝈 𝝈 Χ PROJECT WORKS_ON EMPLOYEE 𝝈
69
Etapes Arbre de requête initial Déplacer SELECT vers le bas
Appliquer SELECT restrictive au début 𝝅 Lname Remplacer 𝝈 et Χ par ⋈ Déplacer 𝝅 vers le bas ⋈ Essn=Ssn Bdate > ‘ ’ Pnumber=Pno ⋈ 𝝈 𝝈 EMPLOYEE Pname=‘Aquarius’ WORKS_ON PROJECT
70
Etapes 𝝅 Lname Arbre de requête initial Déplacer SELECT vers le bas
⋈ Essn=Ssn Appliquer SELECT restrictive au début 𝝅 Ssn, Lname Remplacer 𝝈 et Χ par ⋈ 𝝅 Essn Déplacer 𝝅 vers le bas Pnumber=Pno 𝝈 Bdate > ‘ ’ ⋈ EMPLOYEE 𝝅 Pnumber 𝝅 Essn,Pno 𝝈 Pname=‘Aquarius’ WORKS_ON PROJECT
71
Règles de transformations générales
Cascade de : 𝜎 𝑐 1 𝐴𝑁𝐷 𝑐 2 𝐴𝑁𝐷 … 𝐴𝑁𝐷 𝑐 𝑛 𝑅 ≡ 𝜎 𝑐 1 𝜎 𝑐 2 … 𝜎 𝑐 𝑛 (𝑅) Commutativité de : 𝜎 𝑐 1 𝜎 𝑐 2 (𝑅) ≡𝜎 𝑐 2 𝜎 𝑐 1 (𝑅) Cascade de : 𝜋 𝐿𝑖𝑠𝑡𝑒 1 𝜋 𝐿𝑖𝑠𝑡𝑒 2 … 𝜋 𝐿𝑖𝑠𝑡𝑒 𝑛 (𝑅) ≡ 𝜋 𝐿𝑖𝑠𝑡𝑒 1 (𝑅) Commuter par : 𝜋 𝐴 1 , 𝐴 2 ,…, 𝐴 𝑛 𝜎 𝑐 (𝑅) ≡𝜎 𝑐 𝜋 𝐴 1 , 𝐴 2 ,…, 𝐴 𝑛 (𝑅)
72
Règles de transformations générales
Commutativité de Χ et ⋈: 𝑅 ⋈ 𝐶 𝑆≡𝑆 ⋈ 𝐶 𝑅 𝑅×𝑆≡𝑆×𝑅 Commuter par Χ ou ⋈: Si tous les attributs de la sélection sont parmi ceux de R. 𝜎 𝑐 𝑅⋈𝑆 ≡ 𝜎 𝑐 (𝑅) ⋈𝑆 Si la condition de la sélection peut s’écrire 𝑐= 𝑐 1 𝐴𝑁𝐷 𝑐 2 , alors 𝜎 𝑐 𝑅⋈𝑆 ≡ 𝜎 𝑐 1 (𝑅) ⋈ 𝜎 𝑐 2 (𝑆) De même si l’opérateur ⋈ est remplacé par Χ.
73
Règles de transformations générales
Commuter par Χ ou ⋈: Si 𝐿={𝐴 1 ,…, 𝐴 𝑛 , 𝐵 1 ,…, 𝐵 𝑚 }, et 𝑐 ne contient que des attributs de L 𝜋 𝐿 𝑅 ⋈ 𝐶 𝑆 ≡ 𝜋 𝐴 1 ,…, 𝐴 𝑛 (𝑅) ⋈ 𝐶 𝜋 𝐵 1 ,…, 𝐵 𝑚 (𝑆) 𝜋 𝐿 𝑅×𝑆 ≡ 𝜋 𝐴 1 ,…, 𝐴 𝑛 (𝑅) × 𝜋 𝐵 1 ,…, 𝐵 𝑚 (𝑆) Si 𝑐 contient des attributs ne contenant pas dans L 𝜋 𝐿 𝑅 ⋈ 𝐶 𝑆 ≡ 𝜋 𝐿 𝜋 𝐴 1 ,…, 𝐴 𝑛 , 𝐴 𝑛+1 ,…, 𝐴 𝑛+𝑘 (𝑅) ⋈ 𝐶 𝜋 𝐵 1 ,…, 𝐵 𝑚 , 𝐵 𝑚+1 ,…, 𝐵 𝑚+𝑝 (𝑆)
74
Règles de transformations générales
Commutativité des opérations d’ensemble: et 𝑅∪𝑆≡𝑆∪𝑅 𝑅∩𝑆≡𝑆∩𝑅 Associativité de Χ, ⋈, et 𝑅𝜃𝑆 𝜃𝑇≡𝑅𝜃 𝑆𝜃𝑇 Commuter par les opérations d’ensemble : = , , except 𝜎 𝑐 𝑅𝜃𝑆 ≡ 𝜎 𝑐 𝑅 𝜃 𝜎 𝑐 𝑇 commute avec 𝜋 𝐿 𝑅∪𝑆 ≡ 𝜋 𝐿 𝑅 ∪ 𝜋 𝐿 𝑇 Convertir (,Χ) par ⋈ 𝜎 𝑐 𝑅×𝑆 ≡ 𝑅 ⋈ 𝐶 𝑆
75
Algorithme En utilisant la règle 1: briser toute sélection avec des conditions conjonctives en une cascade de sélection. En utilisant les règles 2, 4, 6 et 10: déplacer chaque sélection aussi bas dans l’arbre que c’est possible. En utilisant les règles 5 et 9 Placez dans les feuilles les relations avec la sélection la plus restrictive Assurez-vous que l'ordre des feuilles ne provoque pas l’application d’un produit cartésien En utilisant la règle 12: combiner (sélection, produit) en une jointure En utilisant les règles 3, 4, 7 et 11: Décomposer et déplacer la listes des attributs de projection bas dans l'arbre en créant de nouvelles opérations de projection Identifier des sous-arbres représentant des groupes d'opérations qui peuvent être exécutées par un seul algorithme.
76
Utilisation des estimations de sélectivité et de coûts dans l'optimisation des requêtes
Comparer les coûts de l'exécution d'une requête en utilisant différentes stratégies d'exécution et choisir la stratégie présentant la plus faible estimation de coût. Plus adapté pour les requêtes compilées (vs requêtes interprétées): Optimisation est faite au moment de la compilation, Le code est exécuté lors de l'exécution. Les fonctions de coûts sont des estimations et ne sont pas exactes (stratégie d'exécution n'est pas optimale)
77
Exemple de fonction de coût pour la sélection
𝐶 𝑆 1 =nombre de blocs de données 𝐶 𝑆 3𝑎 =nombre de niveaux d’index + 1 𝐶 𝑆 3𝑏 =nombre de niveaux d’index + 1 𝐶 𝑆 4 = nombre de niveaux d’index + (nombre de blocs de données / 2)
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.