Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
site:enseignement:master:bdr:tmejointurerepartie [08/03/2018 12:31] hubert [TME Jointure répartie] |
site:enseignement:master:bdr:tmejointurerepartie [15/03/2019 08:41] 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 180: | Ligne 180: | ||
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 ? |