Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdr:tmejointurerepartie

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdr:tmejointurerepartie [06/03/2018 15:28]
hubert [4) Durée des transferts]
site:enseignement:master:bdr:tmejointurerepartie [20/03/2019 14:05] (Version actuelle)
hubert [3) Requêtes réparties]
Ligne 9: Ligne 9:
 L'​objectif de ce TME est de comprendre l'​évaluation d'une requête de jointure L'​objectif de ce TME est de comprendre l'​évaluation d'une requête de jointure
 entre 2 relations qui sont situées sur 2 sites distincts. entre 2 relations qui sont situées sur 2 sites distincts.
-  * définir ​le schéma global qui offre un accès transparent à des données de plusieurs bases, +  * Définir ​le schéma global qui offre un accès transparent à des données de plusieurs bases, 
-  * formuler ​une requête répartie,​ +  * Formuler ​une requête répartie,​ 
-  * comprendre ​l'​ordre et l'​emplacement des opérations permettant d'​évaluer une requête répartie (quel site traite quelles opérations?​).+  * Comprendre ​l'​ordre et l'​emplacement des opérations permettant d'​évaluer une requête répartie (quel site traite quelles opérations?​).
  
-=== Scénario ===+==== Scénario ​====
 <code bash> <code bash>
 cd <votre repertoire de travail> cd <votre repertoire de travail>
Ligne 26: Ligne 26:
 -- se connecter en remplaçant 1234567 par votre numéro d'​étudiant -- se connecter en remplaçant 1234567 par votre numéro d'​étudiant
 CONNECT E1234567/​E1234567@ora11 ​ CONNECT E1234567/​E1234567@ora11 ​
--- vérifier la connexion ​en affichant le nom du SGBD :+-- vérifier ​que la connexion ​est correcte. Le nom du SGBD qui doit s'​afficher est oracle
 select sys_context('​USERENV',​ '​INSTANCE_NAME'​) from dual;  select sys_context('​USERENV',​ '​INSTANCE_NAME'​) from dual; 
--- doit afficher oracle 
  
 </​code>​ </​code>​
Ligne 36: Ligne 35:
 -- se connecter en remplaçant 1234567 par votre numéro d'​étudiant -- se connecter en remplaçant 1234567 par votre numéro d'​étudiant
 CONNECT E1234567/​E1234567@ora10 CONNECT E1234567/​E1234567@ora10
 +-- vérifier que la connexion est correcte. Le nom du SGBD qui doit s'​afficher est : ora10
 select sys_context('​USERENV',​ '​INSTANCE_NAME'​) from dual;  select sys_context('​USERENV',​ '​INSTANCE_NAME'​) from dual; 
--- doit afficher ora10 
 </​code>​ </​code>​
  
-===Données ===+====Données ​====
   * Le site 1 **ora11** contient les Clubs dans la table **Club**(cnum,​ nom, division, ville)   * Le site 1 **ora11** contient les Clubs dans la table **Club**(cnum,​ nom, division, ville)
    
Ligne 111: Ligne 110:
 */ */
  
-== R1 : Jointure seule avec un transfert volumineux ==+=== R1 : Jointure seule avec un transfert volumineux ​===
  
-Afficher les joueurs ​avec leur club+Afficher les stagiaires ​avec leur club
 <code sql> <code sql>
     connect ... @ora11     connect ... @ora11
Ligne 123: Ligne 122:
 </​code>​ </​code>​
  
-== R2 : Jointure avec sélection ==+=== R2 : Jointure avec sélection ​===
 <code sql> <code sql>
 set linesize 120 set linesize 120
Ligne 137: Ligne 136:
  
  
-== R3 Jointure très sélective ==+=== R3 Jointure très sélective ​===
   * R3a : Jointure très sélective et avec un transfert volumineux   * R3a : Jointure très sélective et avec un transfert volumineux
 <code sql> <code sql>
Ligne 149: Ligne 148:
  
   * R3b : jointure très sélective et avec un transfert faible.   * R3b : jointure très sélective et avec un transfert faible.
- La directive **driving_site** prend en argument le nom de la variable //s// associée à la table Stagiaire stockée sur le site dans lequel oracle doit traiter la jointure. Autrement dit, Oracle doit traiter la jointure sur le site 2 contenant Stagiaire.+ La directive **driving_site** prend en argument le nom de la variable //s// associée à la table //Stagiaire// stockée sur le site dans lequel oracle doit traiter la jointure. Autrement dit, Oracle doit traiter la jointure sur le site 2 contenant Stagiaire.
 <code sql> <code sql>
     EXPLAIN plan FOR     EXPLAIN plan FOR
Ligne 159: Ligne 158:
 </​code>​ </​code>​
  
- ​* ​R4 : jointure et sélection avec index.+===R4 : jointure et sélection avec index===
 Dans le site 2, créer un index sur Stagiaire(cnum). Dans le site 2, créer un index sur Stagiaire(cnum).
-Afficher le plan de R2 (sélection sur le salaire). Vérifier que l'​index Stagiaire(cnum) est utilisé. Expliquer le plan.  
  
-===Proposer d'autres ​requête pour illustrer les optimisations de requêtes réparties vues en cours.=== +<code sql> 
-  * Requete ​avec 2 jointures ​chacun ​sur un site différent+    CONNECT ... @ora10 
 +    create index .... 
 +    @liste 
 +</​code>​ 
 + 
 + 
 +Montrer que l'index Stagiaire(cnum) est utilisé pour **R3** (sélection sur la ville). Quelle partie de la requête ​est posée sur le site 2 ?  Combien de requêtes sont posées sur le site 2 pour obtenir le résultat complet de R3 ? 
 + 
 +Pourquoi l'​index Stagiaire(cnum) n'est pas utilisé pour traiter la requête R2 ? 
 + 
 +/*pour illustrer les optimisations de requêtes réparties vues en cours.*/ 
 +===R5: Proposer une requête ​avec 2 jointures ​entre 3 tables === 
 +La première jointure traitée le site 2, la 2ème jointure ​sur le site 1.
  
 +===R6: Proposer une requete avec 1 jointure entre deux table traitée par semi-jointure===
 +Ajouter sur le site 1 une table Match(licence,​ annee, commentaire)
  
 +  * transférer **le numéro de licence** des joueurs ayant fait un match en 2018 du site 1 vers le site 2. Ne **pas** transférer les commentaires des matchs.
 +  * transférer les joueurs satisfaisant la requête du site 2 vers le site 1.
 +  * finir le calcul de la requête sur le site 1
  
 ===== 4) Durée des transferts ===== ===== 4) Durée des transferts =====
-Chronométrer les transferts en répétant n fois (n=10) l'​exécution d'une requête afin dd'otenir ​des durées significatives.+Chronométrer les transferts en répétant n fois (n=10) l'​exécution d'une requête afin d'obtenir ​des durées significatives ​mesurables.
  
-Pour mesurer principalement les transferts entre les sites et non la durée d'​affichage du résultat, on modifie légèrement les requêtes : le résultat d'une requête est agrégé (par exemple avec un max). Comme cela, le résultat d'une requête sera "​petit",​ il aura un seul nuplet. ​Ainsi, le temps d'​affichage devient négligeable face à la durée de transfert ​entre les sites.+Pour mesurer principalement les transferts ​de données ​entre les sites et non la durée d'​affichage du résultat, on modifie légèrement les requêtes : le résultat d'une requête est agrégé (par exemple avec un max). Ainsi, le résultat d'une requête sera "​petit",​ il aura un seul nuplet. ​En conséquence, le temps d'​affichage devient négligeable face à la durée ​des transferts ​de données ​entre les sites. Le temps total que l'on chronomètre (avec ''​set timing on''​) correspond principalement aux transferts de données.
  
-Comparer les deux exécution suivantes ​: +Comparer les deux exécution suivantes ​a) et b). Laquelle est la plus rapide ? Est elle beaucoup plus rapide ? 
-  * Avec transfert de tous les Stagiaires+  * a) Avec transfert de tous les Stagiaires
  
 <code plsql> <code plsql>
Ligne 193: Ligne 208:
 </​code>​ </​code>​
  
-  * Avec transfert des clubs de la ville 7+  * b) Avec transfert des clubs de la ville7
 <code plsql> <code plsql>
 set timing on set timing on
Ligne 220: Ligne 235:
  
  
-  * Fragmenter les Club par division: ​ première division sur le site 1 (table Club1) et deuxième division sur le site 2 (table Club2). ​+  * Fragmenter les Club par division : placer les clubs de première division sur le site 1 (table Club1) et ceux de deuxième division sur le site 2 (table Club2). ​
   * Définir la **vue** Club réunissant tous les clubs des deux divisions.   * Définir la **vue** Club réunissant tous les clubs des deux divisions.
-  * Est-ce que les 2 fragments sont accédés pour une requête affichant seulement les clubs de 1ère division ?+  * Est-ce que les 2 fragments sont accédés pour une requête affichant seulement les clubs de 1ère division ​? Pourquoi ​?
 <code sql> <code sql>
 select * select *
site/enseignement/master/bdr/tmejointurerepartie.1520346534.txt.gz · Dernière modification: 06/03/2018 15:28 par hubert