Académique Documents
Professionnel Documents
Culture Documents
Interface
1. Gestion de la mémoire
Analyseur sémantique
2. Algorithmes de sélection
Optimiseur
Opérateurs relationnels
4. Autres opérateurs
Méthodes d’accès aux données
Système d’exploitation
1 2
Query 2
– Application d’heuristiques de swap (ex: LRU)
– Pas de connexion avec le verrouillage/journalisation BD
Op. 2 Op. 3
• Le SGBD a une connaissance du contenu des pages et de leur
Query 1
utilisation
– Permet d’optimiser les accès aux pages
Disponible
Nécessaire
Problème complexe …
Op. 1
• prefetching,
• heuristiques associées aux opérateurs (patterns d’accès connus) … et important
– Permet de ne pas swapper des pages déjà existantes dans la BD Entre les Entre les Dans un
– Ecritures disques faites en accord avec la gestion de transactions requêtes opérateurs opérateur
(journalisation)
3 4
Adapter les opérateurs à la mémoire ! Les opérateurs
• Le choix de la bonne implémentation d’un opérateur • Sélection (σ), sélection d’un sous ensemble des tuples d’une table
– Par Scan, par index
relationnel (select, project, join, union, etc.) dépend
• Projection (π), sélection d’un sous ensemble d’attributs d’une table
– de la requête et de sa sélectivité – Par Scan, par index, par tri ou hachage (si élimination des doublons)
– des caractéristiques des inputs (tables en entrée) • Jointure (∞), combinaison de deux tables sur critère
– Par boucles imbriquées
– de ses paramètres (prédicat de jointure, de sélection, etc.) – Par index
– des structures d’indexation existantes – Par tri
– Par hachage
– et de la quantité de mémoire disponible
• Autres opérateurs
– Groupement, agrégats
– Différence (-), Union (∪), Intersection (∩)
• Quels sont les différents choix ? Objet de ce cours
• Chaque opérateur prend en entrée une ou deux tables et renvoie une table
• Comment choisir ? Problématique d’optimisation possibilité de composer les opérateurs pour former des plans (arbres)
d’exécution de requêtes
(cours suivant)
5 6
7 8
Sélection σ : utilisation de plusieurs index Projection
• Identification des index les plus sélectifs • Habituellement intégrée à la production du résultat du dernier
opérateur du plan ( coût nul)
• Intersection et union de listes de Rid de ces index
• L’opération coûteuse est l’élimination des doublons
– Accès aux tuples dont les identifiants sont retenus
– SQL n’élimine pas les doublons
– Vérification du reste du critère sur les tuples résultat (sauf si la clause DISTINCT est spécifiée dans la requête)
– Exemple :
SQL> SELECT DISTINCT V.id, V.doc
• (SPEC=‘Dentiste’ OR SPEC=‘Stomatologie’) AND (ADRESSE = > FROM Visite V ;
‘Versailles’) AND (AGE>30)
• L = (S1 ∪ S2) ∩ A1 • Algorithme
• Accéder aux tuples de L et vérifier le critère AGE – Basé sur du tri ou du hachage
• Les index bitmap permettent de combiner
efficacement des critères peu sélectifs • Remarques sur l’approche tri
– Le résultat final est de fait trié
– C’est l’implantation standard choisie par les éditeurs de SGBD
9 10
Page 1
IN M-2
DOC ∞ VIS
IN 2
IN 1
…
Page K
Page 2
Page 1
OUT M
VIS
…
…
FOR EACH tuple tD IN DOC
Page V
Page 2
Page 1
IN M-1
• Coût en I/O = |DOC| + |DOC|/(M -2) × |VIS| – Coût = |DOC| + ||DOC|| × (n+1) si M=4
• Les idées simples sont parfois les meilleures – Coût = |DOC| + p + |VIS| si M = |VIS| + p
– NB1: algo optimal si la table externe tient en mémoire !
– NB2: en plus, ne génère que des I/O séquentielles – Par rapport à Block Nested Loop ?
17 18
Jointure par Tri Fusion : Sort-Merge Join Jointure par hachage (Hash Join)
• Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid)
• Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid)
– Phase de construction (Build)
– Trier DOC (resp. VIS) sur DOC.id (resp. VIS.docid) • Charger DOC, hacher en RAM en n paquets, avec n le plus grand possible compatible
VIS
– fusionner DOC et VIS 1 id docid date ……
avec M
– Produire les tuples résultat 4 3
5 1 …… ……
h=1
6 1 …… …… DOC h=2
DOC 3 2 …… ……
Page D
Page 2
Page 1
4 3
…
1 id Nom spécialité …… 2 2 …… …… IN 1 h M-2 pages
Etc. …
1 5 Pédiatre …… 4 3 …… ……
4 2
4 2
2 2 Radiologue …… 1 3 …… …… RAM h = ||DOC||
3 1 Pneumologue …… 7 3 …… ……
Etc.
… … … …… … … …… ……
– Phase de test (Probe)
• Parcourir VIS, pour chaque tuple tester la table de hachage et produire les résultats
1 5 Pédiatre …… 5 1 …… ……
DOC
5 1 5 Pédiatre …… 6 1 …… …… VIS IN 2 DOC ∞ VIS
Page D+V
IN 3
OUT M
Page 2
Page 1
2 2 Radiologue …… 3 2 …… ……
• Coût du Sort-Merge Join
Page V
Page 2
Page 1
…
…
…
5 2 2 Radiologue …… 2 2 …… ……
IN 1 h
…
– Tri des deux tables
IN M-1
• 2×|DOC|×(1 + log M-1 |DOC|/M) // ou 0 si DOC déjà triée RAM
Page 1
Page 2
DOC IN 3 Page 3 Page 4 Page 5
• On hache cette table en n paquets comme dans l’algorithme Hash join
…
IN 1
h …
RAM IN M Page … Page D
VIS
• Si cette table tient en RAM, build optimal
IN 2
Page 1 Page 2 Page 3
• Sinon, sélectionner des partitions qui vont déborder sur disque
Page V
Page 2
Page 1
IN 3
…
IN 1
h … Page … Page V
RAM IN M
DOC ∞ VIS
…
IN M-1
Page … Page D
… IN 2 IN …
Page D+V
h’
Page 2
Page 1
IN 3
…
Page 1 Page 2 Page 3 IN 1 OUT …
… IN …
Page … Page V RAM IN …
Jointure par hachage (Hybrid Hash Join) Coût de la jointure (Hybrid Hash Join)
– Probe1 • Coût I/O
• Appliquer la même fonction de hachage h aux tuples de VIS – Hypothèse M = |DOC|/k // optimal avec k=1
• Si h(tV) correspond à une partition de DOC en mémoire, produire les – Build : |DOC| + |DOC|(k-1)/k
résultats
– Probe1 : |VIS| + |VIS|(k-1)/k
• Sinon, écrire la partition correspondante de VIS sur disque (i.e., Build
– Probe2 : |DOC|(k-1)/k + |VIS|(k-1)/k
partiel)
DOC VIS – Total = (|DOC|+|VIS|) x (1 + 2 (k-1)/k) I/O
IN 2
IN 3
IN … IN … IN …
• Avec k = 1,5 (i.e., 2/3 de DOC tient en RAM) 1,66 × (|DOC|+|VIS|) I/O
IN……
VIS Page 2
h
Page 1
Page 2
h=1 h=2
IN …
h=n
IN …
… • Comme quoi certaines solutions compliquées sont parfois aussi
…
IN 1
……
IN
…
OUT Page … très bonnes …
Page V IN M
RAM
Evaluation de requêtes
Interface
Analyseur sémantique
Mise en œuvre dans les
Optimiseur
SGBDR Evaluateur de plan d’exécution
Opérateurs relationnels
Système d’exploitation
27 28
Exécution d’une requête Exécution matérialisée
• Combinaison d’opérateurs physiques • Evaluation complète d’un opérateur à la fois
– Ex. Implantation physique de la jointure
π – Chaque opérateur prend en entrée une table
(ou deux pour les opérateurs binaires) π
• Deux opérateurs
– Build : construction de la table de hachage – Et produit une table en sortie
Probe
– Probe : test avec la table de hachage
• Résultats de chaque opérateur matérialisé Probe
• Les opérateurs physique s’interfacent σ Build – Sur disque dans des relations temporaires
σ Age > 32 Build
• Représentation sous forme d’arbre d’opérateurs
Scan Scan
• Ex. Scan Scan
DOC VIS – Accéder VIS et construire la table de hachage
DOC VIS
– Accéder DOC et sélectionner (ici age>32)
• 2 alternatives d’exécution d’un arbre d’opérateurs
Ecrire le résultat sur disque
– Avec matérialisation
– Lire les DOC sélectionnés et tester avec la table de hachage
• construction du résultat complet des opérateurs dont l’entrée est matérialisée
Ecrire les résultats de la jointure sur disque
• Du bas : les opérateurs dont les entrées sont les relations de base déjà matérialisées
– Lire le résultat de la jointure et effecteur les projection
• Vers la racine : les opérateurs dont les fils ont déjà matérialisé leur résultat
• L’exécution matérialisée est toujours applicable mais coûteuse
– En pipeline
– Ecritures intermédiaires ajoute l’écriture du résultat aux coûts précédents
• Chaque opérateur renvoie directement ses résultats à son parent (sans matérialiser)
• Eviter d’écrire les résultats (autant que possible) Exécution pipeline…
29 30
33 34
37 38
1. Introduction Interface
Système d’exploitation
39 40
Optimiser : pour quoi faire ? Optimisation : exemple
• Une question Select Patients.Nom, Patients.Prénom
• Plusieurs expressions From
Where
Patients, Visites
Patients.Id-P = Visites.Id-P π
π
équivalentes en SQL and Patients.Ville = ’Paris’
• Plusieurs expressions and Visites.Date = ’15 juin’
équivalentes en algèbre
σ
• Plusieurs algorithmes
équivalents
π π
Coût
σ σ
Ex:
5 tables 1620 plans possibles
Plans sémantiquement équivalents
10 tables 17 milliards de plans…
Variation de performance de plusieurs ordres de magnitude Patients Visites Patients Visites
41 42
π π Sélection
• Mais dans la pratique
– Les algorithmes ont leurs limites (2 requêtes équivalentes peuvent ne
σ σ
– FTS (Full Table Scan) ? pas être identifiées comme telles)
– Index Scan (B+tree) ? – Le bon choix dépend souvent des données (distribution, taille,
– Index Scan (Bitmap) ? sélectivité), dont la connaissance est approximative
– Enfin, seuls les plans d’exécution rendus possibles par le schéma
physique de la BD sont évalués
Patients Visites le DBA joue donc un rôle majeur
43 44
Optimisation basée sur les coûts Difficultés de l’optimisation basée coût
• Rule-Based Optimizer (ex: RBO d’Oracle) • Espace de recherche très grand (plans candidats)
– Basé exclusivement sur des heuristiques (plus maintenu depuis 2006) – n algorithmes par opérateur
• Cost-Based Optimizer (ex: CBO d’Oracle) – p ordonnancement pour les opérations binaires
– modèle de coût + statistiques sur les données • 1620 ordres possibles pour joindre 5 tables, et 17 milliards pour 10
– Plus précis mais plus complexe tables !
• Modèle de coût (choix du plan)
Graphe d'opérations Schéma interne
– Difficulté pour estimer le coût de chaque opérateur
Plans d'exécution – Difficulté encore plus importantes pour estimer la taille des résultats
(espace de recherche)
intermédiaires (permettant de calculer l’opérateur suivant)
Bibliothèque de
Générateur de – Propagation exponentielle des erreurs (dans l’arbre d’exécution) !
transformations
Plans
Statégie de
• Modèle de coût basé sur des hypothèses d’uniformité de
Heuristiques
Recherche
de choix
distribution et/ou sur des statistiques
Modèle de coût – RunStat(<Table>, <attribut>) : construction et stockage d’un histogramme
Plan d'exécution
Optimal 45 46
Conclusion
• L’optimisation de requêtes est une tâche cruciale du SGBD
– Fort impact sur les performances du système
– Mécanisme puissant mais complexe à maîtriser
Mise en œuvre
• Le SGBD ne peut pas tout dans les systèmes NoSQL
– Sans bon DBA, pas de bonne optimisation possible
et application au Big Data
• De plus en plus d’aide à l’administration
– Outils d’audit des performances, ‘explainer’ de plans d’exécution,
outils de recommandation de schéma physique (fragmentation de
tables, index, vues concrètes, statistiques …)
• Automatic SQL Tuning dans Oracle 10
• Database Tuning Advisor dans SQL Server 2005
– Longue route vers un futur SGBD auto-administrable
47 48
HDFS – distributed, fault tolerant file system
MapReduce – framework for writing/executing distributed, fault
tolerant algorithms Giant File
{node2, node2, node 4}
node4,
{node1, node3, 3}
5}
110010101001
Hive & Pig – SQL-like declarative languages 010100101010
Avro (Serialization)
Hive & Pig to assigned data nodes
Zookeeper
49 50
Source: Big Data: What’s the Big Deal, Dewitt et al
Reducer
map() reduce()
combine & reduce
<keyi, valuei> Mapper
<keyA, valuea>
<keyB, valueb>
sub-divide & <keyC, valuec>
cardinality … Sort
conquer <keyB, list(valuea, valueb, valuec, …)>
DataNode and
group Reducer Output
by
User only writes the Map and Reduce functions <keyA, valuea> key
<keyi, valuei> Mapper <keyB, valueb>
<keyC, valuec>
MR framework provides all the “glue” and coordinates …
DataNode <keyC, list(valuea, valueb, valuec, …)>
the execution of the Map and Reduce jobs on the
cluster. Reducer
<keyA, valuea>
Fault tolerant <keyi, valuei> Mapper <keyB, valueb>
Scalable <keyC, valuec>
…
51 52
Reducer
Mapper
Blocks
7 10025 $60
of the 10025 $60 10025 $60
Sales 4 54235 $75
2 53705 $30 10025 $95 10025 $95
file in 5 7 53705
10025 $65
$60 Reducer
1 02115 $15 44313 $55 44313 $55
HDFS
0 54235 $22
3 10025 $95 44313 $10 10025 $60
Group 53705 $65
8 44313 $55 Mapper By
53705 $65
10025 $95
44313 $25
Shuffle
5 53705 $65 One output 10025 $155
DataNode2
Mapper
3 10025 $95 5 53705 $15 02115 $15
DataNode1
Mise en œuvre
Shuffling and Sorting
Shuffling and sorting over
the network
dans les SGBD embarqués
- Each mapper produces the
join key and the record pairs
55 56
How to deal with large tables
under the RAM constraints?
SKT (SubTree Key Table)
• Classical join algorithms need a large RAM Prescription (Pre)
Hypothèse = schéma de BD
– HashJoin, SortMergeJoin … PreID
Quantity arborescent
• Join indices could be a solution but consecutive joins incur random Frequency
WhenWritten
access or an expensive sort MedID
VisID A chaque table (noeud de
l’arbre) est associée une SKT
Medicine (Med) Visit (Vis) -A chaque tuple t de la table
Sorted on R1.id JI MedID VisID correspond un tuple de SKT
Sorted on R2.id Name Date
Effect Purpose -- Le tuple de SKT contient les
JI Type DocID
Sorted on R1.id
PatID
identifiants des tuples des
σ(R1) R2 R3 tables filles qui joignent avec t
57 58
Pid Pid
Medicine Visit
Pid
MedIDH VisIDH
NameH DateH
EffecHt PurposeH
TypeH DocIDH
Vid PatIDH
Vid
Doctor Patient
DocIDH PatIDH
Did NameH NameH
SpecialityH AgeH
ZipH BMIH
CountryH CountryH
59 60