TP Bases de données réparties



Documents pareils
ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Le langage SQL Rappels

Les bases de données

Chapitre Introduction : Notion de Bases de données. 2. Définition : BD Répartie. 3. Architecture des SGBD. 4. Conception des bases réparties

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Bases de Données relationnelles et leurs systèmes de Gestion

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Bases de données avancées Introduction

Évaluation et optimisation de requêtes

1 Modélisation d une base de données pour une société de bourse

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

INTRODUCTION AU DATA MINING

Notes de cours : bases de données distribuées et repliquées

Optimisations des SGBDR. Étude de cas : MySQL

Le Langage SQL version Oracle

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

BD réparties. Bases de Données Réparties. SGBD réparti. Paramètres à considérer

Installation d'un serveur FTP géré par une base de données MySQL

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Module BDR Master d Informatique (SAR)

SQL Server et Active Directory

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

ORACLE TUNING PACK 11G

1 Introduction et installation

Optimisation SQL. Quelques règles de bases

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Bases de Données. Plan

Chapitre 10. Architectures des systèmes de gestion de bases de données

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Dossier I Découverte de Base d Open Office

Encryptions, compression et partitionnement des données

Thème : Gestion commerciale

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Implémentation des SGBD

Java DataBaseConnectivity

PROJET 1 : BASE DE DONNÉES REPARTIES

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Du 10 Fév. au 14 Mars 2014

Compte-rendu de projet de Système de gestion de base de données

CONCEPTION Support de cours n 3 DE BASES DE DONNEES

Systèmes d informations nouvelles générations. Répartition, Parallèlisation, hétérogénéité dans les SGBD. Exemple d application d un futur proche

//////////////////////////////////////////////////////////////////// Administration bases de données

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Langage SQL : créer et interroger une base

TP Contraintes - Triggers

CREATION WEB DYNAMIQUE

Utiliser Access ou Excel pour gérer vos données

CHAPITRE 1 ARCHITECTURE

Structure fonctionnelle d un SGBD

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Les bases de l optimisation SQL avec DB2 for i

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Bases de données relationnelles

Gestion des utilisateurs et de leurs droits

Session S12 Les bases de l optimisation SQL avec DB2 for i

Introduction aux Bases de Données Relationnelles Conclusion - 1

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Test de HSQLDB et Comparatif avec Sqlite

Cours Base de données relationnelles. M. Boughanem, IUP STRI

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Java et les bases de données

Sauvegarde et Restauration d un environnement SAS

1. Introduction. Bases de données Réparties, Fédérées et Réplication. Plan. Bibliographie du cours

MODE OPERATOIRE OPENOFFICE BASE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Présentation du module Base de données spatio-temporelles

Gestion de base de données

BTS/CGO P10 SYSTEME INFORMATION Année

Information utiles. webpage : Google+ : digiusto/

Oracle 11g Optimisez vos bases de données en production (ressources matérielles, stockage, mémoire, requêtes)

Cours Bases de données 2ème année IUT

1. Base de données SQLite

Bases de données réparties: Fragmentation et allocation

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours Bases de données

PHP 5. La base de données MySql. A. Belaïd 1

Cours: Les Jointures 1

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

Comment booster vos applications SAP Hana avec SQLSCRIPT

Bases de données cours 1

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Partie 0 : Gestion des tablespace et des utilisateurs... 3

I. MySQL : Serveur et SGBD

INTRODUCTION : Données structurées et accès simplifié

Plan 1/9/2013. Génération et exploitation de données. CEP et applications. Flux de données et notifications. Traitement des flux Implémentation

SQL Historique

Transcription:

page 1 TP Bases de données réparties requêtes réparties Version corrigée Auteur : Hubert Naacke, révision 5 mars 2003 Mots-clés: bases de données réparties, fragmentation, schéma de placement, lien, jointure inter-site, JDBC, plan d exécution, performance. Configuration de l environnement de travail Installer sur votre compte l archive tpbdr.tar : ouvrir une fenêtre shell, puis saisir les commandes : cd cp /infres/may/testbd/bdtest/tpbdr/tpbdr.tar. // copier l archive tar xvf tpbdr.tar // extraire les fichiers de l archive cd tpbdr // travailler dans le répertoire tpbdr source oracle.shenv // configuration pour utiliser Oracle sqlplus bdaxx/bda@chop1 // client Oracle (choisir un user bdaxx dans {bda02 à bda36} @creation-plan-table // création de la table pour visualiser les plans d exécution // activer le mode de visualisation du plan d'exécution des requêtes Editer un fichier texte exemple.sql qui contiendra les ordres SQL que vous écrirez : xemacs exemple.sql saisir les réponses du TP, puis sauvegarder Remarque: les lignes de commentaires commencent par deux tirets : -- ceci est un commentaire dans un fichier SQL Puis exécuter ensuite les ordres SQL du fichier exemple.sql dans la fenêtre du client Oracle (Sql*Plus) : SQL> @exemple // ne pas saisir le suffixe du fichier (.sql) Introduction Le schéma relationnel de l application est : Producteurs(np, region, ) Recoltes(np, nv, qte) Achat(nb, nv, date, lieu) Buveurs(nb, nomb, prenomb, type) BuveursBig a les mêmes attributs que Buveurs, mais est beaucoup plus volumineuse (200 000 tuples). Le domaine de l attribut type d un buveur est { rare, petit, moyen, gros } Les données de l application sont réparties sur les bases de données suivantes : Site nom du service utilisateur mot de passe nom de la BD (SID) S1 chop1 bda02 à bda36 bda cours S2 chop2.enst.fr bda01 bda coursv Pour faciliter la mise en œuvre du TP, certaines tables sont répliquées sur les 2 sites, mais Oracle n a pas connaissance de la réplication pendant l optimisation des requêtes Le schéma global (schéma de placement) sera construit sur le site S1. Exercice 1 : Placement des relations 1.1) Exécution de requête répartie : transfert de requête / transfert de données Donner les ordres SQL pour créer dans S1 le schéma de placement suivant : S1 contient Producteurs et Recoltes S2 contient Achats et Buveurs Données locales : Producteurs et Recoltes existent déjà sur S1. Données distantes : créer un lien S1 S2 (voir le fichier ls2.sql) create database link coursv

page 2 connect to bda01 identified by bda using 'chop2.enst.fr'; créer dans S1 des synonymes S2Achats et S2Buveurs. create synonym S2Buveurs for buveurs@coursv; create synonym S2Achats for achats@coursv; Traiter sur S1 la requête R0 :Quels sont les buveurs qui ont fait des achats? Mesurer le temps d exécution de la requête (voir le fichier r0a.sql). set timing on select * from S2Achats a, S2Buveurs b where a.nb = b.nb Analyser le plan d exécution : set timing off select * from S2Achats a, S2Buveurs b OPERATIONS OPTIONS OBJECTS -------------------------------- -------------------- -------------------- MERGE JOIN SORT JOIN TABLE ACCESS..FULL BUVEURS COURSV.WORLD SORT JOIN TABLE ACCESS FULL ACHATS COURSV.WORLD La tabulation (espace en début de ligne) indique l'arborescence des opérateurs. merge jointure par fusion sort table access full Buveurs sort table access full Achats Nom des opérateurs : merge-join = jointure par fusion sort join = tri préliminaire (avant d'effectuer une jointure par fusion) table access full nom_relation nom_bd = lecture séquentielle de tous les tuples de la relation nom_relation sur la base nom_bd. Plan = Jointure-fusion( tri(lecture-séqu(buveurs)), tri(lecture-séqu(achat)) ) Le nom de la base de données est COURSV, la requête est exécutée entièrement sur la BD coursv du site 2. tri lect. séquentielle Buveurs tri lect. séquentielle Achats Quelles sont les opérations traitées sur S2 et S1? Quelles sont les données transmises entre S1 et S2? sur S2 : T1= (Achat Buveurs) puis transfert de T1 de S2 vers S1 puis résultat sur S1 Oracle détecte que les données sont sur le même site et transmet la requête sur le site S2. Seul le résultat de la requête est transféré de S2 vers S1. Cette solution est plus performante que la solution naïve vue en cours : envoyer toutes les données sur le site où l utilisateur demande la requête (site S1) pour y traiter la requête. Remarque : L algorithme de jointure locale utilisé dépend de la présence d un index sur l attribut de jointure :

page 3 - un index : jointure par boucles + index : (index-nested-loop) (voir le fichier r0.sql) - pas d index : jointure par tri fusion (sort + merge join) : (voir le fichier r0_noindex.sql) 1.2) Exécution de requête avec jointure inter-site Modifier le schéma de placement pour que la relation Achat soit locale sur S1 : Sur S1: Producteurs, Recoltes, Achats Sur S2 : S2Buveurs Mesurer le temps d exécution de la requête R1 : Donner le nombre de buveurs qui ont fait des achats? (voir le fichier r1a.sql). set timing on select count(*) from Achats a, S2Buveurs b Analyser le plan d exécution : set timing off select * from Achats a, S2Buveurs b Quelles sont les opérations traitées sur S2 et S1? Quelles sont les données transmises entre S1 et S2? sur S2 : T1 = Lecture séquentielle de Buveurs S2 -> S1 : T1 sur S1 : Achat T1 Tous les tuples de Buveurs sont transmis de S2 à S1 L objectif est de mesurer le coût du transfert des données entre deux sites en étudiant une requête de jointure inter-site avec une relation très volumineuse (cardinalité élevée). Modifier le schéma de placement : - les achats sont sur S1 - les buveurs sont dans la relation BuveursBig sur S2.Cette relation contient 200.000 buveurs. Données distantes : créer dans S1 le synonyme S2BuveursBig. create synonym S2BuveursBig for BuveursBig@coursv; Analyser la requête R2 : Donner le nombre de buveurs dans BuveurBig qui ont fait des achats? (voir le fichier r1.sql). set timing on select * from Achats a, S2BuveursBig b Comparer les temps d exécution de R1 et R2 : Quelle est l origine de la baisse de performance entre R2 et R1? Le temps prépondérant est le transfert des tuples de la relation BuveursBig depuis S2 vers S1. Proposer une solution pour améliorer le temps de réponse de R2. Objectif : réduire le volume des données transférées entre les sites S1 et S2. Exigence : la requête est posée sur S1 donc le résultat de la requête doit être sur S1. On constate que volume(achat) + volume(résultat de la requête) < volume(buveursbig) Donc il est avantageux de transférer Achat de S1 vers S2 pour traiter la jointure sur S2 puis de transférer le résultat de la requête sur S1. S1 doit transmettre à S2 une requête inter-sites pour traiter la jointure sur le site S2 qui contient BuveursBig (la plus grosse relation). Le scénario à construire est : L'utilisateur se connecte à S1 et pose la requête globale RG1 Pour traiter RG1, S1 se connecte à S2 et pose la requête T2 Pour traiter T2, S2 se connecte à S1 et pose la requête T1 Exécution du scénario : Sur S1: T1 = select * from Achats, puis transfert vers S2 Sur S2: T2 = T1 BuveursBig, puis transfert vers S1

page 4 Sur S1: résultat Mise en œuvre du scénario : Dans S2 : créer un lien S2 S1 // un lien n est pas bi-directionnel créer un synonyme S1Achats représentant les Achats de S1 Dans S1 : créer un synonyme S2S1Achats représentant le synonyme S1Achats de S2 traiter la requête : select count(*) from S1S2Achats a, S2BuveursBig b where a.nb = b.nb Le plan d exécution déterminé par l optimiseur d Oracle est : Depuis S1 : transmettre à S2 la requête de jointure inter-site entre S1Achats et BuveursBig Sur S2 : récupérer les Achats de S1 vers S2 traiter la jointure renvoyer le résultat à S1 Exercice 2 : Requêtes inter-site avec JDBC L objectif est d utiliser JDBC pour traiter la requête R2 plus rapidement. Le plan d exécution optimal est : lecture séquentielle de Achats : pour chaque tuple t de Achat : accéder à la relation BuveursBig de S2 en utilisant l index sur l attribut nb (attribut de jointure).la requête d accès à S2 est : select nb from BuveurBig where nb = t.nb transférer le résultat sur S1. Configurer l environnement java : cd jdbc source config-jdbc // configuration de l environnement pour utiliser le pilote jdbc Implémentation du plan : voir le fichier AccesInterbase.java xemacs AccesInterbase.java M-x font-lock-mode // fichier java avec couleurs syntaxiques Quelle est le gain de performance par rapport au traitement de la même requête avec Oracle (cf. exercice 1)? javac AccesInterbase.java // compilation du programme java time java AccesInterbase // exécution + chronométrage Modifier le fichier AccesInterbase.java pour remplacer la relation BuveursBig par une relation identique mais qui n a pas d index sur l attribut nb (relation BuveursBig_noindex). Comparer le temps de réponse avec la solution précédente : quel est le gain de performance apporté par l index? Proposer un algorithme pour traiter efficacement la requête R3 : Quels sont tous les achats des buveurs (de BuveursBig) dont de numéro de buveur est supérieur à 100? Traiter la sélection (nb>100) d abord sur Achat. Le résultat étant vide, il est inutile d accéder à BuveursBig. Retourner directement le résultat vide. Comparer les temps d exécution de R3 avec Oracle et avec JDBC. Exercice 3 : Fragmentation horizontale Définir sur S1 le schéma de fragmentation suivant : Tous les buveurs de la relation BuveurBig sont fragmentés horizontalement en deux fragments selon le type du buveur : - le fragment BuvRare contient les buveurs dont le type est rare, - le fragment BuvAutre contient les autres buveurs. L allocation des fragments est la suivante : sur S1 : le fragment BuvAutre sur S2 : le fragment BuvRare

page 5 Quel est l ordre SQL pour créer le fragment BuvAutre sur S1? (voir le fichier f1.sql) copy from bda01/bda@chop2 create BuvAutre using ( select * from BuveursBig where type <> rare); commit; Le fragment BuvRare est déjà créé sur S2. Définir sur S1 la vue VueBuveurs qui représente l union des fragments BuvRare et BuvAutre. create view VueBuveurs as select * from BuvAutre union select * from BuvRare@coursv; Soit la requête RV1 accédant à la vue des buveurs : Donner le nombre de gros buveurs. Analyser le plan d exécution (voir le fichier rv1.sql) : select count(*) from VueBuveurs where type = 'gros'; Le plan d exécution est-il optimal? Proposer un plan d exécution simplifié (voir le fichier rv2.sql) Le plan initial avant simplification est : (σ type= gros (BuvAutre)) union ( σ type= gros (BuvRare)) La sélection est distribuée avant l union, mais Oracle n élimine pas l accès au fragement BuvRare car il n a pas connaissance de la définition algébrique des fragments. Pour simplifier le plan, il faut enlever l accès au fragment BuvRare car σ type= gros (BuvRare) = σ type= gros (σ type = rare (BuveursBig)) Le plan simplifié est : σ type= gros (BuvAutre) = (σ type = rare AND type= gros (BuveursBig) = ensemble vide Dans la relation Achats, le plus grand numéro de buveurs est 100. Quelle est la cardinalité du résultat de R3 : select * from Achats a, BuveursBig b where a.nb = b.nb and a.nb > 100 Résulat vide : cardinalité nulle Comparer les temps d exécution des 3 requêtes suivantes. Expliquer pourquoi les temps d exécution diffèrent. En déduire les heuristiques que l optimiseur d Oracle utilise. R3a : select * from S2BUVEURSBIG b, ACHATS a where a.nb = b.nb and a.nb > 100; R3a est rapide car la collection intérieure (selection nb>100 de Achat) ne produit aucun tuple donc pas d'accès aux buveurs R3b: select * from ACHATS a, S2BUVEURSBIG b where a.nb = b.nb and a.nb > 100 ; R3b: requête lente car la collection intérieure est BuveursBig. Oracle n utilise pas la commutativité de la jointure : Achats BuveursBig = BuveursBig Achats R3c:

page 6 select * from S2BUVEURSBIG b, ACHATS a where a.nb = b.nb and b.nb > 100;. R3c : requête lente. La sélection (nb>100) n'est pas poussée sur Achats. Oracle ne fait pas la déduction suivante : si (a.nb=b.nb et b.nb > 100) alors a.nb > 100 donc jointure avec la totalité des Achats, puis sélection après la jointure. Rmq : Le fait d ajouter des contraintes d intégrité référentielle (Buveur.nb est clé primaire, et Achat.nb est une clé étrangère) a-t-il une influence sur les choix de l optimiseur?