A Poly BDR 2010
A Poly BDR 2010
A Poly BDR 2010
Master d'informatique - M1
Saison fvrier - juin 2010
TD : poly n 1
Stphane GANCARSKI
Hubert NAACKE
URL : http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/
1 Indexation 2
Extraits de partiels 2002 4
2003 5
2004 6
2 Optimisation de requtes 9
Extraits de partiels 2002 11
2003 12
2004 13
Partiel 2005 14
3 TME
Index 18
Jointure, 21
Annexe1 et 2 25
Jointure rpartie 27
JDBC 29
2PC 35
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 meme p` ere. En
considerant uniquement la redistribution a` gauche, montrer letat de larbre resultant de la sup-
pression 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 ?
3
Universit Pierre et Marie Curie - Paris 6
4
Universit Pierre et Marie Curie - Paris 6
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
Universit Pierre et Marie Curie - Paris 6
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.
Index complter : Cl supprimer : ...
000 64 44 A
001
2
profondeur locale
010
9 25 5 B
011
100
101
110
111
6
Universit Pierre et Marie Curie - Paris 6
Question 3. Soit l'index suivant dans l'tat initial E1.
Donnez une liste de trois valeurs e1, e2, e3, dentres dindex, telle que :
- leur insertion (dans l'ordre e1, e2, e3) dans lindex ci-dessous provoque 3 clatements,
- puis leur suppression dans l'ordre inverse (e3, e2, e1) redonne l'index initial E1.
Reprsenter l'tat E2 de lindex aprs insertion de ces trois valeurs.
2 2
00 64 32 8 16 A
01
2
10 B
9 25 41 73
11
2
10 C
11 19 35 3 D
Question 4. On veut modifier les valeurs initiales de lindex E1 de telle sorte que :
- l'insertion dans lindex (dans l'ordre e1, e2, e3) des entres dtermines la question prcdente,
provoque 3 clatements,
- la suppression de ces trois entres dans lordre inverse de leur insertion (supprimer dabord e3,
puis e2, puis e1) ne provoque pas de suppression de paquet.
Quel est le nombre minimum de valeurs d'entres modifier ?
Reprsenter l'index E1' dans l'tat initial modifi. Souligner les valeurs modifies. Si vous avez le choix
parmi plusieurs entres modifier, modifier l'entre la plus petite.
7
Universit Pierre et Marie Curie - Paris 6
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.
20 n1
10 n2
6 8 n3 13 20 n4
1 2 3 8 9 6 7 10 11 13 14 20 21
n5 n6 n7 n8 n9 n10 30 40 n11
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.
8
Universit Pierre et Marie Curie Paris 6 page 13
Master d'informatique - BDR - 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 ?
9
Universit Pierre et Marie Curie Paris 6 page 14
Master d'informatique - BDR - v. :08/02/2010
1.Dterminer un arbre d'oprateurs de l'algbre relationnel qui reflte l'ordre des oprations qu'un optimiseur de
requte peut choisir. Donner la taille lespace de recherche.
2. Pour rduire l'espace de recherche explor pendant l'optimisation, on considre seulement les arbres de
jointure qui n'ont pas de produit cartsien et qui sont linaires gauche. Donner la liste de tous les arbres de
jointure construits. Expliquer comment vous obtenez cette liste.
3. Les informations suivantes sont extraites du catalogue du SGBD :Les attributs Joueur.cnum, Joueur.salaire,
Club.division, Club.cnum et Finance.cnum sont index par un arbre B+ secondaire. Le salaire d'un joueur est
compris entre 10.000 et 60.000 EUR. Les joueurs peuvent pratiquer 200 sports diffrents. Un club est en
division 1 ou 2. La BD contient au total 50000 joueurs et 5000 club. Il y a un tuple d'information financire par
club. Le seul algorithme de jointure implment dans le SGBD est la jointure par boucles imbriques.
a) Pour chaque relation de la base de donnes (Joueur, Club et Finance) estimer le nombre de tuples
qui sont slectionns aprs avoir trait les prdicats de slection et avant de traiter les jointures.
b) D'aprs la rponse la question prcdente, quel est l'arbre de jointure de cot minimum que
l'optimiseur construit ?
10
Universit Pierre et Marie Curie - Paris 6 - UFR 922 - Matrise d'informatique
11
Universit Pierre et Marie Curie - Paris 6
Les relations R et U ont 1000 n-uplets alors que S et T ont 100 n-uplets.Il y a 100 valeurs diffrentes pour
tous les attributs de toutes les relations except pour S.c et T.c qui ont seulement 10 valeurs diffrentes.
On note ces informations de la manire suivante :
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
1.1) Parmi R, S, T, U, quelles relations peuvent tre la place p1 ?
1.2) Si R est la place p1, quelles relations peuvent tre la place p2 ?
1.3) Combien existent-ils darbres linaires gauches quivalents pour la jointure naturelle de R, S, T, U ?
1.4) Donner un des arbres linaires gauches de plus faible cot ? Donner son cot.
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
Universit Pierre et Marie Curie - Paris 6
cot( pred (R) ) = card( pred (R)) si l'attribut a est index par un index non plaant,
cot( pred (R) ) = page(R) * card( pred (R)) / card(R) si l'attribut a est index par un index plaant,
13
1
BDR
EXTRAIT Partiel du 5 avril 2005
Exercice 2 : Optimisation de requtes 10 pts
Soit le schma suivant :
Emp (ne, salaire, age, ns) -- un employ est identifi par son numro ne
Service (ns, np, budget, statut) -- ns fait rfrence un numro de service.
Projet (np, code, libell) -- un projet est identifi par son numro np
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)) si l'attribut a est index par un index non plaant,
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
2
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.
On propose 9 formules de cot :
C6: cot( R pred (S) ) = page(R) + card(R) x arr( page(S) / D(S, c))
Question 2
1) Parmi C1 C9, quelles sont les formules symtriques (i.e., pour lesquelles R et S ont le mme rle)
2) Parmi J1 J9, quels sont les algorithmes symtriques (i.e., pour lesquels R et S ont le mme rle)
3) Associer chaque algorithme de jointure avec la formule la plus approprie. Expliquer vos choix en une
phrase. Rpondre en compltant le tableau. Indication :
Cot Explication
15
3
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( A = valeur) = 1 / D(R, A)
SF( A > valeur) = (max(A) valeur) / (max(A) min(A))
SF( A < valeur) = (valeur min(A)) / (max(A) min(A))
sinon card ( R A=B S ) = SFj *card(S)*card(R) o SFj = 1 / max( D(R, A), D(S, B) )
On suppose une rpartition uniforme des salaires (par tranche de 5000 dans lintervalle [10000, 105000])
et des budgets (dans lintervalle [10000, 30000]). Il y a un index plaant sur lattribut salaire de Emp, sur
lattribut ns de Service et sur lattribut np de Projet.
On considre le plan dexcution P1 suivant :
16
4
E.ne,S.sn,P.np
2me jointure
np
1re jointure
Projet
ns
Emp Service
1) Estimez le nombre de n-uplets rsultant de chacune des oprations.
4) On suppose maintenant que lindex sur lattribut np de Projet est non plaant. Calculez le cot du plan
optimal sous cette hypothse.
5) Mme question en supposant que les index sur salaire et sur l'attribut ns de Service sont non-plaants.
Justifiez votre rponse.
17
bdr2010 - Les Index http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Les Index
TME : Les Index
L'objectif de ce TP est de mettre en vidence l'utilisation des index pour amliorer le temps de
rponse des requtes. Lire l'annexe PlanRequete
Ouvrir une fentre de terminal (xterm), pour excuter les commandes suivantes :
commande 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
SQL> @annuaire excute le script annuaire.sql depuis l'invite SQL
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.
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) ?
18
1 sur 3 08/02/2010 15:57
bdr2010 - Les Index 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 :
5.1) Afin de visualiser les informations dtailles sur le traitement des requtes :
Pour chaque requte, afficher les index utiliss par le moteur de requte.
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;)
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 :
19
2 sur 3 08/02/2010 15:57
bdr2010 - Les Index http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
On demande maintenant l'optimiseur de requtes d'utiliser un modle de cot (et non pas
des rgles heuristiques) pour choisir un plan d'excution efficace. La session est modifies en
consquence :
alter session set optimizer_mode = CHOOSE;
Pour chaque requte, afficher les index utiliss par le moteur de requtes. Expliquer pourquoi les
index utiliss ne sont plus les mmes qu'en 5.1)
6.2.2) Est ce l'optimiseur estime avec prcision la cardinalit des requtes ? Si non, expliquer
pourquoi.
6.3) On veut dterminer partir de quel facteur de slectivit, l'optimiseur choisit la lecture
squentielle plutt que l'accs par index. On appelle S le seuil du facteur de slectivit au del
duquel la lecture squentielle est utilise de prfrence l'index. Combien vaut S ?
6.4) Quelles sont les requtes pour lesquelles le plan d'excution construit par l'optimiseur n'est pas
optimal, donner un exemple.
7) (facultatif) Proposer une mthode pour mesurer la dgradation de performance due l'index lors
de l'insertion de donnes dans l'annuaire.
20
3 sur 3 08/02/2010 15:57
bdr2010 - Les Jointures http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Les Jointures
TME Optimisation des requtes avec jointures
L'objectif de ce TME est de trouver le plan d'excution optimal pour traiter une requte contenant
des jointures. Ce TME met en pratique les notions du cours sur l'optimisation de requtes: plan
d'excution, espace de recherche, ordonnancement des jointures, modle de cot, algorithme de
jointure.
Sujet
Documentation
Prparation
construire la BD de l'exercice 3
@base3
ajouter les index
@index3
activer la visualisation des plans d'excution
set autotrace trace explain stat
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
21
1 sur 4 08/02/2010 15:58
bdr2010 - Les Jointures http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Autre exemple : l' accs la relation C (les clubs) par un index sur l'attribut division :
3 TABLE ACCESS (BY INDEX ROWID) OF 'C'
4 INDEX (RANGE SCAN) OF 'I_C_DIVISION' (NON-UNIQUE)
nom algorithme
nested loops jointure par boucles imbriques
merge join jointure par fusion
hash join jointure avec hachage temporaire des tuples
sort (join) tri prliminaire avant jointure par fusion
table access full lecture squentielle d'une relation
table access by rowid lecture non squentielle d'une relation (un accs par tuple)
index (range scan) 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)
1.1) Reprsenter l'arbre du plan d'excution P choisi par dfaut par l'optimiseur pour traiter la
requte R?
2.1) Quelles relations de la BD peuvent tre jointes avec J par equi-jointure ? Mme question pour C
et F. Combien y a-t-il d'ordres de jointure diffrents pour traiter la requte R ?
2.2) En utilisant la directive /*+ use_nl(c,j,f) ordered */, construire un plan d'excution pour chaque
ordre de jointure. L'ordre est celui de la clause FROM (pas celui de la clause where !). Pour chaque
plan, prciser clairement les index et les algorithmes de jointure utiliss, et mesurer le cot du plan.
Lire l'Annexe2 expliquant la directive ordered.
2.3) Quels sont les 3 plans de plus faible cot ? Comparer leur cot avec celui du plan P choisi par
l'optimiseur ?
22
2 sur 4 08/02/2010 15:58
bdr2010 - Les Jointures 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.
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)
5.1) Ajouter dans le dictionnaire du SGBD les statistiques sur J, C et F et les index associs.
5.2) Lorsque le dictionnaire du SGBD contient des statistiques sur les donnes lues par la requte,
l'optimiseur d'Oracle peut estimer plus prcisment le cot des oprations d'un plan d'excution.
Cela lui permet de dterminer si un accs par index est intressant ou non. Modifier le prdicat de
slection du salaire dans la requte R (incrmenter de 100 en 100, la valeur 59000) jusqu' ce que
le SGBD utilise l'index. On note R' la requte obtenue.
Le plan choisi par l'optimiseur pour traiter R est-il le mme avec et sans statistiques sur J,C,F ?
Expliquer pourquoi.
Dcrmenter de 1000 en 1000, la valeur 59000, jusqu' ce que le SGBD n'utilise plus l'index. On
note R'' la requte obtenue.
5.4) Lorsque l'optimiseur ne dispose pas de statistiques, il tente tente d'estimer la taille des rsultats
intermdiaires partir d'un chantillon de donnes (technique appelle dynamic sampling).
Dsactiver le dynamic sampling en ajoutant la directive suivante.
select /*+ use_nl(c,j,f) dynamic_sampling(0) */ c.nom, f.budget
23
3 sur 4 08/02/2010 15:58
bdr2010 - Les Jointures 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.
24
4 sur 4 08/02/2010 15:58
bdr2010 - Annexe 1 http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
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).
Statistics
.-----------------------------------------------------------------------------
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.
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.
25
1 sur 1 08/02/2010 15:59
bdr2010 - Annexe 2 http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Annexe 2
Syntaxe: les directives sont insres dans la requtes, aprs le mot SELECT, entre commentaires
spciaux :
/*+ nom_directive */
/*+ 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.
26
1 sur 1 08/02/2010 15:59
bdr2010 - Jointure Rpartie http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Jointure Rpartie
dfinir le schma global qui offre un accs transparent des donnes de plusieurs bases,
formuler une requte rpartie,
comprendre l'ordre et l'emplacement des oprations permettant d'valuer une requte rpartie
(quel site traite quelles oprations?).
Scnario
Installation
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
27
1 sur 2 08/02/2010 15:59
bdr2010 - Jointure Rpartie http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
select *
from J, C
where j.cnum = c.cnum
and salaire > 59000
Proposer d'autres requte pour illustrer les optimisations de requtes rparties vues en cours.
LesTravauxDirigs, Accueil
28
2 sur 2 08/02/2010 15:59
Universit Pierre et Marie Curie - Paris 6
Master d'informatique - BDR
JDBC
Introduction:
L'objectif de ce TD/TME est de raliser une application de type web qui accde une base de donnes. Cette
application repose sur l'architecture client-serveur 3 couches (cf. cours sur l'architecture C/S 3-tiers) : le serveur
de donnes, le serveur web et le navigateur client. Nous construisons la passerelle d'accs au serveur de
donnes avec JDBC.
Le serveur de donnes (Oracle sur la machine oracle), est un SGDB relationnel supportant l'interface JDBC. Il
contient la base de donnes tennis dont le schma est:
JOUEUR2 (NUJOUEUR, NOM, PRENOM, ANNAISS, NATIONALITE)
GAIN2 (NUJOUEUR, LIEUTOURNOI, ANNEE, PRIME, SPONSOR)
RENCONTRE2 (NUGAGNANT, NUPERDANT, LIEUTOURNOI, ANNEE, SCORE)
Les attributs NuGagnant, NuPerdant et NuJoueur sont dfinis sur le mme domaine. Les cls des relations sont
soulignes.
29
Universit Pierre et Marie Curie - Paris 6
Master d'informatique - BDR
2.1) Excuter le programme MaxPrime (saisir une anne, par ex. 1992). Editer le fichier MaxPrime.java. Complter
len-tte avec vos nom et prnom. Complter tous les commentaires pour expliquer ce que fait le programme.
2.2) Copier et modifier le programme prcdent pour obtenir le programme MaxPrime2.java qui excute la mme
requte en boucle, en demandant chaque itration une nouvelle valeur lutilisateur. Le programme MaxPrime2
se termine lorsque la saisie de lutilisateur est vide. Pour amliorer les performances du programme, deux
conditions sont requises :
- la connexion vers le SGBD est ouverte une seule fois pendant toute la dure du programme (i.e., rutiliser le
mme objet de type Connection chaque itration).
- le SGBD analyse la requte une seule fois pendant toute la dure du programme (i.e., utiliser linterface
PreparedStatement pour prparer une requte paramtre ; utiliser la mthode setInt pour affecter une valeur un
paramtre de la requte).
Remarque : ne pas oublier dappeler le constructeur de MaxPrime2. (ie., remplacer new MaxPrime() par new
MaxPrime2().
3 Requte gnrique
3.1) Quel est le rle de linterface ResultSetMetaData et de sa mthode getColumnCount ?
3.2) Complter le programme Generique.java pour traiter une requte SQL quelconque passe en paramtre, et
afficher les valeurs des tuples du rsultat sous la forme val1 val2 valn (un tuple par ligne).
Tester lexcution avec la requte donnant tous les Joueurs ns en 1972 :
java Generique select * from Joueur2 where annaiss = 1972
3.3) Complter le programme pour afficher en en-tte le nom des attributs du rsultat.
Exemple dexcution (ne pas chercher tabuler le rsultat)
NUJOUEUR NOM PRENOM ANNAISS NATIONALITE
-----------------------------------------------------------
1 MARTINEZ Conchita 1972 Espagne
14 SAMPRAS Pete 1972 Etats-Unis
3.4) Ecrire le programme GeneriqueXHTML.java qui affiche le rsultat dune requte quelconque dans un tableau
format en XHTML. Tester lexcution en stockant le rsultat dans un fichier :
java GeneriqueXHTML select * from Joueur2 > resultat.html
Exemple de rsultat :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<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>
Visualiser graphiquement le rsultat dans un navigateur avec la commande :
netscape resultat.html (ou mozilla resultat.html)
30
Universit Pierre et Marie Curie - Paris 6
Master d'informatique - BDR
5 Jointure inter-bases
Soit une deuxime base de donnes (situe sur un autre SGBD diffrent du premier), contenant la relation
SPONSOR (NOM, NATIONALITE) // nationalit des sponsors
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 // mesure le temps de rponse de la requte
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
CONNORS, Etats-Unis, Dunlop, Ecosse
CONNORS, Etats-Unis, Lacoste, France
EDBERG, Suede, Dunlop, Ecosse
SAMPRAS, Etats-Unis, Reebok, Angleterre
WILANDER, Suede, Dunlop, Ecosse
WILANDER, Suede, Kennex, USA
5.6) Mesurer le temps moyen dexcution du programme avec la commande time :
time java Sponsor //commande
real 0m3.957s user 0m1.530s // affiche le temps de rponse
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,
...).
31
Universit Pierre et Marie Curie - Paris 6
Master d'informatique - BDR
32
bdr2010 - JDBC http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
JDBC
lire le sujet (ou voir poly). Seulement la partie JDBC (pas JSP)
lire les API (choisir le package java.sql)
installer les fichiers : tar zxvf $BD_TOOL/jdbc-etu.tgz
ceux qui utilisent Eclipse doivent rfrencer le jar /Infos/bd/client10/ojdbc14.jar dans leur
projet.
Sance 1
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
Sance 2
33
1 sur 2 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
Liens externes : un cours HTML (universit de Nice), un autre manuel HTML, un cours
java, Java 1.5 API, ...
34
2 sur 2 08/02/2010 16:00
bdr2010 - Tme 2 PC http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/bdr2010/ind...
Tme 2 PC
cp Exemple1.java ExempleNN.java
cp exemple1.html exempleNN.html
puis diter les nouveaux fichiers pour remplacer le nom de la classe Exemple1 par ExempleNN
Veiller recompiler votre exemple avant chaque excution car les noms de classes Participant et
Coordinateur existent dans plusieurs exercices.
Documentation
la doc java et simjava (voir les classes Sim_entity et Sim_event du package eduni.simjava)
Dans un fichier Exemple2a.java, complter le protocole pour grer la panne d'un participant
avant de s'tre dclar prt. Suivre le diagramme de la diapo 13.
Le coordinateur dcide d'abandonner s'il n'a pas reu tous les votes dans un dlai de
300 units de temps.
Est-ce que le coordinateur attend que les participants en panne aient repris, avant de
rpondre l'application ?
Que se passe-t-il si un participant qui n'est pas en panne mais trop lent, reoit la
35
1 sur 2 08/02/2010 16:00
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.
Rponse anticipe
Dans un fichier Exemple5.java, modifier le protocole pour dcider d'une validation ds que la
majorit des participants a vot pour une validation. Dans ce cas, que rpond le coordinateur
aux participants minoritaires qui ont vot pour l'abandon ?
Documentation diverse
tutorial simjava
36
2 sur 2 08/02/2010 16:00