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édentesRévision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdr:tmejointurerepartie [08/03/2018 12:31] – [TME Jointure répartie] hubertsite:enseignement:master:bdr:tmejointurerepartie [20/03/2019 14:05] (Version actuelle) – [3) Requêtes réparties] hubert
Ligne 13: Ligne 13:
   * 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 que la connexion est correcte en affichant le nom du SGBD. Cela doit afficher : oracle+-- 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; 
  
Ligne 35: 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 en affichant le nom du SGBD. Cela doit afficher : 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; 
 </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 112: Ligne 112:
 === 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 148: 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 160: Ligne 160:
 ===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. + 
 +<code sql> 
 +    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.*/ /*pour illustrer les optimisations de requêtes réparties vues en cours.*/
 ===R5: Proposer une requête avec 2 jointures entre 3 tables === ===R5: Proposer une requête avec 2 jointures entre 3 tables ===
-La première jointure traitée le site 2, la 2eme jointure sur le site 1.+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=== ===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) 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 match +  * 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+  * 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   * 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 d'obtenir des durées significatives mesurables. 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 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.+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 a) et b). Laquelle est la plus rapide ? Est elle beaucoup plus rapide ? Comparer les deux exécution suivantes a) et b). Laquelle est la plus rapide ? Est elle beaucoup plus rapide ?
site/enseignement/master/bdr/tmejointurerepartie.1520508702.txt.gz · Dernière modification : de hubert