fonction de hachage - université de strasbourg - ufr...

17
1 Arbre-B et Arbre B+ Clés non dupliquées Ordre inférieur Hauteur supérieur Liste chaînée des clés Parcours plus rapide d'un intervalle Insertion couteuse 1 40 25 60 30 50 53 70 10 20 Bloc 0 Bloc 3 Bloc 1 Bloc 4 Bloc 2 Bloc 5 Bloc 6 10 Bloc 0 20 25 40 60 Bloc 2 25 Bloc 3 30 40 Bloc 1 50 53 60 Bloc 4 70 Arbre-B Arbre-B + 1 Index bitmap Permet d’accéder facilement aux n-uplets dans les colonnes ont une valeur V couleurYeux = brun et sexe = M 10111001 et 11010100 = 10010000 => masque associé aux combinaison de valeurs Utile pour des valeurs peu modifiées Généralement considéré pour un faible nombre de valeur En pratique compressé, donc s’adapte bien à un grand nombre de valeur Utilisé en data-mining 2 indice noPermis sexe couleurYeux bitmap sexe = M bitmap sexe = F bitmap couleurYeux = bleu bitmap couleurYeux = brun bitmap couleurYeux = rouge 1 G111 M brun 1 0 0 1 0 2 G555 M bleu 1 0 1 0 0 3 G222 F brun 0 1 0 1 0 4 G888 M brun 1 0 0 1 0 5 G777 F brun 0 1 0 1 0 6 G666 M rouge 1 0 0 0 1 7 G333 F bleu 0 1 1 0 0 8 G444 F brun 0 1 0 1 0 2 Hachage Fonction h(clé de hachage) => l'adresse d'un paquet Fichier = tableau de paquets TH : taille de l'espace d'adressage primaire TAB[TH - 1] Habituellement paquet = bloc Pas d’index à traverser : O(1) en meilleur cas Sélection uniquement par égalité (pas intervalle) 3 Hachage statique 4 60 Erable argenté 15.99 90 Pommier 25.99 81 Catalpa 25.99 70 Herbe à puce 10.99 40 Epinette bleue 25.99 10 Cèdre en boule 10.99 20 Sapin 12.99 50 Chêne 22.99 95 Génévrier 15.99 80 Poirier 26.99 0 1 2 clé = 10 h(10) = 10 MOD 3 = 1 4 Problème de débordement dû aux collisions Méthode de résolution des collisions Adressage ouvert AC+1, AC+2,....., n-1, 0, 1, ....AC-1 Chaînage 5 60 Erable argenté 15.99 90 Pommier 25.99 81 Catalpa 25.99 70 Herbe à puce 10.99 40 Epinette bleue 25.99 10 Cèdre en boule 10.99 43 Magnolia 28.99 20 Sapin 12.99 50 Chêne 22.99 95 Génévrier 15.99 80 Poirier 26.99 0 1 2 52 Pin 18.99 5 Fonction de hachage Répartition uniforme des clés dans tab[TH - 1] h(clé) = clé MOD TH h(clé) = (∑ s i ) MOD TH s i est une sous-séquence des bits de la clé Clé non numérique représentation binaire vue comme un entier 6

Upload: vuonghanh

Post on 10-Mar-2018

217 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

1

Arbre-B et Arbre B+ Clés non dupliquées

Ordre inférieur

Hauteur supérieur

Liste chaînée des clés

Parcours plus rapide d'un intervalle

Insertion couteuse

1

40

25 60

30 50 53 7010 20

Bloc 0 Bloc 3 Bloc 1 Bloc 4

Bloc 2 Bloc 5

Bloc 6

10

Bloc 0

20

25 40 60

Bloc 2

25

Bloc 3

30 40

Bloc 1

50 53 60

Bloc 4

70

Arbre-B

Arbre-B+

1

Index bitmap

Permet d’accéder facilement aux n-uplets dans les colonnes ont une valeur V couleurYeux = brun et sexe = M

10111001 et 11010100 = 10010000

=> masque associé aux combinaison de valeurs Utile pour des valeurs peu modifiées Généralement considéré pour un faible nombre de valeur

En pratique compressé, donc s’adapte bien à un grand nombre de valeur Utilisé en data-mining

2

indice noPermis sexe couleurYeux bitmapsexe = M

bitmapsexe = F

bitmapcouleurYeux= bleu

bitmapcouleurYeux= brun

bitmapcouleurYeux= rouge

1 G111 M brun 1 0 0 1 0

2 G555 M bleu 1 0 1 0 03 G222 F brun 0 1 0 1 0

4 G888 M brun 1 0 0 1 0

5 G777 F brun 0 1 0 1 0

6 G666 M rouge 1 0 0 0 1

7 G333 F bleu 0 1 1 0 0

8 G444 F brun 0 1 0 1 0

2

Hachage Fonction h(clé de hachage) => l'adresse d'un paquet

Fichier = tableau de paquets

TH : taille de l'espace d'adressage primaire

TAB[TH - 1]

Habituellement paquet = bloc

Pas d’index à traverser : O(1) en meilleur cas

Sélection uniquement par égalité (pas intervalle)

33

Hachage statique

4

60 Erable argenté 15.99

90 Pommier 25.99

81 Catalpa 25.99

70 Herbe à puce 10.99

40 Epinette bleue 25.99

10 Cèdre en boule 10.99

20 Sapin 12.99

50 Chêne 22.99

95 Génévrier 15.99

80 Poirier 26.99

0

1

2

clé = 10

h(10) = 10 MOD 3 = 1

4

Problème de débordement dû aux collisions

Méthode de résolution des collisions

Adressage ouvert

AC+1, AC+2,....., n-1, 0, 1, ....AC-1

Chaînage

5

60 Erable argenté 15.99

90 Pommier 25.99

81 Catalpa 25.99

70 Herbe à puce 10.99

40 Epinette bleue 25.99

10 Cèdre en boule 10.99

43 Magnolia 28.99

20 Sapin 12.99

50 Chêne 22.99

95 Génévrier 15.99

80 Poirier 26.99

0

1

2

52 Pin 18.99

5

Fonction de hachage Répartition uniforme des clés dans tab[TH - 1]

h(clé) = clé MOD TH

h(clé) = (∑ si) MOD TH

si est une sous-séquence des bits de la clé

Clé non numérique

représentation binaire vue comme un entier

66

Page 2: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

2

Hachage vs indexage O(1) en meilleur cas vs O(log(N))

Pas d’espace supplémentaire d’index pour le hachage

Gaspillage d’espace si TH trop grand

Performance dégradée si TH trop petit (chaînage)

Gestion plus délicate

déterminer h et TH

maintenance : réorganisations

Clé non numérique ?

représentation binaire vue comme un entier

77

Fonction de hachage préservant la relation d'ordre

Hash Tidy functions

clé1 < clé2 h(clé1) < h(clé2)

Connaissances préalables au sujet de la distributiondes clés

88

Hachage dynamique

Adaptation de TH et h aux variations du volume des données

similaire arbre-B

division et fusion de paquets (blocs)

99

Hachage dynamique

Adaptation de TH

suite d’expansions

Début de la dième expansion, d {0, 1, …}

TH passera de 2d à 2d+1

adresse du paquet : hd(clé) = bd-1, bd-2,…, b1, b0

10

101002

111012

000012

110102

011112

110112

002

012

102

112

p

d = 2

10

Insertion de h(clé) = 101012

Bloc #012 déborde

Division du bloc p = #002 (pas #012)

p := p+1

11

101002

111012

000012

110102

011112

110112

002

012

102

112

p

111012

000012

110102

011112

110112

0002

012

102

112

p

101012

101002

Zône primaire Zône d'expansion

1002

Division du bloc 002

11

Insertion de h(clé) = 101112

Bloc #112 déborde

12

111012

000012

110102

011112

110112

0002

012

102

112

p

101012

101002

1002

000012

110102

011112

110112

0002

0012

102

112

p

101112

101002

Zône primaire Zône d'expansion

1002

Division du bloc 012 (p = 01

2)

101012

111012

1012

12

Page 3: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

3

Insertion de 110002, 110012 et 101102

13

000012

110102

011112

110112

0002

0012

102

112

p

101112

101002

1002

101012

111012

1012

110002

000012

110012

110102

101102

011112

110112

0002

0012

102

112

p

101112

101002

Zône primaire Zône d'expansion

1002

101012

111012

1012

13

Insertion de 100102

Bloc #102 déborde et est divisé

14

110002

000012

110012

110102

100102

011112

110112

0002

0012

0102

112

p

101112

101002

Zône primaire Zône d'expansion

1002

Division du bloc 102 (p = 10

2)

101012

111012

1012

101102

1102

110002

000012

110012

110102

101102

011112

110112

0002

0012

102

112

p

101112

101002

1002

101012

111012

1012

14

Insertion de 011012 Bloc #1012 déborde

zone d ’expansion !

Fin de l ’expansion

p := 0

d := d+1 = 3

15

110002

000012

110012

110102

100102

011112

110112

0002

0012

0102

112

p

101112

101002

1002

101012

111012

1012

101102

1102

110002

000012

110012

110102

100102

110112

0002

0012

0102

0112

p

101002

Zone primaire

1002

Division du bloc 112

101012

111012

1012

101102

1102

011012

011112

101112

1112

d = 3

15

Tableau comparatif des organisations

16

Critère Séquentiel Arbre-B+ primaire

Hachage statique

Hachage dynamique

Sélection par égalité sur clé unique

O(N/FB) Cas moyen : O(N/FB/2)

O(log (N)) Meilleur cas :O(1) Pire cas : O(N/FB)

Meilleur cas :O(1) Pire cas : O(N/FB)

Sélection par égalité sur clé non unique

O(N/FB) O(log (Card(clé)+ Sel/FB)

Meilleur cas : O(Sel/FB) Pire cas : O(N/FB)

Meilleur cas : O(Sel/FB) Pire cas : O(N/FB)

Sélection par intervalle O(N/FB) O(log (Card(clé)+ Sel/FB)

O(N/FB) O(N/FB)

Itération sérielle O(N/FB) O(N) O(N/FB) O(N/FB)

Itération séquentielle O(tri) O(N/FB) O(tri) O(tri)

Insertion/suppression O(1) O(log N) Meilleur cas :O(1) Pire cas : O(N/FB)

Meilleur cas :O(1) Pire cas : O(N/FB)

Taux d'occupation mémoire secondaire

Maximal approche 100%

En moyennne : 66% (2/3)

~80% À ajuster Pire cas non borné

~69% (ln 2) Peut augmenter au prix d'une diminution de performance.

Autres considérations Plusieurs index secondaires possibles sur la même table

Distribution des clés par fonction de hachage ? Problème avec tables volatiles Resp. du DBA

Disponibilité restreinte

16

Indexation sous OracleOracle propose comme index les différentes structures d’index présentées précédemment

Par défaut l’index est un arbre B+

Il est possible d’organiser une table en arbre B (plaçant)

Le hachage (non dynamique) existe aussi

Index bitmap

17

Création d’indexUn index est créé automatiquement pour les clé primaires et les colonnes d’une contrainte unique

Création d’un index explicitement

CREATE INDEX emp_ename ON emp(ename)

TABLESPACE users

STORAGE ( INITIAL 20K NEXT 20k

PCTINCREASE 75 );

18

Page 4: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

4

Arbre B et B+ Dès qu’on utilise une commande PRIMARY KEY,

Oracle crée un arbre B+ sur la clé primaire

L’index est stocké dans un segment d’index

On peut organiser la table en arbre B avec l’option ORGANIZATION INDEX sur la clé primaire

plus efficace car évite les accès par adresse

moins valable pour les enregistrements de grande taille

19

Index Bitmap sous Oracle

BITMAP JOIN INDEX:

CREATE BITMAP INDEX sales_cust_gender_bjix

ON sales(customers.cust_gender)

FROM sales, customers

WHERE sales.cust_id = customers.cust_id

LOCAL NOLOGGING COMPUTE STATISTICS;

20

HachageStructure appelée Hash Cluster. Utilisée en deux étapes:

On crée la structure avec tous ses paramètres

On affecte une ou plusieurs tables à la structure

Attention, le hachage dans Oracle n’est pas dynamique

21

Création d’un Hash ClusterCREATE CLUSTER HachEmp (id INT)

SIZE 500 HASHKEYS 500;

La clé de hachage est de type INTEGER ,

Oracle fournit automatiquement une fonction avec de bonnes propriétés,

Nombre de valeurs de la fonction précisé par HASHKEYS,

Taille de chaque bloc estimée par SIZE

22

Affectation d’une colonne à un hash cluster

CREATE TABLE emp (idEmp INT, ... )

CLUSTER HachEmp (idEmp)

Assez délicat à paramétrer

Demande un contrôle régulier

23

Evaluation et optimisation de requêtes

24

Page 5: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

5

Algèbre Relationnelle : Implémentation Rappel de l'algèbre

Structures d'indexation et placement

Algorithme de sélection

Algorithme de jointure

2525

Etape du traitement d'une requête

Toute requête SQL est traitée en trois étapes :

1. Analyse et traduction de la requête. On vérifie qu’elle est correcte,

elle est ensuite exprimé sous la forme d’opérations (algèbre relationnel).

2. Optimisation : comment agencer au mieux les opérations ? Quels sont

les algorithmes à utiliser ? Un plan d’exécution est obtenu.

3. Exécution de la requête : le plan d’exécution est compilé et exécuté.

26

Langages de requêtes

Deux langages de requêtes à fondements mathématiques sont à la base de SQL :

Calcul relationnel:

Permet aux utilisateurs de décrire le résultat souhaité ,

Non opérationnel, déclaratif

Algèbre relationnelle:

Plus opérationnel que le calcul relationnel

Permet de représenter les plans d’exécution.

2727

Calcul Relationnel Dérivé de la logique Calcul relationnel de domaine

Requêtes de la forme {X | Formule(X, Y) } X est un vecteur de variables non quantifiées (x1, x2, …) Y est un vecteur de variables quantifiées ((/) y1, y2, …) Chaque variable représente une colonne de table

Ex: {(x1,x2) | y1 (Emp(x1,x2,…,y1) ⋀ y1 = ‘25/10/2004’) }

Calcul relationnel de tuple Une variable correspond à un n-uplet Ex: {(X.empno, X.ename) |

Emp(X) ⋀ X.dateEbauche = ‘25/10/2004’ }

2828

Algèbre relationnelleOpérations de base: Sélection ( ) Sélectionne un sous-ensemble des lignes d’une relation.

Projection ( ) Efface des colonnes d’une relation [et élimine les doubles].

Produit Cartésien ( X ) Permet de combiner deux relations.

Différence ( - ) Elimine les tuples de R1 contenus dans R2

Union ( ) Constitue une relation R avec les tuples de R1 et ceux de R2

2929

Algèbre relationnelleOpérations additionnelles:

Jointure (⋈) Combinaison de produit cartésien et sélection sur colonnes

comparables (=, <, >, ...)

Intersection Constitue une relation R avec les n-uplets appartenant à la fois à

R1 et R2

Chaque opération retournant une relation

=> les opérations peuvent être composées

3030

Page 6: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

6

Division C = A / B

C(X) est la division de A (X, Y) par B (Y) ssi C contient tous les n-uplets (x) tels que (y) B, (x, y) A

Equivalent SQL de la division:SELECT F# FROM A JOIN B ON A.P# = B.P#

GROUP BY F#

HAVING COUNT(DISTINCT *) = (SELECT COUNT(DISTINCT *) FROM B);31

F# P#F1 P1

F1 P2F2 P1

F2 P3

P#P1P2

S#F1

Quels sont les fournisseurs de toutes les pièces de B

A

B

C

31

Exécutions des sélections

Cas sans indexFiltrage séquentiel de la relation

Algorithme Select (R, Q) :Foreach block b de R do {

Read (b);

Foreach n-uplet n de b

{ if CheckCondition (n, Q)

then result = result n ;} ;

}3232

Sélection via index Cas avec index

unidimensionnel (Arbre-B, Arbre-B+)

Variante : Cas avec hachage

3333

Utilisation d'index B+-tree Intersection et union de listes d'adresses de n-uplets

Accès aux n-uplets dont les identifiants sont retenus

Vérification du reste du critère

Exemple choix 1: Utilisation de tous les index (JOB = "INGENIEUR") AND (AGE > 30) AND (deptno = 5)

L = J (A1 A2 … Ap) D

Accéder aux n-uplets de L

Exemple choix 2: Choix du meilleur index Accès via l'index (JOB = "INGENIEUR")

Vérification du reste des critères sur les n-uplets résultats

3434

Utilisation d'index Bitmap Détermination des adresses des n-uplets candidats

Très utile pour les agrégats

3535

Exécution des jointures Opération essentielle des SGBDR

Plusieurs méthodes

Sans index : réduire les balayages

Optimiser les comparaisons

Créer dynamiquement des index ou tables de hachage

Avec index Profiter au mieux des index

Contraintes : Réduire I/O et temps CPU

3636

Page 7: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

7

Jointure Les mêmes types d’algorithmes peuvent êtres

utilisés pour les autres opérateurs binaires (union, intersect, …)

Algorithmes : Nested Loop Join

Index Join

Sort Merge Join

Hash Join

3737

Optimisation de Requêtes Introduction

Arbres relationnels

Restructuration algébrique

Modèle de coût

Choix du meilleur plan

Conclusion

38

Architecture Type SGBD

ANALYSEUR

META-BASE

CONTROLE

OPTIMISEUR

EXECUTABLE

SYNTAXESEMANTIQUESCHEMA

VUESINTEGRITEAUTORISATIONS

ORDONNANCEMENTELABORATIOND'UN PLAN

EXECUTIONMETHODES D'ACCES

39

Quelles informations utiliser pour l’optimisation ?

Le traitement s'appuie sur les éléments suivants : Le schéma logique de la base: description des tables, des

contraintes d'intégrité, … Le schéma physique de la base: indexes et chemins d'accès,

tailles des blocs, … Des statistiques: taille des tables, des index, distribution des

valeurs Par exemple: R1: 10000 n-uplets (site A) et R2: 200 n-uplets (site B)

=>Pour réaliser R1 ⋈ R2 - il vaut mieux transférer R2

Des statistiques: taux de mises-à-jour, workload Les particularités du système: parallélisme, processeurs

spécialisés, … Des algorithmes: peuvent différer selon les systèmes

40

Etapes de l'optimisation

(1) Obtention d’une représentation canonique (2) Réécriture = transformation par :

simplification ordonnancement des opérations élémentaires

(3) Planning = construction des plans d'exécution candidats choix des algorithmes pour chaque opérateur, calcul du coût de chaque plan, choix du meilleur plan trop de plans possibles, utilisation d’heuristique

Etapes 1 et 2 : indépendantes des données Etape 3 : dépendante des données

41

Arbres relationnels

PRODUIT CARTESIEN

JOINTURE

RESTRICTION

E.JOB "Ingénieur"

PROJECTION

E.SAL, E.JOB

DIFFERENCE

B2B1

UNION

B1 B2

U

E

=

=E. DEPTNO D.DEPTNO

E D

E D

E

TRI

E

E.DEPTNO, E.JOB

AGREGAT

E

E.DEPTNO, E.JOB

COUNT(*),AVG(SAL)

42

Page 8: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

8

Exemple d'arbre Coût d'exécution:

N projets dont Nm à Metz

M dept dont Mi "Investissement"

K emp

N + Nm*M + Nm*M*K

+ Nm*Mi*K + …

comparaisons de n-uplets

RESULTAT

E.ENAME, P.PNAME

E.AGE

D.NOM

30

" INVEST"

>

=

D.DEPTNO E.DEPTNO=

EMP E

=

P.DEPTNO D.DEPTNO

P.LOC "METZ"

PROJET P

=

DEPT D

43

Typologie des arbres

Arbre linéaire droit Arbre linéaire gauche Arbre ramifié

44

Restructuration algébrique

Problème : suivant l'ordre des opérateurs algébriques dans un

arbre, le coût d'exécution est diffèrent

Pourquoi?

1. le coût des opérateurs varient en fonction du volume des données traitées: plus le nombre de n-uplets des relations traitées est petit, plus les coûts cpu et d'E/S sont minimisés

2. certains opérateurs diminuent le volume des données (restriction, projection, …)

45

Commutativité des Jointures

R S S R

46

Associativité des jointures Il existe environ N! arbre de jointure de N relations

Cas des produits cartésiens

R S

T

S T

R

47

Groupage des Restrictions

Ai = a

Aj = b

Ai = aet

Aj = b

Une cascade de projections/sélections peut se réécrire en une opération de filtrage (un seul scan de données)

48

Page 9: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

9

Descente des Projections

Il est possible de descendre les projections, mais les attributs utilisés par la suite doivent être conservés

Ai = a

A1, … Ap

Ai = a

A1, … Ap

Ai,A1,… Ap

49

Descente des restrictions

<==> A1 = vi

A1 = vi

R1 (.. Ai..) R2 (.. Bj..) R1 (.. Ai..)

R2 (.. Bj..)

Les projections/sélections sont des réducteurs importants, d’où l’importance de le pousser vers les feuilles.

50

Règles de Restructuration Commutativité des jointures

Associativité des jointures

Regroupement des restrictions

Descente des projections et restrictions

Semi-commutativité des restrictions et jointures

Semi-distributivité des projections / jointures

Distributivité des restrictions / unions ou différences

Distributivité des projections / unions

51

Heuristique d'Optimisation Appliquer d'abord les opérations réductrices

(restrictions et projections) en les groupant sur chaque relation

1. Dégrouper les restrictions

2. Descendre les restrictions

3. Grouper les restrictions aux feuilles

4. Descendre les projections

Ordre des unions, différences et jointures ?

52

Exemple d'Arbre OptimiséCoût d'exécution réduit

E.ENAME, P.PNAME

E.AGE

D.NOM30

" INVEST"

>

=

E.DEPTNO D.DEPTNO=

DEPT D

Résultat

=

P.DEPTNO E.DEPTNO

P.LOC " METZ"

PROJET P

=

EMP E

P.DEPTNO, P.PNAME E.DEPTNO, E.ENAME

D.DEPTNO

E.DEPTNO, E.ENAME, P.PNAME

RESULTAT

E.ENAME, P.PNAME

E.AGE

D.NOM

30

" INVEST"

>

=

D.DEPTNO E.DEPTNO=

EMP E

=

P.DEPTNO D.DEPTNO

"METZ"

PROJET P

=

DEPT D

53

P.LOC

Ordonnancement des Jointures HEURISTIQUES : Choix des relations de taille minimum

Jointures précalculées d’abord (index)

Semi-jointures (où les projections ne concernent qu’une des relations de la jointure) plus réductrices

ORDONNANCEMENT DES AGREGATS

Permutations difficiles

Profiter des tris des jointures, dédoublement, etc..

Gains importants pour MIN et MAX

54

Page 10: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

10

Ordonnancement des jointuresExemple:

Quels clients ont commandé le produit 415 ?

Q1 = ename( idProd=415 (Produit) ⋈ (Commande ⋈ Client))

Hypothèse: 60 clients + 400 commandes

60 ⋈ 400 → 400 puis 1 ⋈ 400 → 10 (clients)

il vaut mieux faire:

Q2 = ename(( idProd=415 (Produit) ⋈ Commande) ⋈ Client)

1 ⋈ 400 → 10 puis 10 ⋈ 60 → 10

55

MODELE DE COUT Facteur de sélectivité S

Proportion de n-uplets du produit cartésien des relations touchées qui satisfont une condition.

Exemple:SELECT *

FROM R1, R2

=> S = 1

SELECT *

FROM R1

WHERE A = valeur

=> S = 1 / CARD(A) avec un modèle uniforme

56

Sélectivité des Restrictions TAILLE ((R)) = s * TAILLE(R) avec:s (A = valeur) = 1 / CARD(A)

s (A > valeur) = (max(A) - valeur) / (max(A) - min(A))

s (A < valeur) = (valeur - min(A)) / (max(A) - min(A))

s (A IN liste valeurs) = (1/CARD(A)) * CARD(liste valeurs)

s (P et Q) = s(P) * s(Q)

s (P ou Q) = s(P) + s(Q) - s(P) * s(Q)

s (not P) = 1 - s(P)

Le coût dépend de l'algorithme (index, hachage ou balayage).

57

Sélectivité des Jointures TAILE( R1 ⋈ R2) = p * TAILLE(R1) * TAILLE(R2)

p dépend du type de jointure et de la corrélation des colonnes :

p = 0 si aucun n-uplet n’est joint

p = 1 / MAX(CARD(A),CARD(B)) si distribution uniforme équiprobable des attributs A et B sur un même domaine (col. join.)

p = 1 si produit cartésien

L'algorithme utilisé change radicalement les coûts

linéaire si index,

produit des tailles si boucles imbriquées.

58

Calcul des tailles Taille des tables de base dans le catalogue

Calcul des tailles à la compilation

application du coefficient de sélectivité

hypothèse d ’uniformité

Possibilité d’histogrammes

RunStat(<Table>, <attribut>)

Stockage dans le catalogue de l’histogramme de distribution de l’attribut

Utilisation par le modèle de coût

59

Hoix du meilleur plan

Générateur de

Plans

Arbre d'opérations

Heuristiques

de choix

Plan d'exécution

Optimal

Schéma interne

Plans d'exécution

Stratégie de

Recherche

Bibliothèque de

transformations

Modèle de coût

60

Page 11: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

11

Sélectivité minimumRel = liste des relations à joindre ;

p = plus petite relation ;

Tant que Rel non vide {

R = relation de selectivité minimum de Rel ;

p = join(R,p) ;

Relations = Relations - R ; } ;

Return(p) ;

61

ItérateursTous les SGBD s'appuient sur un ensemble d'opérateurs physiques, ou itérateurs. Tous fournissent des interfaces semblables :

open : initialise les tâches de l'opérateur, positionne le curseur avant le premier résultat à fournir;next : retourne l'enregistrement courant et se positionne sur l'enregistrement suivant;close : libère les ressources.

On appelle itérateurs ces opérateurs. Ils sont à la base des plans d'exécution.

62

Plan d’exécutionUn plan d'exécution est un arbre d'itérateurs.

Chaque itérateur consomme une ou deux sources, qui peuvent être soit d'autres itérateurs, soit un fichier d'index ou de données ;

Un itérateur produit un flux de données à la demande, par appels répétés de sa fonction next.

Un itérateur peut appeler les opérations open, next et close sur ses itérateurs sources.

La production à la demande évite d'avoir à stocker des résultats intermédiaires.

63

Itérateur: parcours séquentiel

On lit, bloc par bloc, le fichier.

Quand un bloc est en mémoire, on traite les enregistrements qu'il contient.

Sous forme d'itérateur :

La commande open place le curseur au début du fichier et lit le premier bloc ;

La commande next renvoie l'enregistrement courant, et avance d'un cran ; on lit un nouveau bloc si nécessaire ;

close libère les ressources.

64

Itérateur: traversée d’index et accès direct

Index : l'itérateur prend en entrée une valeur, ou un intervalle de valeurs.

on descend jusqu'à la feuille (open) ;

on renvoie l'adresse courante lors du premier appel de next, on se décale d'un enregistrement dans la feuille courante (éventuellement, on lit le bloc-feuille suivant) ;

Accès direct : s'appuie sur un itérateur qui fournit des adresses d'enregistrement

65

Exemple de plan d’exécutionRequête:

Q1 = deptno(Dept ⋈ sal>50 000 (Emp))

Etapes: Itérateurs de parcours séquentiels; Itérateur de traversée d’index; Itérateur de jointure avec index; Itérateur d’accès direct par adresse; Itérateur de projection

Le plan est exécuté par simple appel (open; next; close) sur la racine (itérateur de projection).

66

Page 12: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

12

Rôle des itérateurs

Principes essentiels :

Production à la demande : le serveur n'envoie un enregistrement au client que quand ce dernier le demande ;

Pipelinage : on essaie d'éviter le stockage en mémoire de résultats intermédiaires : le résultat est calculé au fur et à mesure.

Conséquences : temps de réponse minimisé (pour obtenir le premier enregistrement) mais attention aux plans bloquants (ex. plans avec un tri).

67

Tri externe

Le tri (dans table) externe est utilisé,

pour les algorithmes de jointure (sort-merge)

l'élimination des doublons (clause DISTINCT)

pour les opérations de regroupement (GROUP BY)

ORDER BY

Opération très coûteuse sur de grands jeux de données.

68

Tri-fusion Etape 1: Lire une page, la trier, l’écrire.

Un seul buffer utilisé

Coût : une lecture + une écriture du fichier.

Etape suivantes (2, 3, …,):

trois buffers utilisés

Main memory buffers

INPUT 1

INPUT 2

OUTPUT

DiskDisk

69

Tri-fusion A chaque étape, on lit et on

écrit une page dans le fichier

N pages dans le fichier

=> nombre de passes

Coût total:

Idée: Divide and conquer: trier les sous-fichier et fusionner

log2 1N

2 12N Nlog

Fichier d’entrée

1-page runs

2-page runs

4-page runs

8-page runs

PASS 0

PASS 1

PASS 2

PASS 3

9

3,4 6,2 9,4 8,7 5,6 3,1 2

3,4 5,62,6 4,9 7,8 1,3 2

2,3

4,6

4,7

8,9

1,3

5,6 2

2,3

4,4

6,7

8,9

1,2

3,5

6

1,2

2,3

3,4

4,5

6,6

7,8

Tri-fusion général

Pour trier N pages en utilisant B buffers:

Pass 0: utiliser les B buffers. Produire blocs triés

Pass 1,2, …, etc.: fusionner les B-1 blocs.

N B/

B Main memory buffers

INPUT 1

INPUT B-1

OUTPUT

DiskDisk

INPUT 2

. . . . . .. . .

Plus de 3 buffers

71

Coût du tri-fusion général

Nombre de passes:

Coût= 2N * (# Nombre de passes)

Avec 5 buffers, pour trier un fichier de 108 pages:

Pass 0: = 22 sous-fichiers triés de 5 pages (le dernier sous-fichier n’a que 3 pages)

Pass 1: = 6 sous-fichiers de 20 pages chacun (le dernier contient 8 pages seulement)

Pass 2: 2 sous-fichiers, 80 pages et 28 pages

Pass 3: un fichier trié de 108 pages

1 1 log /B N B

108 5/

22 4/

72

Page 13: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

13

Principaux algorithmes de jointureJointure sans index

Le plus simple : jointure par boucles imbriquées

Le plus courant : jointure par tri-fusion

Parfois le meilleur : jointure par hachage

Jointure avec index

Avec un index : jointure par boucles indexée.

Avec deux index : on fait comme si on avait un seul index

73

Jointures par boucles imbriquéesS’il n’y a pas d’index, on effectue un parcours séquentiel des blocs de la table R1, puis pour chaque n-uplet de R1, de R2.

Ex: jointure dept et emp dans index

Emp deptno

1 1

2 2

3 5

4 6

5 2

Emp deptno

1 1

2 2

3 5

4 6

5 2

Compta 1

RH 2

Comparaison

Création association

dname deptno

74

Boucles imbriquées : Gestion de la mémoire

Le maximum de mémoire est alloué à la table intérieure de la boucle imbriquée.

Si la table intérieure tient en mémoire: une seule lecture des deux tables suffit.

75

Jointure par tri-fusionPlus efficace que les boucles imbriquées pour de grosses tables

On trie les deux tables sur les colonnes de jointures

On effectue la fusion

C'est l’opération de tri qui coûte cher

Important : on ne peut obtenir de résultat tant que le tri n'est pas fini.

76

Jointure par hachagele plus efficace dans le meilleur des cas

Très rapide quand une des deux tables est petite (n fois la taille de la mémoire avec n petit, <3)

Pas très robuste (efficacité dépend de plusieurs facteurs)

Algorithme en option dans ORACLE. Il est indispensable d'avoir des statistiques pour optimiser (fonction de hachage, nombre de casier, taille des casiers, …)

77

Principe de la jointure par hachageIdée de base:

On hache la plus petite des deux tables en n fragments.

On hache la seconde table, avec la même fonction, en n autres fragments.

On réunit les fragments par paire, et on fait la jointure.

78

Page 14: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

14

Jointure avec index sur une tableAvec un index, on utilise les boucles imbriquées indexées.

On balaye la table non indexée

Pour chaque ligne, on utilise l'attribut de jointure pour traverser l'index sur l'autre table.

Avantages :

Très efficace (un parcours, plus des recherches par adresse)

Favorise le temps de réponse et le temps d'exécution

79

Deux tables indexées

On pourrait penser à la solution suivante :

Fusionner les deux index : on obtient des paires d'adresses

Pour chaque paire, aller chercher la ligne A, la ligne B

Problématique car beaucoup d'accès aléatoires (si mauvaise sélectivité, contre-performant d’utiliser l’index)

En pratique :

On se ramène à la jointure avec un index

On prend la petite table comme table extérieure.

80

RésuméQu'est-ce qu'un plan d'exécution ?

C'est un programme combinant des opérateurs physiques (chemins d'accès et traitements de données).

Il a la forme d'un arbre : chaque noeud est un opérateur qui

prend des données en entrée

applique un traitement

produit les données traitées en sortie

81

La phase d'optimisation proprement dite :

Pour une requête, le système a le choix entre plusieurs plans d'exécution.

Ils diffèrent par l'ordre des opérations, les algorithmes, les chemins d'accès.

Pour chaque plan on peut estimer :

le coût de chaque opération

la taille du résultat

Objectif : diminuer le plus vite possible la taille des données manipulées.

82

Laisser le choix au système du plan d’exécution Il y a autant de plans d'exécution que de sous-blocs dans

une requête. Exemple: cherchons tous les produits dont le coût est

inférieur à 500 € commandé par Scott Tiger

SELECT pname

FROM produit P, commande R, Client C

WHERE C.nom = 'Tiger' AND C.prenom= 'Scott'

AND P.idProduit = R.idProduit

AND R.idClient = C.idClient

AND P.prix < 500;

Pas d’imbrication: un bloc => choix lancé au système

83

2ème version (2 blocs) Un niveau d’imbrication sans nécessité

Moins d’optimisations possibles

SELECT pname

FROM produit P, commande R

WHERE P.idProduit = R.idProduit

AND P.prix < 500

AND R.idClient IN (

SELECT C.idClient FROM client C

WHERE C.nom = 'Tiger' AND C.prenom= 'Scott'

);

84

Page 15: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

15

3ème version (2 blocs) Utilisation de exists

SELECT pname

FROM produit P, commande R

WHERE P.idProduit = R.idProduit

AND P.prix < 500

AND EXISTS(

SELECT C.idClient FROM client C

WHERE C.nom = 'Tiger' AND C.prenom= 'Scott'

AND C.idClient = R.idClient

);

85

4ème version (3 blocs) 2 niveau d’imbrications

On force le plan d’exécution: mauvaise solution

SELECT pname FROM produit

WHERE prix < 500

AND idProduit IN

(

SELECT idProduit FROM commande

WHERE idClient IN (

SELECT idClient FROM client

WHERE nom = 'Tiger' AND prenom= 'Scott'

)

);

On parcours tous les produits dont le prix est inférieur à 500 €

Pour chaque produit, on cherche les client ayant commandé le produit: pas d’index disponible

Ensuite pour chaque client on regarde si c’est Scott Tiger

86

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é.

Choix du meilleur et exécution.

Tout ceci est automatique, mais il est possible d’influer, voire de forcer le plan d’exécution.

87

Estimation du coût d’un plan d’exécution

Beaucoup de paramètres entrent dans l’estimation du coût :

Les chemins d’accès disponibles.

Les opérations physiques de traitement des résultats intermédiaires.

Des statistiques sur les tables concernées (taille, sélectivité). Les statistiques sont calculées par appel explicite à l’outil ANALYZE.

Les ressources disponibles.

88

Optimiseur basé sur des règles

Oracle mode RULE

Priorité des règles

89

Rang Chemin d'accès

1 Sélection par ROWID

2 Sélection d'une ligne par jointure dans une organisation parindex groupant ou hachage hétérogène (CLUSTER)

3 Sélection d'une ligne par hachage sur clé candidate(PRIMARY ou UNIQUE)

4 Sélection d'une ligne par clé candidate

5 Jointure par une organisation par index groupant ouhachage hétérogène (CLUSTER)

6 Sélection par égalité sur clé de hachage (HASH CLUSTER)

7 Sélection par égalité sur clé d'index groupant (CLUSTER)

8 Sélection par égalité sur clé composée

9 Sélection par égalité sur clé simple d'index secondaire

10 Sélection par intervalle borné sur clé indexée

11 Sélection par intervalle non borné sur clé indexée

12 Tri-fusion

13 MAX ou MIN d'une colonne indexée

14 ORDER BY sur colonne indexée

15 Balayage

89

Paramètres optimiseurPrincipaux paramètres :

OPTIMIZER_MODE (RULE, CHOOSE, FIRST_ROW, ALL_ROWS).

SORT_AREA_SIZE (taille de la zone de tri).

HASH_AREA_SIZE (taille de la zone de hachage).

HASH_JOIN_ENABLED considère les jointures par hachage.

90

Page 16: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

16

Création de statistiques Utiliser les fonctions de DBMS_STATS

Calcul de la taille et du nombre de lignes :ANALYZE TABLE Film COMPUTE STATISTICS

FOR TABLE;

Analyse des index :ANALYZE TABLE Film COMPUTE STATISTICS

FOR ALL INDEX;

Analyse de la distribution des valeurs :ANALYSE TABLE Film COMPUTE STATISTICS

FOR COLUMNS titre, genre;

91

Algorithme de jointure sous OracleORACLE peut utilise trois algorithmes de jointures :

Boucles imbriquées quand il y a au moins un index.

Opération NESTED LOOP.

Tri/fusion quand il n’y a pas d’index.

Opération SORT et MERGE.

Jointure par hachage.

Opération HASH JOIN

92

L’outil EXPLAINL’outil EXPLAIN donne le plan d’exécution d’une requête. La description comprend :

Le chemin d’accès utilisé.

Les opérations physiques (tri, fusion, intersection,...).

L’ordre des opérations.

Il est représentable par un arbre.

93

EXPLAIN: exempleEXPLAIN PLAN

SET STATEMENT_ID=’SelSansInd’ FOR

SELECT * FROM Produit

WHERE prix = 500;

Le résultat de EXPLAIN :

0 SELECT STATEMENT

1 TABLE ACCESS FULL PRODUIT

94

EXPLAIN: exempleEXPLAIN PLAN

SET STATEMENT_ID=’SelInd’ FOR

SELECT * FROM Produit

WHERE idProduit = 15;

Le résultat de EXPLAIN :

0 SELECT STATEMENT

1 TABLE ACCESS BY ROWID PRODUIT

2 INDEX UNIQUE SCAN IDX-

PRODUIT-ID95

EXPLAIN: exempleEXPLAIN PLAN SET

STATEMENT_ID=’JoinSelIndex’ FOR

SELECT R.idProduit

FROM Client C, Commande R

WHERE R.idClient = C.idClient

AND nom = ’Scott’;

Le résultat de EXPLAIN :

0 SELECT STATEMENT

1 NESTED LOOPS

2 TABLE ACCESS BY ROWID CLIENT

3 INDEX RANGE SCAN IDX-NOM

4 TABLE ACCESS BY ROWID COMMANDE

5 INDEX RANGE SCAN IDX-COMMANDE

96

Page 17: Fonction de hachage - Université De Strasbourg - UFR ...dpt-info.u-strasbg.fr/~boucheikh/L3_info/BDD_2/cours/L3I...Index bitmap Permet d’accéder facilement aux n-uplets dans les

17

Analyse des coûtsAvec l’utilitaire TKPROF, on obtient :

Le coût CPU

Le nombre d’entrées/sorties physiques

Le nombre d’entrées/sorties en mémoire

Le nombre de tris

97