Stockage
Introduction a Oracle et MySQLFIP - BD
Nicolas Travers
Laboratoire CEDRIC du CNAM
1 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage
Plan
1 Moteurs de stockages dans les SGBD
2 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
1 Moteurs de stockages dans les SGBDOracle
MySQL
3 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Representation physique des donnees
Structures physiques dans ORACLE :1 Bloc : Unite physique d’E/S (entre 1KO et 8KO).
Multiple de la taille des blocs du systeme d’exploitation
2 Extension : Ensemble de blocs contigus
Contient un meme type d’information
3 Segment : ensemble d’extensions
Stockent un objet logique (une table, un index ...)
4 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Tables, segments, extensions et blocs
Niveau
physique
Niveau
logique
Segment
Table
Extension
Blocs
5 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Le Segment ORACLE
Zone physique contenant un objet logique
Quatre types de segments :1 Segment de donnees (Table, Cluster , Partition)2 Segment d’Index3 Rollback Segment utilise pour les transactions4 Segment temporaire (utilise pour les tris, resultats temporaires)
6 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Base ORACLE, fichiers et TABLESPACE
1 Base de donnees physique : Ensemble de fichiers2 Base de donnees logique : Ensemble de TableSpace
Divises par l’administrateurtablespace un ou plusieurs fichiers (physiques)
Permet :1 Controle l’emplacement physique des donnees (Dictionnaire
sur un disque, Donnees utilisateur sur un autre)2 Facilite la gestion (sauvegarde, protection, etc)
7 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Exemple de TableSpace
Tablespace 1 Tablespace 2
Fichiers
Dictionnaire
Table CTable A
Table B
Index
8 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Stockage des donnees
Deux stockages possibles :
1 Independant : Segments alloues automatiquement a la table.Parametres :
1 Sa taille initiale2 Le pourcentage d’espace libre dans chaque bloc3 La taille des extensions
2 En cluster : Regroupement de donnees
9 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
TABLESPACE : definition
CREATE TABLESPACE tabspace2
DATAFILE ’diskC:tabspacefile2.dat’ SIZE 20M
DEFAULT STORAGE (INITIAL 10K NEXT 50K
MINEXTENTS 1 MAXEXTENTS 999
PCTINCREASE 20)
10 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
CREATE TABLE
CREATE TABLE Cours (
CODE UE NUMBER PRIMARY KEY
USING INDEX TABLESPACE usersa,
Responsable VARCHAR2(50),
NB AUDITEURS NUMBER )
TABLESPACE tabspace 2
PCTFREE 10 PCTUSED 75
11 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Les clusters
Un cluster est un regroupement de donnees sur valeurs
Avantage : Optimiser les jointures
Ex : Cours onUE=CODE UE AuditeursGroupement sur le CODE UEStockage des donnees (n-uplets) dans un segment clusterCreation d’index sur CODE UE
Desavantage : Augmente la taille de la table (peu de cles parpage)⇒ Augmente les acces en parcours sequentiel.
12 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Les clusters
Un cluster est un regroupement de donnees sur valeurs
Avantage : Optimiser les jointures
Ex : Cours onUE=CODE UE AuditeursGroupement sur le CODE UEStockage des donnees (n-uplets) dans un segment clusterCreation d’index sur CODE UE
Desavantage : Augmente la taille de la table (peu de cles parpage)⇒ Augmente les acces en parcours sequentiel.
12 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Exemple de cluster
Page CODE UE Intitule Responsable NB auditeursP1 NFE106 Ingenierie de Base de Donnees Nicolas Travers 20
CODE AUDITEUR AnneeA1 2010A6 2010A15 2008A23 2009
Page CODE UE Intitule Responsable NB auditeursP2 NFP107 Initiation a la Base de Donnees Michel Crucianu 100
CODE AUDITEUR AnneeA1 2009A6 2009A3 2007A12 2010A23 2008
13 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
CLUSTER avec B+Tree
CREATE CLUSTER cluster UE
(CODE UE VARCHAR2(6))
SIZE 1 2K
INDEX 2
STORAGE (INITIAL 100K NEXT 50K)
CREATE INDEX ind UE ON CLUSTER cluster UE
1. SIZE est la taille de toutes les donnees pour une cle donnee.2. Il faut explicitement creer un index pour le cluster 14 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
CREATE TABLE
CREATE TABLE Cours (
CODE VARCHAR2(6) PRIMARY KEY,
intitule VARCHAR(32),
Responsable VARCHAR(64))
CLUSTER cluster UE(CODE) ;
CREATE TABLE Auditeurs (
CODE UE VARCHAR2(6),
CODE AUDITEUR VARCHAR2(10),
annee NUMBER(4), note NUMBER(2),
PRIMARY KEY (CODE AUDITEUR, CODE UE))
CLUSTER cluster UE(CODE UE) ;
15 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
CLUSTER avec Hachage
CREATE CLUSTER hash UE
(CODE UE VARCHAR2(6))
HASH IS CODE UE
HASHKEYS 1000 SIZE 2K ;
HASH IS (optionnel) : Cle a hacher
HASHKEYS : Nombre de valeurs a hacher
16 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Historique
1994 - Michael (Monty) Widenius & David Axmark
1995 - First release
2000 - MySQL 3.23
2001 - Ajout de InnoDB
2002 - MySQL 4.1 (unions, prepare statements, requetesimbriquees)
2005 - MySQL 5.0 (trigger, vues, curseurs, XA Transactions, Oracle+ InnoDB)
2008 - MySQL 5.1 (partitions, replication au niveau des n-uplets,SUN + MySQL)
2009 - MySQL 5.4 (Net amelioration des performances)
Utilise par Google, Facebook, Amazon, elections americaines
17 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
Historique
1994 - Michael (Monty) Widenius & David Axmark
1995 - First release
2000 - MySQL 3.23
2001 - Ajout de InnoDB
2002 - MySQL 4.1 (unions, prepare statements, requetesimbriquees)
2005 - MySQL 5.0 (trigger, vues, curseurs, XA Transactions, Oracle+ InnoDB)
2008 - MySQL 5.1 (partitions, replication au niveau des n-uplets,SUN + MySQL)
2009 - MySQL 5.4 (Net amelioration des performances)
Utilise par Google, Facebook, Amazon, elections americaines
17 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL Server : Une architecture Pluggable
Source : MySQL Performances 2009
18 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL : Moteurs de Stockage
CREATE TABLE nomTable (...) ENGINE nomMoteur
Moteurs de stockages principaux :
MyISAM (par defaut - Sun/MySQL)InnoDB (transaction - Oracle)NDB (Cluster - Sun/MySQL)Maria (Crash safe, ACID - mounty AB <> MariaDB)Falcon (transactional - Sun/MySQL)PBXT (transactional - PrimeBase)XtraDB (transactional - InnoDB − > Percona)MEMORY (in memory data - Sun/MySQL)
19 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL : Moteurs de Stockage
CREATE TABLE nomTable (...) ENGINE nomMoteur
Moteurs de stockages principaux :
MyISAM (par defaut - Sun/MySQL)InnoDB (transaction - Oracle)NDB (Cluster - Sun/MySQL)Maria (Crash safe, ACID - mounty AB <> MariaDB)Falcon (transactional - Sun/MySQL)PBXT (transactional - PrimeBase)XtraDB (transactional - InnoDB − > Percona)MEMORY (in memory data - Sun/MySQL)
19 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MyISAM
Premier moteur de MySQL
Moteur de stockage par defaut
Avantages :
Peu volumineux et rapideRequetes de type COUNTIndex textuel : FULLTEXT
Desavantages :
Pas de concurrences d’accesReprise sur panne difficile
20 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MyISAM : Stockage
Stockage sous formes de tas
Pas de cache de donnees
Modifications directement visibles
Compose de trois fichiers :1 table.frm : Description2 table.MYD : Donnees3 table.MYI : Indexes (dont celui sur la cle primaire)
Indexes sont gardes dans le cache
21 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MyISAM : Parametres
A la fin du CREATE TABLE, rajouter :
DATA DIRECTORY = ’/disk1/myData’INDEX DIRECTORY = ’/disk2/index/myIndex’ ;
Pourquoi mettre sur deux disques physiques index et donnees ?
22 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MyISAM : Full Text
Index efficace en recherche textuelle 3
Texte indexe sous forme de BTreeLIKE : Recherche exacteMATCH/AGAINST : Recherche avec tri des resultats parpertinence
Exemple : SELECT *, MATCH (Intitule) AGAINST (’Base de Donnees’) AS Score FROM
Cours ORDER BY score DESC ;
Possibilite en mode ’BOOLEAN’ : plus efficace
3. Etudie en NFE204 23 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MyISAM : Pannes et Concurrence
Pas de moteur transactionnel
Un seul processus d’ecriture
Garanties de Recovering, mais lent
Journal de sauvegarde incrementale
Indexes en cache
Plus performantsProblemes d’incoherence
24 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
InnoDB
Index cle primaire efficace
Cles etrangeres
Transactionnel
Multi-threade
25 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
innoDB : Stockage
Compose de deux fichiers :1 table.frm : Description2 table.ibd : Donnees (+ index secondaire + undo logs)
Indexes sont gardes dans le cache
26 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
InnoDB : BTree
Index sur la cle primaire : Non-dense (besoin de cle de petitetaille)
Stockage des donnees dans les feuilles de l’arbre
Cache sur les feuilles de l’index
Autres index gardent la valeur de la cle primaire (et non leROWID)
27 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
InnoDB : Transactionnel
Transactionnel / ACID 4
Verrouillage des n-uplets
Recovering automatique
Double ecriture / Checksums
Buffer pool (retardement des maj)
4. Atomicite, Consistance, Isolation, Durabilite 28 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
InnoDB : Niveaux d’isolation
SET {SESSION | GLOBAL} TRANSACTION ISOLATION LEVEL <level>
READ UNCOMMITED (lecture sale)
READ COMMITED (lecture sur donnees validees)
REPEATABLE READ (lecture donnees comme a l’origine)
SERIALIZABLE (evite les tuples fantomes)
Vision de la table comme un ’snapshot’ au moment de latransaction
29 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
InnoDB : Niveaux d’isolation
SET {SESSION | GLOBAL} TRANSACTION ISOLATION LEVEL <level>
READ UNCOMMITED (lecture sale)
READ COMMITED (lecture sur donnees validees)
REPEATABLE READ (lecture donnees comme a l’origine)
SERIALIZABLE (evite les tuples fantomes)
Vision de la table comme un ’snapshot’ au moment de latransaction
29 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL : Choix du moteur
MyISAM Beaucoup lectures / Recherche textuelle
InnoDB Read+Write / Transactions / Acces cle primaire
NDB Petites Transactions, traitements paralleles
MEMORY Uniquement en memoire
30 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL : Choix du moteur
MyISAM Beaucoup lectures / Recherche textuelle
InnoDB Read+Write / Transactions / Acces cle primaire
NDB Petites Transactions, traitements paralleles
MEMORY Uniquement en memoire
30 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD
Stockage Oracle MySQL
MySQL : Choix du moteur
MyISAM Beaucoup lectures / Recherche textuelle
InnoDB Read+Write / Transactions / Acces cle primaire
NDB Petites Transactions, traitements paralleles
MEMORY Uniquement en memoire
30 / 30
Nicolas Travers Introduction a Oracle et MySQL FIP - BD