BDR Ni034 Poly 2011
BDR Ni034 Poly 2011
BDR Ni034 Poly 2011
NAACKE
URL : http://www-bd.lip6.fr/ens/bdr2011/index.php/Accueil
TABLE DES MATIERES
Indexation
Extraits de partiels
Optimisation de requtes
Extraits de partiels
2002
2003
2004
2
4
5
6
2002
2003
2004
2005
9
11
12
13
14
18
19
22
24
25
JDBC
Transactions rparties
Srialisation globale
Dtection dinterblocages rpartis
27
31
32
TME
Index
Jointure,
Annexe1 et 2
Jointure rpartie
JDBC
2PC
33
36
40
42
44
50
Universit
e Pierre et Marie Curie - Paris 6.
Master dinformatique.
Exercice 1 : Arbres B+
On consid`ere un arbre B+ dont les nuds et les feuilles peuvent contenir au plus 4 cles et au minimum
(sauf la racine) 2 cles. A letat initial, la racine de larbre contient la cle 50. Un seul niveau intermediaire
contient (tous nuds confondus) les cles 8, 18, 32, 40 73, 85. Les feuilles contiennent (toutes feuilles
confondues) les valeurs 1, 2, 5, 6, 8, 10, 18, 27, 32, 39, 41, 45, 52, 58, 73, 80, 91, 99.
1. Dessinez letat inital de larbre.
2. Montrer letat de larbre apr`es linsertion de la cle 9.
3. Montrer letat de larbre resultant de linsertion dans larbre original de la cle 3. Combien de
lecture/ecriture de page cette insertion va-t-elle necessiter ?
4. On consid`ere la redistribution eventuelle des cles avec les feuilles voisines de m
eme p`
ere. En
considerant uniquement la redistribution a` gauche, montrer letat de larbre resultant de la suppression dans larbre original de la cle 8. Reprendre cette question en considerant uniquement la
redistribution a` droite.
5. Montrer letat de larbre resultant, a` partir de larbre original, de linsertion de la cle 46 suivie de
la suppression de la cle 52 (fusion eventuelle avec le voisin de droite).
6. Montrer letat de larbre resultant, a` partir de larbre original, de la suppression successive des cles
32, 39, 41, 45 et 73.
Exercice 2 : Arbres B+
On consid`ere un arbre B+ dont les nuds et le feuilles peuvent contenir au plus 4 cles et au minimum
(sauf la racine) 2 cles. A letat initial, la racine de larbre contient les cles 13, 17, 24, 30. Les feuilles
contiennent (toutes feuilles confondues) les valeurs2, 3, 5, 7, 14, 16, 19, 20, 22, 24, 27, 29, 33, 34, 38, 39.
On consid`ere uniquement la redistribution a` gauche.
1. Dessiner letat initial de larbre.
2. Donner 4 valeurs de cle telles que leur insertion successive puis leur suppression dans lordre inverse
resulte dans un etat identique a` letat initial.
3. Donner une valeur de cle dont linsertion suivie de la suppression resulte dans un etat dierent de
letat initial.
4. Combien au minimum faut-il inserer de cle pour que larbre gagne deux niveaux en hauteur ?
pts
Question 1
Le nombre de cl par nud est nc tel que :
nc [4,9] pour tout nud sauf la racine, nc [1,9] pour la racine
La profondeur p dun arbre correspond au nombre de niveaux, racine incluse, soit:
p = 1 pour un arbre rduit sa seule racine,
p = 2 pour un arbre ayant seulement une racine et des feuilles,
etc
Quelle est la profondeur minimale de lindex sur a1? Expliquez brivement votre rponse.
Question 2
Soit la requte R1 : Quelle est la valeur de a2 pour un a1 donn de valeur x ?
R1(x) : select a2 from R where a1 = x
Pour amliorer les performances de la requte R1, la structure de lindex sur a1 est modifie :
Le nombre maximal de cls par noeud est modifi,
La valeur de a2 est stocke directement dans les feuilles de larbre : chaque feuille contient un ensemble
de couples (cl, a2). Il ny a pas de liste chane entre les feuilles.
Lattribut a2 est une chane de 50 octets. La taille dune cl est 4 octets. La taille dune rfrence un
noeud est 8 octets. La taille dun nud est de 4000 octets.
Quel est le nombre maximum de couples (cl, a2) dans une feuille ?
Quel est le nombre maximum de cls dans un nud intermdiaire ?
Quelle est la profondeur minimale de lindex sur a1 ?
pts
pt
Soit la relation Livre(num, mois, anne, titre). Les domaines sont : anne [1900-1999], mois [1-12].
La distribution des attributs est uniforme. Les livres sont indexs avec une seule table de hachage sur les
deux attributs mois et anne. Proposer une fonction de hachage h1(mois, anne) pour rpartir
uniformment les tuples dans 1200 paquets.
Proposer une fonction h2(mois, anne) pour rpartir uniformment les tuples dans 512 paquets.
4 pts
Soit un arbre B+ avec 3 niveaux. Le nombre de cls par nud est tel que :
la racine et les nuds intermdiaires contiennent de 1 2 cls,
les feuilles contiennent de 2 3 cls,
Question 1 :
1.1) Dessiner l'arbre A1 ayant 3 niveaux tels que :
Les feuilles ont les cls 1, 4, 9,16, 25, 36, 49, 54, 61, 70, 81, 84, 87, 88, 95, 99.
Le niveau intermdiaire a les cls 9, 54, 70, 88
La racine contient 2 cls (pour les cls de la racine: choisir les plus petites valeurs possibles parmi les
cls des feuilles).
1.2) Reprsenter l'arbre A2 aprs insertion de la cl 32 dans A1, sans jamais redistribuer de cl avec les voisins.
Crer un nouveau nud en cas de dbordement d'une feuille ou d'un nud intermdiaire.
1.3) Soit l'arbre A3 aprs insertion de la cl 32 dans A1. L'arbre A3 est obtenu en redistribuant si possible les cls
des niveaux intermdiaires. Quel est le nombre de nuds de l'arbre A3 (racine, nuds intermdiaires et feuilles
inclus) ?
1.4) Reprsenter l'arbre A4 aprs suppression de la cl 16 dans A1. L'arbre A4 est obtenu en redistribuant si
possible les cls des feuilles avec les voisins.
1.5) Quel est le nombre minimum de cl supprimer dans A1 pour qu'il perde un niveau ? Justifier votre rponse.
Donner un exemple de cls supprimer (en choisissant des valeurs de cl les plus petites possibles).
Question 2 :
Soit la relation Produit(numro, prix). Les produits sont stocks dans l'ordre croissant du numro.
L'attribut numro est une cl, il est index par un arbre B+. Les attributs sont indpendants et leur
distribution est uniforme.
La relation Produit a 100 000 n-uplets, une page de donnes contient 100 n-uplets.
L'index est non dense (i.e., une seule cl par page de donnes).
2.1) Quel est le nombre minimum de cls au niveau des feuilles ? Justifier votre rponse.
2.2) Quel est le nombre minimal de niveaux de l'index ? Justifier votre rponse.
5 pts
On considre un index utilisant une technique de hachage extensible. La profondeur globale est indique
au dessus du rpertoire. La profondeur locale est indique au dessus de chaque paquet. Un paquet peut
contenir de 1 4 entres. Les entres sont des nombres entiers strictement positifs.
On utilise un algorithme de suppression complte, cest--dire que la suppression d'un paquet entrane la
diminution de la taille du rpertoire (division par 2), si cela est possible. On suppose quil y a fusion
seulement si un paquet est vide.
Question 1.
Soit T la taille du rpertoire de l'index. L'index contient au maximum T paquets, et 4*T entres
a) Quel est le nombre minimum de paquets de l'index ? Justifier et donner la profondeur locale des
paquets.
b) Soit Nmin est le nombre minimum d'entres de l'index. Que vaut Nmin ?
c) Soit un index avec Nmin entres dont les valeurs sont les plus petites possibles. Quelle est la valeur de
la plus grande entre de l'index ?
Question 2. On considre ltat suivant dun index utilisant une technique de hachage extensible.
a) Compltez l'tat initial de cet index de telle faon que :
L'tat initial est obtenu par plusieurs insertions, sans aucune suppression. Vous devez dterminer
des valeurs d'entres insrer, les plus petites possibles.
L'index dans l'tat initial doit contenir une entre telle que sa suppression ultrieure provoquera une
diminution de la profondeur globale.
b) Donnez ltat de lindex aprs suppression de cette entre.
Cl supprimer : ...
Index complter :
profondeur globale
3
000
profondeur locale
2
64
001
2
44
profondeur locale
010
9
25
011
100
101
110
111
00
64
32
16
41
73
01
2
10
25
11
2
C
10
11
Entres insrer :
19
35
e1=..
e2=..
e3=..
4 pts
On considre des arbres B+ contenant des donnes de type entier, tel que les nuds et les feuilles
contiennent au plus quatre valeurs. Les noeuds (sauf la racine) et les feuilles doivent tre au moins
moiti pleins (2 valeurs au moins). La hauteur d'un arbre est gale son nombre de niveaux. Un arbre de
hauteur 1 est rduit sa seule racine.
Question 1. Donnez un exemple darbre B+ dont la hauteur passe de 2 3 lorsquon y insre la valeur 25.
Donnez les deux arbres, avant et aprs linsertion. Utiliser la trame quadrille pour dessiner les nuds et
laisser un espace entre deux nuds. Rpondre page suivante.
Question 2. Donnez un exemple darbre B+ dans lequel la suppression de la valeur 25 conduit une
redistribution. Donnez les deux arbres, avant et aprs la suppression.
Question 3. Donnez un exemple darbre B+ dans lequel la suppression de la valeur 25 conduit une
fusion de deux nuds, mais ne modifie pas la hauteur de larbre. Donnez les deux arbres, avant et aprs la
suppression.
4 pts
2 pts
10
6 8
1 2 3
8 9
n5
n6
n2
13 20
n3
n4
6 7 10 11 13 14 20 21
n7
n8
n9
30 40
n10
n12
22 27
n11
n13
33 36
47 52
n14
22 23 24 25 27 28 30 31 33 34 36 37 40 43 47 49 52 55
n15
n16
n17
n18
n19
n20
n21
n22
n23
Trouver toutes les erreurs dans cet arbre. Indiquer le numro ni du noeud erron et expliquer brivement
l'erreur. S'il est possible de corriger l'erreur sans restructurer l'arbre, mais en modifiant seulement des
valeurs de cls, alors suggrer une correction.
page 13
v. :08/02/2010
TD 2a - Optimisation de requtes
Gnralits
1.Dcrire l'avantage d'un plan d'excution en pipeline pour un arbre de jointures
2.Pendant l'optimisation de requte, quel est le rle des statistiques collectes sur les donnes de la base ?
Soit la requte :
1) Donner larbre algbrique correspondant en respectant lordre des prdicats donns dans la clause where.
2) Donner un arbre quivalent en appliquant les oprations les plus rductrices (restriction, projection)
dabord.
3) Soit le modle de cot simplifi suivant, o lunit de cot est laccs un tuple.
o
Pour toute relation R, si card(R) est le nombre de tuples de R, le cot dune restriction sur galit est :
cot (att.=valeur (R))
Le cot dune lecture squentielle est le cot dune restriction sans index.
Pour toutes relations R ayant card(R) tuples et S ayant card(S) tuples, le cot dune equi-jointure est :
cot (R |><|att. S)
page 14
v. :08/02/2010
il y a un index sur lattribut B de R1, A est cl primaire de R1, R2 et R3 (il existe un index plaant
pour chaque cl primaire)
card(R1) = card(R2) = card(R3) = 1000, A(R1) = A(R2) = A(R3)
il y a 10 valeurs possibles pour B, uniformment rparties dans R1 et aussi dans R2 et dans R3.
pour chaque relation, la rpartition des valeurs de A en fonction de B est uniforme et est
indpendante de la rpartition dans les deux autres relations
Questions :
a) Quelle est la cardinalit du rsultat de la requte ?
b) Donner larbre algbrique de cot minimal et son cot (le nombre total daccs des tuples), en ignorant
les projections. Prciser votre rponse en dtaillant le cot et la cardinalit des rsultats intermdiaires.
10
pts
Un SGBD maintient des statistiques sur les donnes de la BD. Priodiquement et si les donnes ont t
mises jour, le SGBD actualise les statistiques au moyen de requtes SQL.
Soit la relation R(a1, a2, a3). La distribution des valeurs des attributs de R est uniforme.
a) Donner les requtes SQL pour calculer les statistiques suivantes :
Les bornes du domaine de a1
Le nombre de valeurs distinctes de a2
b) Donner une requte SQL pour vrifier que a2 et a3 sont indpendants. Expliquer comment interprter
le rsultat de la requte.
c) Le dictionnaire du SGBD est modifi pour grer la distribution non uniforme des attributs
Relation(nomRel, cardinalit), Attribut(nomRel, nomAtt, val, freq)
Un attribut est identifi par son nom nomAtt et le nom de sa relation nomRel. ; val reprsente une valeur
de lattribut ; freq reprsente le nombre de tuples dont lattribut nomAtt vaut val.
Ecrire, en pseudo-code, un algorithme pour collecter ces statistiques en utilisant des ordres SQL pour
manipuler les donnes du dictionnaire.
Donner en fonction de R, att et v, la requte SQL (sur les relations du dictionnaire) pour dterminer le
facteur de slectivit (SF) de loprateur de slection sur la relation R avec le prdicat att<v lorsque la
distribution de lattribut att est non uniforme. (ie. SF( att<v (R)))
pts
Soit les relations R(a,b), S(c), la distribution des attributs est uniforme,
Le domaine des attributs est : a[1,1000], b[1,10], c[1,100].
La cardinalits des relations sont : card(R) = 1000, card(S)= 100
La taille en nb de pages des relations est : P(R) = 500, P(S) = 10
Le modle de cot simplifi est :
Le cot dune jointure entre A et B, avec le prdicat A.att = B.att est :
cot(A A.att=B.att B) = card(A) * cot ( att=x (B))
Le cot dune lecture squentielle est le cot dune slection sans index.
Le cot dun oprateur trait en pipeline est nul.
Soit la requte : select * from R,S where a=c and b =1
Pour chaque cas a), b) et c), reprsenter le plan dexcution de cot minimal de la requte, sous la forme
dun arbre doprateurs. Donner le cot et la cardinalit de chaque oprateur de larbre, donner le cot
total de larbre.
a) il y a seulement un index sur R.a et un index sur R.b,
b) il y a seulement un index sur S.c,
c ) il y a seulement un index sur R.b et un index sur S.c.
11
6 pts
(x
est
lattribut
de
On rappelle que la jointure naturelle de deux relations est une qui-jointure sur les attributs de mmes
noms.
Question 1 :
On considre uniquement les arbres linaires gauches de la forme :
p4
p3
p1
p2
Question 2 :
Si on considre maintenant tous les arbres de jointures : les arbres linaires gauches, les arbres linaires droits et
les arbres quilibrs (dits touffus).
Quel est un des arbres de plus faible cot ? Donner son cot.
12
4 pts
Soit le schma relationnel dcrivant l'organisation d'un laboratoire en dpartements contenant des employs et des
projets.
Emp (Enum, salaire, age, Dnum)
Dept (Dnum, Pnum, budget, statut)
Proj (Pnum, code, description)
Tous les attributs sont des nombres entiers sauf statut et description qui sont des chanes de caractres. Les attributs
souligns forment une cl. La cl de Dept est compose de deux attributs, (l'attribut Dnum seul n'est pas une cl
primaire de Dept).
La taille d'un n-uplet est respectivement de 20 octets pour Emp, 40 octets pour un Dept et 2000 octets pour Proj. Le
nombre de n-uplets par relation et respectivement de 20 000 pour, Emp, 5000 pour Dept et 1000 pour Proj. La taille
d'une page, sur le disque ou en mmoire, vaut 4000 octets. La fonction page(R) retourne le nombre de pages
contenant les n-uplets de R.
La distribution des valeurs des attributs est uniforme. Les attributs sont indpendants. Le domaine de l'ge des
employs est l'ensemble des nombres entiers de 20 69 inclus : {20, 21, , 69}. Le domaine des budgets est
l'ensemble des multiples de 1000 inclus dans ]100 000, 600 000].
On suppose que tous les index sont des arbres B+. Un index sur l'attribut A est dit plaant si les donnes sont tries
sur le disque dans l'ordre des valeurs de A. Un index sur l'attribut A est dit non plaant si les donnes ne sont pas
tries sur le disque dans l'ordre de A.
L'estimation du cot des oprations repose sur le modle suivant:
cot( pred (R) ) = page(R) * card( pred (R)) / card(R) si l'attribut a est index par un index plaant,
cot( pred (R) ) = page(R)
Prcisez clairement toute hypothse supplmentaire que vous jugez ncessaire pour rpondre aux questions poses.
Question 1. Soit la requte R1:
a) Quel est le cot pour traiter R1 s'il existe un index non plaant sur l'attribut age ?
b) Quel est le cot pour traiter R1 s'il existe un index plaant sur l'attribut age ?
Question 2. Soit la requte R2
a) On suppose qu'il existe un index non plaant sur l'attribut budget. Pour quelles valeurs de n, la lecture
squentielle de Dept est moins coteuse que l'accs par index, pour traiter R3 ? Rpondre en donnant toutes les
valeurs de n.
b) Mme question mais avec un index plaant sur l'attribut budget. On suppose, pour cette question, que la
traverse de lindex cote 3 lectures.
13
BDR
EXTRAIT Partiel du 5 avril 2005
Exercice 2 : Optimisation de requtes
10 pts
La taille d'un n-uplet est de 20 octets pour Emp, 40 octets pour Service, 2000 octets pour Projet. Les
attributs ne, ns et np ont chacun 4 octets. La cardinalit des relations est de 20 000 pour Employs, 5000
pour Service et 1000 pour Projet. La relation Service reprsente l'association N-M d'un service avec un
projet. La cl de Service est compose des attributs ns et np (ainsi, l'attribut ns n'est pas unique dans
Service).
Chaque Service, identifi par ns a en moyenne 10 Projets. Les donnes sont stockes sur disque dans des
pages de 4000 octets. Les attributs sont indpendants et leur distribution est uniforme.
Soient les fonctions auxiliaires :
ntp(R) le nombre de tuples par pages pour la relation R,
D(R, c) le nombre de valeurs distinctes du domaine de l'attribut R.c,
largeur(R) la taille d'un tuple de R,
et arr(x) l'arrondi de x par excs une valeur entire,
Un index sur l'attribut c est dit plaant si les donnes sont tries sur le disque dans l'ordre des valeurs de
c. Un index sur l'attribut c est dit non plaant si les donnes ne sont pas tries sur le disque dans l'ordre
de c.
L'estimation du cot des oprations repose sur le modle suivant. Le modle de cot estime le nombre de
pages lire et crire, sans prendre en compte l'criture du rsultat final.
Le cot d'une lecture squentielle de la relation R est gal au nombre de pages de R (not page(R)).
Le cot d'une slection avec un prdicat pred de la forme a op v o a est un attribut numrique et op est
l'oprateur = (gal), < (infrieur ) ou < (suprieur ), est :
cot( pred (R) ) = card( pred (R))
cot( pred (R) ) = arr(page(R) * card( pred (R)) / card(R)) si l'attribut a est index par un index plaant,
cot( pred (R) ) = page(R) si l'attribut a n'est pas index.
Le cot d'une jointure naturelle avec un prdicat de jointure pred de la forme R.c = S.c dpend de
l'algorithme utilis et de la prsence d'index sur les attributs de jointure. Les algorithmes de jointure sont
numrots J1 J9 :
J1: jointure par boucles imbriques, l'itration sur R imbrique l'itration sur S, sans utiliser aucun
index.
J2: jointure avec itration sur R et accs par index plaant sur S.c
J3: jointure avec itration sur R et accs par index non plaant sur S.c
J4 : jointure par tri de R et S selon c, puis fusion sans utiliser aucun index
J5 : jointure par fusion, avec des index plaants sur R.c et sur S.c
J6 : jointure par fusion, avec des index non plaants sur R.c et sur S.c
14
J7 : jointure par tri de R selon c, puis fusion en utilisant un index plaant sur S.c
J8 : jointure par tri de R selon c, puis fusion en utilisant un index non plaant sur S.c
J9 : cration d'une table de hachage (non plaante) de R sur c, puis jointure avec itration sur S et
accs R par la table de hachage.
Question 3.
Soit la requte R1:
Select *
From Emp e, Service s
Where e.ns = s.ns
1) On suppose qu'il existe seulement un index plaant sur Emp.ns. Dire, pour chaque algorithme J1 J9,
s'il est utilisable pour traiter R1? Si oui, donner le cot du plan d'excution de R1. Sinon expliquer
brivement pourquoi.
15
2) On suppose maintenant qu'il existe un index plaant sur Emp.ns et un index plaant sur Service.ns.
Quel est l'algorithme de cot minimal ? Donner son cot.
3) On suppose maintenant qu'il existe seulement un index plaant sur Service.ns. Le SGBD possdant
seulement 7 pages disponibles en mmoire, on choisit de traiter R1 avec l'algorithme suivant :
Etape 1: Lire Emp par blocs de 6 pages (1 page mmoire tant rserve pour crire le rsultat du
tri), et crer des sous-listes tries.
Etape 2: Tant que le nombre de sous-listes est suprieur ou gal 6 :
fusionner 6 sous-listes en 1 seule liste, crire le rsultat sur disque.
Etape 3: Fusionner les listes restantes avec la relation Service
a) Donner le cot de R1, en utilisant cet algorithme, en nombre de pages (lues ou crites).
b) Combien faut-il de pages mmoire au minimum pour pouvoir utiliser J7 ?
Question 4.
Rappel des formules valuant la cardinalit de la slection et de la jointure :
card(F (R)) = SF( (F) ) card(R)
o
SF(
SF(
SF(
A = valeur)
= 1 / D(R, A)
A > valeur)
A < valeur)
16
E.ne,S.sn,P.np
2me jointure
np
1re jointure
Projet
ns
sal = 50 000
Emp
Service
card (
card (
card ( (
cot (
= ...
= ...
17
BDR
rv: 10/02/2011
1 - Conception de BD rparties
Schma global de la base
La base de donnes hospitalire de la rgion Alsace a le schma suivant :
Service (Snum, nom, hpital, bt, directeur)
le directeur dun service est un docteur dsign par son numro
Salle (Snum, SAnum, surveillant, nbLits)
le numro de salle est local un service, i.e., il peut y avoir des salles avec le mme
numro dans des services diffrents d'un mme hpital.
nbLits est le nombre total de lits dune salle,
un surveillant de salle est un infirmier dsign par son numro
Employ (Enum, nom, adr, tl)
Docteur (Dnum, spc) -- spc est la spcialit du mdecin
Infirmier (Inum, Snum, rotation, salaire)
Un employ est soit infirmier soit docteur (Inum et Dnum font rfrence Enum).
Patient (Pnum, Snum, SAnum, lit, nom, adr, tl, mutuelle, pc)
L'attribut pc est la prise en charge par la mutuelle
Acte (Dnum, Pnum, date, description, coef)
Question 1
Exprimer en SQL la question suivante: Donner le nom des cardiologues qui ont trait un ou plusieurs
patients hospitaliss dans un service de grontologie.
Question 2
Proposer (et justifier) une bonne dcomposition de la base hospitalire sur ces trois sites. On pourra utiliser
la fragmentation horizontale et/ou verticale ainsi que la rplication des donnes, en se basant sur les
hypothses suivantes (H1 H5) :
H1: Les sites Strasbourg et Colmar ne grent que les hpitaux correspondants.
H2 : Les infirmiers sont employs dans un service donn.
H3 : Les docteurs travaillent le plus souvent sur plusieurs hpitaux (ou cliniques).
H4 : La gestion des lits dhpitaux est locale chaque hpital.
H5 : On dsire regrouper la gestion des frais dhospitalisation au centre rgional.
Pour chaque fragment, on donnera sa dfinition en algbre relationnelle partir du schma global.
18
BDR
rv: 10/02/2011
Question 3
Indiquer comment se calcule chaque relation de la base globale partir de ses fragments.
Question 4
Proposer un plan dexcution rparti pour la requte SQL vue en Question 1, sachant maintenant que les
donnes sont rparties sur les trois sites selon la dcomposition propose la Question 2.
Question 5
Discuter les problmes et proposer des solutions pour l'intgration de la base Belfort au systme rparti dj
dfini. Lintgration devra se faire sans transfert dinformation et sans modification de des bases existantes,
mais uniquement par dfinition de vues.
Question 6
Dfinir le nouveau schma global intgrant la base Belfort. Chaque relation du schma global (Service2,
Salle2, Acte2) est dfinie en fonction des fragments sur les 4 sites.
Question 7
Lhypothse H5 est-t-elle toujours respecte aprs lintgration de la base Belfort ? Si non, quelles sont les
modifications de schma ncessaires pour respecter H5 ?
Question 8
Proposer une dcomposition et un plan dexcution pour la question SQL prcdente aprs lintgration de la
base Belfort.
19
BDR
rv: 10/02/2011
Question 1.
a) Calculer la taille dun tuple du rsultat.
b) Calculer la cardinalit du rsultat.
c) Calculer la taille (en nombre de pages) du rsultat de cette requte.
Question 2.
On suppose que toutes les jointures sont faites en utilisant lalgorithme de tri-fusion, dont le cot dpend du
nombre de pages (not p()) des relations participant la jointure. On a :
Cot(Ra S ) = Tria(R) + Tria(S) + [ Lect(R) + Lect(S) ]
Tri(R) = Lect(R) + Ecr(R) si les donnes ne sont pas dj tries sur les attributs de jointure
Lect(R)
= p(R) si les donnes sont locales
= 0 si les donnes sont transmises directement depuis un site distant
Ecr(R) = p(R) // correspond au stockage temporaire des donnes
Par exemple, pour une jointure entre 2 relations locales non tries on a :
Cot(Ra S ) = 3 * (p(R) + p(S)) * tIO
Pour une jointure entre 2 relations locales tries, on a :
Cot(Ra S ) = (p(R) + p(S)) * tIO
Si R est dj tri et est transmise depuis un site distant et si S est locale non trie, on a
Cot(Ra S ) = (3*p(S)) * tIO
On demande de calculer le cot de lexcution de cette requte pour les diffrents plans dexcution
suivants :
Plan P1: On calcule la requte Naples en envoyant la relation Service Naples ; le rsultat est envoy
Londres.
Plan P2: On calcule la requte Berlin en envoyant la relation Employs Berlin ; le rsultat est envoy
Londres
Plan P3: On calcule la requte Londres, en envoyant les deux relations Londres.
Plan P4: On calcule la requte Berlin puis Naples, en utilisant une semi-jointure Berlin ; on envoie le
rsultat final Londres. (attention, la semi-jointure peut amener crer des relations temporaires qu'il faudra
intgrer dans le cot)
Plan P5: On calcule la requte Naples puis Berlin en utilisant une semi-jointure Naples ; on envoie le
rsultat Londres.
Question 3.
Daprs vos rponses, quel est le plan qui minimise les transferts ? Est-ce forcment le plan le plus
intressant ? Quel est le meilleur plan ?
20
BDR
rv: 10/02/2011
( bdw e b j anvi e r 2 0 0 2 )
Lentrept de la Californie gre des livres, de la musique, et des vidos, et effectue des
livraisons pour des commandes vers les rgions de louest et du centre des tats-Unis.
Lentrept de New York gre des livres, des jeux, et des vidos, et effectue des livraisons
pour des commandes vers les rgions de lest et du centre des tats-Unis.
Lentrept de Colorado gre des livres, des jeux, et de la musique, et effectue des livraisons
pour des commandes vers toutes les rgions des tats-Unis.
Catgorie prend une des valeurs suivantes : livre, musique, vido, et jeux.
Question 1
Exprimer en SQL sur le schma global la requte permettant de retrouver le nombre dexemplaires
disponibles du livre intitul X pour une livraison vers louest des tats-Unis.
Question 2
Supposons maintenant que la base PointCom est rpartie sur les trois sites informatiques de la
Californie, de New York, et du Colorado. Proposer une bonne dcomposition de la base sur ces
trois sites. Donner, en algbre relationnel, la dfinition des diffrents fragments.
Question 3
Proposer un plan dexcution rpartie pour la requte de la question 3 minimisant les transferts
entre les sites (vous dcidez du site qui pose initialement la requte).
21
UPMC- Paris 6
M1 - BDR
Exercice 1 : Fragmentation
(juin 2004)
pts
Rle (nom, F, A)
22
(juin 2004)
pts
M1 BDR
Artiste (A, nom, prnom, nation) un artiste est identifi par son numro A
Rle (nom_rle, F, A)
pi (Artiste)
Question 2.
On souhaite traiter les requtes suivantes. Pour chaque requte, donner le plan dexcution de cot
minimal, en prcisant l'expression algbrique de chaque sous requte Ti locale et les transferts. Utiliser la
notation tr(Ti, X, Y) pour dsigner les transferts. Le site sur lequel la requte est pose, reoit le rsultat.
a) Requte R1 pose Los Angeles (LA) : Donner le nom des acteurs franais qui ont jou avec lacteur
amricain nomm Pitt (i.e., dans le mme film que lui).
select a2.nom
from Artiste a1, Artiste a2, Role r1, Role r2
where a1.nom = Pitt and a1.nationalit= 'US' and a2.nationalit = F
and a1.a = r1.a and r1.f = r2.f and r2.a = a2.a
23
M1 BDR
Etapes du plan de cot minimal :
1) sur le site ...
traiter T1 = ...
tr(T1, ... , ...) =
2) sur le site ...
traiter T2 = ...
tr(T2, ... , ...) =
etc...
cot total = ..
b) La requte R2 est pose Paris (P) : Quels sont les films dont le casting est franco-amricain ?
Plus prcisment : Donner le numro des films dans lesquels jouent au moins un acteur franais et au
moins un acteur amricain. Quel est le plan optimal pour R2 ?
c) On suppose maintenant que les attributs nation et F ne sont plus indpendants. Pour cela on donne
card ( F Rle1 ) = card ( F Rle2 ) = 1000 et card ( F Rle3 ) = 1200
et 5% des films o figurent au moins un acteur franais a galement un acteur amricain
Quel est le plan optimal pour la requte R2 de la question prcdente ?
(juin 2004)
3 pts
On considre la relation
Employ (E, nom, D, salaire)
Un n-uplet reprsente un employ identifi par son numro E. Le numro D fait rfrence au directeur de
l'employ. Le directeur est aussi un employ.
Soit la requte R1 :
select a.nom
from Employ a, Employ b
where a.D = b.E
and a.salaire > b.salaire
Question 1. Traduire la requte R1 en une phrase, en franais :
Question 2. Donner l'expression algbrique de la requte R1 en fonction de la relation globale Employ, et telle
que les oprations les plus rductrices sont traites le plus tt possible.
Question 3. La relation Employ est fragmente en 2 fragments E1 et E2 tels que:
E1 contient tous les employs dont le salaire est infrieur ou gal 1000,
E2 contient tous les employs dont le salaire est suprieur 1000.
Donner l'expression algbrique de la requte R1, en fonction des fragments E1 et E2, et telle que l'expression soit
de la forme :
R1
o les sous expressions Ti ne contiennent pas d'union et peuvent ne pas tre vides,
les oprations les plus rductrices sont traites le plus tt possible.
Prciser combien il y a de sous expressions Ti.
24
NOM :
PRENOM :
Page 1
6 pts
Les valeurs de lattribut #chef sont des valeurs de #emp. La relation EMPLOYES contient 100000
pages, la relation SERVICES contient 5000 pages.Les n-uplets des deux relations ont 20 octets. Les
valeurs des attributs salaire et budget contiennent des valeurs uniformment rparties entre 0 et 1000000.
La taille des pages est de 4000 octets.
Les relations sont rparties sur 10 sites, de la faon suivante : la relation SERVICES est partitionne
horizontalement sur les 10 sites par #service, avec le mme nombre de n-uplets sur chaque site. La
relation EMPLOYES est partitionne horizontalement en fonction du salaire. Les n-uplets dont le salaire
est <= 100000 sont stocks sur le site 1, ceux dont le salaire est compris entre 100000 et 200000 sont sur
le site 2, etc. La partition des n-uplets dont le salaire est infrieur 100000 est frquemment lue, et trs
peu souvent mise jour. Elle est donc rplique sur tous les sites. Aucune autre partition de la relation
EMPLOYE nest duplique.
Dcrivez le plan dexcution des requtes suivantes, et donnez leur cot, sachant que le cot de transfert
dune page est Ct, et le cot dun accs disque est Cd.
Question 1. Calculer la jointure naturelle entre EMPLOYES et SERVICES, en utilisant la stratgie qui
consiste envoyer tous les fragments de la plus petite relation vers les sites contenant les n-uplets de la
plus grande relation. Lalgorithme de jointure utilis est le trifusion, dont le cot est de 3(M+N)Cd, M et
N tant les tailles des relations (N et M sont exprimes ici en nombre de nuplets) participant la jointure.
Question 2. Quel est lemploy le mieux pay ? (en cas de dupliqus, la requte doit renvoyer tous les nuplets rpondant au critre).
Question 3.Quel est le chef le mieux pay ?
25
5 pts
On considre un SGBD parallle dans lequel chaque relation est stocke par partitionnement
horizontal des n-uplets sur tous les disques. On a la relation suivante :
Joueurs (joueur-id : integer, eq-id : integer, salaire : real)
On suppose que lattribut salaire contient des valeurs dans lintervalle [0, 1 500 000] uniformment
distribues. La relation a 150 000 pages. Une page a une taille de 4K octets, et comprend 200 n-uplets
(un n-uplet a une taille de 20 octets). Le cot de lecture dune page du disque (ou dcriture sur le
disque) est td, et le cot denvoi dune page dun processeur vers un autre est ts. On suppose que la
relation a t partitionne suivant lalgorithme round-robin, et quil y a 15 processeurs.
Question 1. Dcrivez brivement le plan dvaluation de la requte R1, et calculez son cot en termes
de temps daccs (td) et temps denvoi (ts). On donnera le cot total de la requte, ainsi que le cot en
temps coul (si plusieurs oprations sont effectues en parallle, le temps coul est le maximum du
temps pris par chacun des processeurs pour faire son travail).
R1 . Quel est le joueur le mieux pay ?
Question 2. La relation Joueurs est maintenant stocke dans un SGBD rparti comprenant 15 sites.
Elle est partitionne horizontalement sur les 15 sites, selon les valeurs de lattribut salaire, en stockant
les n-uplets vrifiant la condition salaire <=100000 sur le premier site, les n-uplets vrifiant la
condition 100000 <salaire<=200000 sur le second site, et ainsi de suite. La base est complte par la
relation Equipes suivante :
Equipes (eq-id : integer, cap-id : integer, pays: string)
Le champ cap-id de la relation Equipes est le joueur-id du capitaine de lquipe. La relation Equipes
comprend 4500 pages, et est rpartie horizontalement selon lattribut eq-id. On suppose que la
rpartition est uniforme (on a le mme nombre de n-uplets sur chaque site), et alatoire (il ny a pas de
critre pour rpartir les n-uplets sur les sites). Les n-uplets de la relation Equipes ont une taille de 20
octets.
Dcrivez brivement les plans dexcution des requtes R1 et R2, et donnez leur cot en fonction de td
et ts.
R1. Quel est le joueur le mieux pay ?
R2. Faire la jointure naturelle des relations Joueurs et Equipes en utilisant la stratgie qui consiste
envoyer tous les fragments de la plus petite relation sur chaque site contenant les n-uplets de la plus
grande relation.
5 pts
Chaque site hberge un SGBD et une application. Une application produit une charge constitue de lectures et
d'critures. Pour maintenir les sites jour, on ajoute un module de gestion des rpliques (intergiciel appel
rplicateur). Si une donne est rplique sur plusieurs sites, une criture doit tre traite sur toutes les rpliques.
Une lecture est traite localement si possible.
26
page 2
Soit un fragment F et deux sites S1, S2. Le cot pour lire (resp. crire) un nuplet vaut 1 (resp. 2). Le cot pour
transfrer un nuplet vaut 3. Ainsi, on a le modle de cot suivant :
Lecture locale :
LL = 1
Ecriture locale : EL = 2
Lecture distante, depuis Si, d'un nuplet de Sj (avec ij) : LD = 4
Ecriture distante, depuis Si, d'un nuplet de Sj (avec ij) : ED = 5
On souhaite allouer F sur un ou plusieurs sites de manire minimiser le cot de traitement des applications.
Question 1
Une application Ai produit, sur le site Si , une charge valant 6*n lectures et n critures de F (toutes les
applications produisent la mme charge). On veut calculer, en fonction de n, la quantit de lectures et dcritures
traites par les SGBD des sites S1 et S2.
1.1) On suppose que F est seulement sur S1. Quel est le cot des traitements sur chaque site ?
1.2) On suppose maintenant que F est rpliqu sur S1 et S2. Quel est le cot des traitements sur chaque site ?
Question 2
On complte l'architecture initiale avec un troisime site S3 et son application A3. Les applications produisent la
charge suivante : A2 produit 3 fois plus de traitements que A1, A3 produit 4 fois plus de traitements que A1.
Chaque application produit 10 fois plus de lectures que d'critures. A1 produit n critures et 10*n lectures.
On veut savoir sil est intressant dallouer F sur S3 ; plus prcisment, dans le cas o F ne serait pas allou sur
S3, quelle serait l'augmentation (ou la diminution) du cot que cela induirait pour les traitements de A3.
2.1.a) Quelle est, en fonction des 3 variables n, L (lecture) et E (critures) la charge produite par chaque
application.
2.1.b) Est-il ncessaire d'allouer F sur S3 pour minimiser globalement le cot des traitements ? Justifier
brivement.
2.1.c) Le fait dallouer F sur S3 a-t-il un impact sur le cot de traitement des lectures de A3 ? Si oui, quelle est
la diffrence de cot pour traiter les lectures de A3 en comparaison avec une configuration o F nest pas sur
S3 ? Donner une rponse en fonction de n.
2.1.d) Quelle est lallocation pour laquelle F nest pas sur S3 et les critures sont minimises ? Dans ce cas, quel
est en fonction de n, le cot de traitement des critures produites par A3 ?
2.1.e) Quelle est lallocation pour laquelle F est sur S3 et les critures sont maximises ? Dans ce cas, quel est
en fonction de n, le cot de traitement des critures produites par A3 ?
2.1.f) Finalement, quelle est, en fonction de n, la plus petite augmentation (ou la plus forte diminution) de cot
apporte par une configuration o F nest pas sur S3.
2.2) Quel est le cot des traitements si F est seulement sur S3 ?
2.3) Quel est le cot des traitements si F est rplique sur S2 et S3 ?
2.4) Quel est le cot des traitements si F est rplique sur S1, S2 et S3 ?
2.5) Quelle allocation minimise globalement le cot des traitements ?
Exercice 3 : JDBC
5 pts
L'application A, crite en java, communique avec les SGBD B1 et B2 par JDBC. B1 et B2 ne peuvent pas
communiquer directement entre eux. Soient les informations suivantes :
card(R) = 1000, card(S)=300, la taille des attributs en octets est a=4, b=10, c=10.
Les valeurs de a, b, c sont des entiers positifs. Il y a exactement 2 nuplets de R par valeur de a et 3 nuplets
de S par valeur de a. R et S ont 4 valeurs distinctes de a en commun.
27
page 3
Soient CE le cot unitaire d'excution d'une requte sur un site et CT le cot unitaire de transfert d'une donne
sur le rseau.
Le cot dinstruction JDBC est le suivant : (toutes les tailles sont en octets)
Interface
Mthode
Cot (en octets)
Statement
executeQuery(requte)
CE * taille du rsultat de la requte
ResultSet
getString(...)
CT * taille de l'attribut lu
Toutes les autres instructions ont un cot nul.
Remarques : Le cot correspond au traitement dune seule occurrence dune instruction. Le cot total de
plusieurs occurrences dune mme instruction, pendant tout le droulement du programme, est dduit du tableau
ci-dessus.
Question 1
Donner la valeur de card(R a S)
Question 2
L'application excute le programme P1 ci-dessous :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Connection c1 = DriverManager.getConnection("B1");
Connection c2 = DriverManager.getConnection("B2");
Statement s1 = c1.createStatement();
Statement s2 = c2.createStatement();
ResultSet r1 = s1.executeQuery("select a,b from R");
while (r1.next()) {
String v = r1.getString(1);
ResultSet r2 = s2.executeQuery("select c from S where a = '" + v + "'");
boolean p = true;
String w = "";
while (r2.next()) {
if(p) {
w = r1.getString(2);
p = false;
}
out.println("[" v + ", " + w + ", " + r2.getString(1) + "]");
}
r2.close();
}
r1.close();
s1.close(); s2.close(); c1.close(); c2.close();
Connection c1 = DriverManager.getConnection("B1");
Connection c2 = DriverManager.getConnection("B2");
Connection c3 = DriverManager.getConnection("B1");
Statement s1 = c1.createStatement();
Statement s2 = c2.createStatement();
Statement s3 = c3.createStatement();
ResultSet r1 = s1.executeQuery("select distinct a from R");
while(r1.next()) {
String z = r1.getString(1);
ResultSet r2 = s2.executeQuery("select c from S where a = '" + z + "'");
while(r2.next()) {
String t = r2.getString(1);
28
page 4
5 pts.
Soit R1(a, b) sur le site S1, R2(a, c) sur S2. La requte R1 a R2 est pose sur S3. Le schma du rsultat de la
requte est (a, b, c). Les attributs sont des entiers positifs. La distribution des valeurs des attributs est uniforme.
La taille, en octets, des attributs a, b, c est respectivement 1000, 1000 et 3000.
Le tableau suivant donne la taille des rsultats intermdiaires en milliard (109) doctets :
Expression
taille
-----------------------------R1
80
R2
400
a (R1)
a (R2)
10
20
R1 a R2
40
R2 a R1
100
R1 a R2
a (R1 a R2)
a3)
a4)
29
page 5
card( a (R1))
le nombre moyen de nuplets de R1 pour une valeur de a donne.
b4)
30
M1 BDR
TD : Transactions rparties
Quel est le problme pos lorsquon veut verrouiller une donne rplique ?
Quest ce quun verrou global , un verrou local ?
On suppose quun gestionnaire de verrou centralise les demandes de verrou et daccs aux donnes. Expliquer
son fonctionnement en cas de donnes rpliques. Quels sont les avantages et dfauts dune telle approche ?
4.
On cherche maintenant ne pas mettre en place de gestionnaire centralis, mais de tirer parti des gestionnaire
de verrous et daccs locaux. Pour cela, les transactions doivent respecter le protocole suivant :
lorsquelles ont russi verrouiller un certain nombre de rpliques dune donne, les transactions peuvent dduire
quelle ont accs la donne. On dit quelle obtiennent un verrou logique sur la donne grce aux verrous physiques
quelles ont obtenus sur les rpliques. On suppose quune donne d est rplique sur n sites.
a.
b.
On suppose que n=3. Montrer quen obtenant au moins 2 verrous physiques exclusifs, une transaction
peut avoir un verrou logique exclusif sur d et donc accs en criture d, donc toutes ses rpliques.
Soit k (resp. k) le nombre de verrous physiques exclusifs (resp. partags) obtenir pour en dduire un
verrou logique exclusif (resp. partag). Donner la valeur minimale de k (resp. k) en fonction de n que
le protocole doit respecter pour que le verrouillage logique fonctionne.
31
S2
C: L9, E8
D : E8, L7, L5
32
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Les Index
1 sur 3
description
cd
aller dans votre rpertoire $HOME
tar zxvf $BD_TOOL/tp-index.tgz installer l'archive dans votre rpertoire principal
cd tp-index
aller dans votre rpertoire de travail
emacs annuaire.sql &
diter le fichier
excute le script annuaire.sql depuis l'invite SQL
SQL> @annuaire
Exercice
1) (prparation) Crer une relation Annuaire(nom, prenom, age, cp, tel) en utilisant le fichier
annuaire.sql.
SQL> @annuaire
Elle contient 10000 tuples sur 90 prnoms et 100 noms diffrents. Les codes postaux (cp) sont des
multiples de 100 et sont compris entre 1000 et 100000. Le numro de tlphone est une chane de
10 chiffres commencant par 0. Le numro de tlphone est une cl de l'annuaire.
Rpondre aux questions suivantes dans le fichier tme2.sql
2) Proposer une ou plusieurs requtes pour vrifier si la distribution de l'attribut age est uniforme,
quasi uniforme ou fortement biaise. Expliquer brivement comment analyser le rsultat de cette
requte.
3) Proposer une ou plusieurs requtes pour vrifier que les attributs age et prnom sont
indpendants :
Quel que soit l'age, y a-t-il autant de prnom diffrents pour un age donn ?
Quel que soit le prnom, y-a-t-il autant d'ge diffrents pour un prnom donn ?
Y-a-t-il tous les prnoms possibles pour chaque age, et tous les ages possibles pour chaque
prnom ?
4) En utilisant les formules du cours, estimer la cardinalit des requtes suivantes. Comparer
ensuite la cardinalit estime avec la cardinalit relle des requtes. Quel est le pourcentage
d'erreur (rel/thorique) ?
R1: select * from Annuaire
33
08/02/2010 15:57
2 sur 3
R2:
R3:
R4:
R5:
R6:
select
select
select
select
select
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
5) Crer les index mono-attributs permettant d'amliorer les performances des requtes
prcedentes. La syntaxe est :
create index nom_index on nom_relation(nom_attribut) ;
pour effacer un index : drop index nom_index;
5.1) Afin de visualiser les informations dtailles sur le traitement des requtes :
activer le mode de visualisation des plans :
set autotrace trace explain stat (pour dsactiver ce mode : set autotrace off)
Dans cette question, on demande l'optimiseur de requtes d'utiliser des rgles heuristiques
et non pas une estimation du cot. La session est modifies en consquence :
alter session set optimizer_mode = RULE;
puis re-excuter chaque requte pour voir le plan d'excution. Voir l'annexe PlanRequete.
Pour chaque requte, afficher les index utiliss par le moteur de requte.
Prsenter vos rponses dans un tableau rcapitulatif :
requte index utilis(s)
R1
...
...
...
Analyser le tableau et suggrer des rgles heuristiques que l'optimiseur utilise pour choisir un index.
Si ncessaire, complter le tableau avec d'autres requtes.
5.2) Quelles sont les requtes pour lesquelles le plan d'excution construit par l'optimiseur ne vous
semble pas optimal ? Donner un exemple.
6) Estimation du cot des accs. L'ordre ANALYZE ajoute des statistique dans le dictionnaire du
SGBD pour permettre l'optimiseur d'estimer le cot des requtes :
analyze table Annuaire compute statistics; (pour supprimer les statistiques: analyze table
Annuaire delete statistics;)
6.1) En interrogant les vues user_tables, user_tab_columns et user_indexes, expliquer quelles
sont les statistiques maintenues dans le dictionnaire. Dsactiver le mode autotrace avant
d'interroger les vues (set autrotrace off).
parmi les attributs de ces vues, quels sont ceux qui reprsentent les statistiques prsentes
en cours ?
cardinalit d'une relation
description du domaine d'un attribut avec ses valeurs min et max et son nombre de
valeurs distinctes,
etc...
6.2) Afin que le SGBD maintienne des statistiques sur vos index, excutez la commande suivante
pour chaque index :
34
08/02/2010 15:57
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
3 sur 3
35
08/02/2010 15:57
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Les Jointures
1 sur 4
Introduction
Dans la suite du TME, nous mesurons le cot d'une requte en nombre de lectures de blocs
mmoire. C'est le nombre de consistent gets qui apparait dans les statistiques d'excution d'une
requte.
Un plan d'excution est affich de manire arborescente. Chaque noeud de l'arbre est un
oprateur. Un oprateur a un numro de noeud et un nom. Les noms des oprateurs sont indents
pour montrer l'arbre d'excution : le noeud parent est celui dont le nom est dcal d'un caractre
gauche.
l'exemple suivant reprsente une jointure par boucles imbriques (nested loops). L'oprateur
de jointure (noeud numro 1) est le fils du noeud numro O. Les fils du noeud numro 1 sont
36
08/02/2010 15:58
2 sur 4
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
SELECT
NESTED LOOPS
TABLE ACCESS
TABLE ACCESS
Autre exemple : l' accs la relation C (les clubs) par un index sur l'attribut division :
3
4
algorithme
jointure par boucles imbriques
jointure par fusion
jointure avec hachage temporaire des tuples
tri prliminaire avant jointure par fusion
lecture squentielle d'une relation
lecture non squentielle d'une relation (un accs par tuple)
traverse d'un index (arbre B+)
IMPORTANT
Dans la suite de ce TME on demande au SGBD ne raliser des jointures par boucles imbriques
(Nested Loop Join : voir diapo 13 du cours).
Ajouter la directive USE_NL(x,y,z,...) dans toutes les requtes (x,y,z sont les tables qu'on veut
joindre par boucles imbriques, ici x=C, y=J, z=F)
3 sur 4
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
On veut connaitre le cot des slections utilises dans la requte R. Pour cela, on mesure le cot
des slections avec et sans index.
3.1) Quels sont les noms des index existants pour les relations J, C et F ?
3.2) Pour chaque requte de slection pouvant servir traiter la requte R, donner son expression
SQL et son cot avec et sans index. Pour empcher un accs par index, utiliser la directive /*+
no_index(nom_relation nom_index) */ (voir l'Annexe2). Donner aussi la cardinalit (nb de n-uplets)
du rsultat de la slection.
num
S1
S2
slection
SQL
cot avec
index
cot sans
index
cardinal.
3.3) Pour les slections S1, S2 l'accs par index est-il avantageux ? Expliquer pourquoi.
3.4) On veut traiter R en commenant par la slection la moins couteuse (entre S1 et S2). Donner le
plan de la requte R, qui utilise la slection la moins couteuse? Est-ce le plan optimal ?
Question 4
(question supprime)
38
08/02/2010 15:58
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Question 6 (facultatif)
6.1) Laisser le SGBD choisir les algorithmes de jointure, en supprimant la directive use_nl. Pourquoi
la jointure par hachage est-elle choisie ?
6.2) Insrer des nuplets dans la table C jusqu' ce que l'algorithme de jointure choisi change (pour
un autre algorithme que le hash join)
Question 7 (facultatif)
7.1) Ajouter une 4eme table et proposer une requte de jointure entre les 4 tables qui ne puisse pas
tre transforme en un arbre linaire gauche.
7.2) Ajouter suffisamment de donnes dans les tables pour qu'au moins une jointure par tri-fusion
(sur les 3 jointures effectuer) soit choisie par l'optimiseur.
Question 8 (facultatif)
Donner un exemple de requte R' de jointure entre C,J,F o le plan choisi par le SGBD consiste
commencer par une lecture squentielle de F en entier. Cependant, ce plan serait efficace car la
slectivit de premire jointure entre F et une autre relation serait trs forte. R' est diffrent de R,
vous pouvez changer les prdicats de la clause where.
retour LesTravauxDirigs, Accueil,
Dernire modification le mars 17, 2009 6:09 .
diter | Dverrouiller la Page | Supprimer la Page |
Historique | Diff | InfosDeLaPage | DebugInfo
4 sur 4
39
08/02/2010 15:58
bdr2010 - Annexe 1
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Annexe 1
Annexe1: Valeurs mesures pendant l'excution d'une requte
Parmi les valeurs mesures, nous considrons uniquement le nombre de consistent gets, sans
prendre en compte les autres valeurs, car consistent gets est reprsentatif du nombre de pages
disque lues (dans un tat froid de la base, lorsque toute les donnes sont sur disque et que le
cache est vide).
Les principales valeurs mesures sont:
Statistics
.----------------------------------------------------------------------------db block gets : Number of times a CURRENT block was requested
consistent gets : Number of times a consistent read was requested for a block.
physical reads : Total number of data blocks read from disk. This number equals the value of
"physical reads direct" plus all reads into buffer cache.
redo size : Total amount of redo generated in bytes.
sorts (disk) : Number of sort operations that required at least one disk write. Sorts that require
I/O to disk are quite resource intensive. Try increasing the size of the initialization parameter
SORT_AREA_SIZE. For more information, see "SORT_AREA_SIZE".
sorts (memory) : Number of sort operations that were performed completely in memory and did
not require any disk writes. You cannot do much better than memory sorts, except maybe no
sorts at all. Sorting is usually caused by selection criteria specifications within table join SQL
operations.
rows processed: result cardinality
retour au TME LesJointures
Dernire modification le fvrier 26, 2004 9:34 .
diter | Dverrouiller la Page | Supprimer la Page |
Historique | Diff | InfosDeLaPage | DebugInfo
1 sur 1
40
08/02/2010 15:59
bdr2010 - Annexe 2
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Annexe 2
Annexe2: Directives d'optimisation
Les directives d'optimisation guident l'optimiseur de requtes pour le choix d'un plan d'excution.
Syntaxe: les directives sont insres dans la requtes, aprs le mot SELECT, entre commentaires
spciaux :
/*+ nom_directive */
Utiliser les directives d'optimisation (hint) suivantes :
/*+ ordered */ : fixe l'ordre de traitement des jointures : l'ordre impos est celui indiqu dans la
clause FROM de la requte.
/*+ index(nom_relation nom_index) */ : pour forcer un accs par index
/*+ no_index(nom_relation nom_index)*/ : pour interdire l'utilisation d'un index
Ne pas confondre le nom de l'index et le nom de l'attribut index. Par exemple, I_J_cnum est le
nom de l'index sur l'attribut cnum de J.
Exemple de directive pour ordonner les jointures
Le plan P1 avec l'ordre (J |><| C) |><| F
select /*+ ordered */ c.nom, f.budget
from J, C, F
where J.cnum = C.cnum and C.cnum = F.cnum
and c.division=1 and J.salaire > 59000
and j.sport = 'sport1';
retour vers LesJointures
Dernire modification le fvrier 26, 2004 9:14 .
diter | Dverrouiller la Page | Supprimer la Page |
Historique | Diff | InfosDeLaPage | DebugInfo
1 sur 1
41
08/02/2010 15:59
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Jointure Rpartie
1 sur 2
Scnario
On dispose de 2 SGBD : site1 et site 2
Donnes: Le site 1 contient les clubs (table C), le site 2 contient les Joueurs (table J)
La couche BDR est implmente sur le site 1.
Installation
crer les tables J,C,F (dj fait lors du TME prcdent)
@base3
supprimer les Joueurs du site 1 (les joueurs sont maintenant sur le site 2)
drop table J;
ajouter un club dans une nouvelle ville. Ce club n'a que 10 joueurs ce qui permettra, par la suite, de
poser une requte de jointure trs slective.
insert into C values( 6000, 2, 'petit club', 'Combourg');
Requtes rparties
Pour chaque requte, rpondre aux questions
42
08/02/2010 15:59
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Proposer d'autres requte pour illustrer les optimisations de requtes rparties vues en cours.
LesTravauxDirigs, Accueil
Dernire modification le mars 13, 2009 12:23 .
diter | Dverrouiller la Page | Supprimer la Page |
Historique | Diff | InfosDeLaPage | DebugInfo
2 sur 2
43
08/02/2010 15:59
Installer lenvironnement logiciel (la procdure dinstallation est dtaille sur la fiche technique, ci aprs) puis
excuter le programme Joueur.
1.1) Etudier le programme Joueur.java. (voir en annexe). Commenter brivement les lignes importantes pour
expliquer chaque tape du programme.
1.2) Sur une feuille ( faire chez soi), reprsenter sous la forme dun graphe, les scnarios d'accs une base de
donne en utilisant les interfaces, classes et les mthodes de JDBC. Le graphe est dfini comme suit :
- un nud (rectangle) reprsente une interface ou une classe.
- un arc orient (flche) reprsente une mthode. Larc est tel que :
- son origine est l'interface dans laquelle la mthode est dfinie,
- sa destination est l'interface du rsultat de la mthode.
Le graphe doit contenir les classes, interfaces et mthodes du package java.sql qui sont utilises dans Joueur.java,
ainsi que les lments suivants : PreparedStatement, ResultSetMedatata, DatabaseMetadata, executeUpdate, int,
String et getMetaData.
44
Requte gnrique
<html>
<head ><title>Rsultat</title></head>
<body>
<h3>La requete est : </h3> select * from Joueur2
<h3>le resultat est : </h3>
<table border="2">
<tr><th>NUJOUEUR</th><th>NOM</th><th>PRENOM</th><th>ANNAISS</th><th>NATIONALITE</th></tr>
<tr><td>1</td><td>MARTINEZ</td><td>Conchita</td><td>1972</td><td>Espagne</td></tr>
<tr><td>2</td><td>NAVRATILOVA</td><td>Martina</td><td>1957</td><td>Etats-Unis</td></tr>
<tr><td>14</td><td>SAMPRAS</td><td>Pete</td><td>1972</td><td>Etats-Unis</td></tr>
</table>
</body>
</html>
4.1) Quel est le rle de linterface DatabaseMetaData et comment obtenir une instance de ce type partir dune
connexion ? Expliquer la mthode getColumns de linterface DatabaseMetaData. Dans un SGBD les relations sont
gnralement organises en hirarchie 2 niveaux (catalogue et schma). Ainsi, une relation appartient un
schma lui-mme appartenant un catalogue. Dans Oracle, l'organisation a un seul niveau : une relation appartient
un schma gal au nom de celui qui a cr la relation, il n'y a pas de niveau catalogue.
4.2) Crer le programme Schema.java qui affiche le nom et le type des attributs dune relation passe en
paramtre.
Exemple dexcution
45
Jointure inter-bases
Soit une deuxime base de donnes (situe sur un autre SGBD diffrent du premier), contenant la relation
SPONSOR (NOM, NATIONALITE)
La deuxime base de donnes est accessible seulement en lecture, par une connexion la base oracle en tant
quutilisateur anonyme avec le mot de passe anonyme.La relation Sponsor contient 100 000 tuples. Soit la
requte R1 :Donner le nom et la nationalit des joueurs avec le nom et la nationalit de leurs sponsors, dans
lordre des noms de joueur.
5.1) Quelle est la dure approximative dune lecture squentielle de la relation Sponsor ? Rpondre en crivant le
programme Generique2.java (obtenu en modifiant Generique.java), puis en utilisant la commande time :
time java Generique2 requete
Veiller omettre l'affichage du rsultat dans le terminal pour viter de mesurer le temps d'affichage au lieu du
temps de lecture des donnes.
5.2) Ecrire R1 en SQL.
5.3) Pourquoi ne peut-on pas excuter cette requte R1 avec une seule connexion au SGBD ?
5.4) On veut obtenir la cardinalit du rsultat de R1 ? Donner en SQL une requte R2 telle :
R2 est une sous-expression de R1, et R2 peut tre excute entirement sur le premier SGBD
la cardinalit de R2 est gale celle de R1, i.e., card(R2) = card(R1)
Excuter R2 et donner la valeur de card(R1).
5.5) Complter le programme Sponsor.java pour traiter R1. Pendant tout le traitement de la requte R1, combien
dinstances de type Connection et Statement sont cres ? Combien de sous-requtes sont excutes ? Combien
de fois la relation Sponsor est-elle lue ? Quels sont les tuples transfrs depuis le SGBD vers lapplication java ?
Exemple dexcution :
java Sponsor
//commande
real 0m3.957s
//commande
user 0m1.530s
5.7) Ecrire le programme SponsorTF.java pour traiter la requte R2 : Donner le nom et la nationalit des joueurs
avec le nom et la nationalit de leurs sponsors, dans lordre des noms de sponsor en utilisant lalgorithme de
jointure par tri fusion. Combien dinstances de type Connection et Statement sont cres pendant le traitement de
la requte ?
5.8) Comparer les temps de rponse de R1 et R2. Mesurer (en pourcentage) lcart entre le temps de rponse de
Sponsor et SponsorTF. Interprter le rsultat. Proposer une solution Sponsor2.java pour amliorer le temps de
rponse de la requte R2.
5.9) Dtailler une solution pour traiter R1 en transfrant les cls (voir cours : semi-jointure)
5.10) (facultatif) Proposer une implmentation pour d'autres algorithmes de jointure (grace join, hybrid hash join,
...).
46
Dans la suite du TME, sauvegarder tous vos programmes dans le rpertoire ~/jdbc.
1.2) Editeur de texte:
Editer les fichiers avec emacs. Activer les options suivantes :
Programme en couleur : Menu Option > Syntax Highlighting
Reprage de la structure du programme : Menu Option > Paren Match Highlighting
1.3) Environnement java
Pour tester la compilation du code source en bytecode, compiler le programme de test Bonjour.java (cela cre le
fichier Bonjour.class)
javac Bonjour.java
Pour tester la machine virtuelle lancer l'excution du fichier Bonjour.class :
java Bonjour
Fichier Joueur.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.sql.*;
import java.io.*;
public class Joueur {
String server = "frelon";
String port = "1521";
String database = "oracle";
String user = "p6lip000";
String password = "p6lip000";
String requete = "select nom, prenom from Joueur";
Connection connexion = null;
47
bdr2010 - JDBC
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
JDBC
1 sur 2
Sance 1
installer l'environnement de travail (voir le poly, tape 1 uniquement)
Commencer l'tape 1 du sujet: rpondre aux questions a) d) dans le fichier rapport.txt
question 1.1 : complter les lignes /* commentaires: */
Question frquente concernant la compilation java
Comment viter les warning du compilateur concernant le jeu de caractres UTF-8 ?
afin de pouvoir compiler des programmes java contenant des caractres accentus, le
jeu de caractres par dfaut doit tre europen (ISO-8859-1) :
export LC_CTYPE="fr_FR" ou export LC_ALL="fr_FR"
vrification du jeu avec la commande : locale charmap
Question 2 : MaxPrime2. Dfinir une requte paramtre :
la requte est une chane de caractres contenant un point d'interrogation ? pour chaque
paramtre
Exemple "select * from Joueur2 where annaiss = ? "
voir l'exemple dans la documentation de l'interface PreparedStatement
Questions frquentes concernant MaxPrime2:
Comment comparer 2 chanes de caractres a et b ?
utiliser la mthode : a.equals(b)
l'oprateur a==b ne compare pas le contenu des chanes de caractres mais leur
identifiant d'objet.
Comment convertir une chane de caractres en un nombre entier ?
int n = Integer.parseInt(chaine);
Questions 3 : Requte gnrique
L'excution du programme GeneriqueHTML doit produire ce
rsultat
Sance 2
48
08/02/2010 16:00
bdr2010 - JDBC
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Finir la question 3
Question 4: Schma d'une relation.
Question 5:
Ajuster l'ULR d'accs la 2eme base
String url2 = "jdbc:oracle:thin:@oracle2.ufr-info-p6.jussieu.fr:1521:ora2"; // base
des sponsors
jointure inter-bases
jointure par boucles imbriques
Sance 3
Finir la question 5
jointure par tri puis fusion. Etendre l'algorithme pour traiter le cas d'une qui-jointure
entre 2 attributs non uniques (i.e. 2 cls trangres).
jointure par transfert de cls (semi-jointure).
(facultatif) implmenter d'autres algorithmes de jointure, tout en utilisant JDBC.
Documentation diverse
Algorithmes de
jointure (anglais)
manuel HTML, un
cours
2 sur 2
49
08/02/2010 16:00
bdr2010 - Tme 2 PC
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
DerniresModifs | ChercherUnePage |
AdministrationDePhpWiki
| PagesSemblables | RtroLiens |
Tme 2 PC
1 sur 2
Documentation
la doc
java et
bdr2010 - Tme 2 PC
http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
dcision d'abandonner alors qu'il n'a pas encore envoy son vote au coordinateur ?
Dans un fichier Exemple2b.java, complter le protocole pour grer la panne d'un participant
aprs s'tre dclar prt (diapo 14).
Le coordinateur rpte sa dcision un participant qui la lui demande.
Panne du coordinateur (diapo 15)
Dans un fichier Exemple2c.java, complter le protocole pour grer la panne du coordinateur
aprs l'tape 1.
Documentation diverse
tutorial simjava
LesTravauxDirigs, LesCours, Accueil
Dernire modification le avril 21, 2009 12:20 .
diter | Dverrouiller la Page | Supprimer la Page |
Historique | Diff | InfosDeLaPage | DebugInfo
2 sur 2
51
08/02/2010 16:00