Partitionement des données

Publié par



IS-Net 29 DATA WEBHOUSE
Informatique de gestion et
systèmes d’information









Partitionement des données

LIBD@hegne.ch / Février 2002
ISNet29_partitions.doc IS-Net 29 DATA WEBHOUSE


TABLE DES MATIERES

Introduction ........................................................................................................... 3
Partitionnement disques........................................................................................ 3
Partitionnement des fichiers.................................................................................. 3
Partitionnement et parallélisme ............................................................................. 4
Implémentation du partitionnement ....................................................................... 6
Implémentation native ........................................................................................... 6
Implémentation avec tables et vue........................................................................ 6
Partitionnement par intervalles (partition pruning)................................................. 7
Partitionnement par hachage (partition striping).................................................... 7
Partionnement composite...................................................................................... 8
Indexation des tables partitionnées 9
Utilisation du partitionnement..................................................................... ...
Voir plus Voir moins
Informatique de gestion et systèmes d’information
IS-Net 29 DATA WEBHOUSE
Partitionement des données
LIBD@hegne.ch/ Février 2002 ISNet29_partitions.doc
IS-Net 29 DATA WEBHOUSE TABLE DES MATIERES Introduction ........................................................................................................... 3Partitionnement disques........................................................................................ 3Partitionnement des fichiers .................................................................................. 3Partitionnement et parallélisme ............................................................................. 4Implémentation du partitionnement ....................................................................... 6Implémentation native ........................................................................................... 6Implémentation avec tables et vue ........................................................................ 6Partitionnement par intervalles (partition pruning) ................................................. 7Partitionnement par hachage (partition striping).................................................... 7Partionnement composite...................................................................................... 8Indexation des tables partitionnées ....................................................................... 9Utilisation du partitionnement .............................................................................. 10Maintenance de la série temporelle .................................................................... 10Fenêtre déroulante .............................................................................................. 10Sauvegarde de la table de fait............................................................................. 10Optimisation du parallélisme ............................................................................... 11Optimisation de l’accès aux partitions. ................................................................ 11Jointure sur partitions .......................................................................................... 11
Partitionnement
Page 2 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Introduction Le partitionnement d'une base de données améliore les performances et simplifie la maintenance surtout si elle est très volumineuse. Les requêtes, qui n'accèdent qu'à une fraction des données, peuvent être exécutées plus rapidement car la quantité de données à analyser est moindre. De même, les tâches de maintenance, comme la reconstruction d'un index ou la sauvegarde d'une table, peuvent être effectuées plus rapidement sur une portion de données que sur l’ensemble d’une table volumineuse. Il existe plusieurs manières de fractionner les données de la base. Partitionnement matériel Le partitionnement matériel structure la base de données de façon à tirer parti de l'architecture matérielle disponible. On peut citer quelques exemples de partitionnement matériel :
1 Partitionnement disques Les dispositifs RAID permettent l'entrelacement des données sur plusieurs unités de disques, offrant un accès plus rapide aux données puisqu'un nombre plus élevé de têtes de lecture-écriture travaillent simultanément. Une table entrelacée sur plusieurs lecteurs peut normalement être analysée plus rapidement que la même table stockée sur un seul lecteur.
Partitionnement des fichiers Il est possible d'effectuer le partitionnement sans fractionner les tables mais en les plaçant sur des unités de disque individuelles. Placer une table sur un seul lecteur et les tables associées sur une unité séparée, par exemple, peut améliorer les performances de requête car, lorsque ces requêtes impliquent des jointures entre les tables, les données sont lues par plusieurs têtes en même temps. Les groupes de fichiers de peuvent être utilisés pour spécifier les disques sur lesquels les tables doivent être placées. Cette solution n’est en règle général pas optimum, et est utilisée si le SGBD n’est pas capable de partionner les données de manière plus appropriée. Le partitionnement se fait de manière totalement aléatoire, et le risque de dégradations de performance est souvent plus élevé que le gain. Par contre ce type de partitionnement est particulièrement intéressant si on l’utilise pour distribuer différents types de fichiers. Par exemple, on peut placer les fichiers journaux sur un disque, les méta-données (dictionnaire) sur un autre, les tables sur un troisième et les index sur un quatrième. Cette technique est très efficace, particulièrement sur un système OLTP.
1 Pour plus d’informations, consulter le document ISNet 29 : Périphériques de stockage
Partitionnement
Page 3 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE
2 Partitionnement et parallélisme Si l’on dispose d’une machine avec plusieurs processeurs autorisant plusieurs threads d'exécution cela permet l'exécution simultanée de plusieurs requêtes. En utilisant plusieurs processeurs, une seule requête peut s'exécuter plus rapidement grâce à l'exécution simultanée de plusieurs de ses composants, une requête étant traitée comme une suite d’opérations élémentaires ordonnées. Par exemple, chaque table référencée dans la requête peut être analysée simultanément par un thread différent. Si une grande table peut être partitionnée, une requête parallèle pourrait la traiter en plusieurs entités plus petites. A noter qu’une machine parallèle n’est efficace que si elle dispose d’un nombre de disque supérieur à celui de ses processeurs.
2 Pour plus d’informations, consulter le document ISNet 29 : Parallélisme
Partitionnement
Page 4 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Partitionnement des tables Le présent document traite plus particulièrement du partitionnement efficace de grandes tables. Dans un entrepôt, la (les) tables(s) de fait peuvent atteindre un nombre de ligne très grand, et il est alors non seulement souhaitable, mais nécessaire de la partionner. Une table étant formée de ligne et de colonnes, et il existe deux manières de la découper, horizontalement et/ou verticalement. Partitionnement horizontal Partitionnement vertical Partitionnementvertical Le partitionnement vertical segmente une table en séparant une ligne (row) en plusieurs partitions. Il ne s’agit pas ici de séparer la table en plusieurs tables comportant moins de colonnes, cette technique est utilisée dans les systèmes distribués/répliqués et ne n'est pas intéressante dans un système décisionnel. Partitionnement horizontal Le partitionnement horizontal segmente une table en plusieurs partitions, de même structure que la table. Le choix du mode de partitionnement horizontal des tables dépend de la façon dont les données sont analysées. Il convient de segmenter les tables de sorte que les requêtes consultent le moins de partitions possibles. Le partitionnement horizontal des données selon l'âge ou l'utilisation est le plus couramment utilisé. Une table peut contenir, par exemple, des données concernant les cinq dernières années mais seules les données concernant l'année en cours sont régulièrement consultées.
Partitionnement
Page 5 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Implémentation du partitionnement Le partitionnement fonctionne correctement lorsque les tables de la base de données sont naturellement divisibles en partitions similaires. De nombreuses bases de données peuvent être partitionnées de plusieurs façons. Les partitions spécifiques choisies pour l'implémentation doivent être celles qui répondent le mieux aux exigences de la série d'instructions SQL courantes exécutées par le niveau des services d'entreprise. Implémentation native Par implémentation native, nous pensons ici à des SGBD capables de traiter les partitions comme des objets existants de la base de données. Une table peut être 3 découpée en partitions avec des méta-données de découpage . Implémentation avec tables et vue D’autres SGBD ne dispose pas de système formel pour découper les tables 4 volumineuses ou alors de manière incomplète . Une solution de partitionnement utilisable simplement consiste à avoir plusieurs tables de faits disjointes de même structures, chaque table contenant une série temporelle. Une vue formée de l’union des toutes les tables de faits « élémentaires » représente la table de fait du star schéma. Vue Table Représentant T1 la relation  Table partitionnées  T2 T1UT2UT3 Table T3 Cette solution résout les problèmes posés par la maintenance (indexation, fenêtre déroulante, sauvegarde,…) d’une table très volumineuse mais pose deux problèmes distincts. -Le chargement de données, puisque l’insertion des tuples doit être faite dans les petites tables découpée, la vue n’étant en pas « updatable » puisque basé sur un UNION. -Les requêtes faites en interrogeant la vue sont particulièrement catastrophiques, l’optimiseur partant quasi systématiquement en un parcours complet de la vue.
3 Au moment de l’étude du partitionnement, seul le SGBD Oracle propose un partitionnement natif 4  SQL Server et MySQL proposent une solution partielle, les autres SGBD utilisés n’ont aucunes propositions
Partitionnement
Page 6 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE
Partitionnement par intervalles (partition pruning)  Partition 1 Partition 2 Partition 3 Partition 4 Partition 5 temps Ce type de partitionnement impose d’avoir l’attribut de déterminant le découpage dans la table, en règle général, la date de la série temporelle dans un entrepôt. Il devient particulièrement intéressant, si cet attribut de découpage est considérer par le SGBD comme une méta-donnée traitée par l’optimiseur pour permettre un accès ciblé sur les enregistrements concernés par la requête. Les partitions sont ici « taillées » sur des intervalles d’un attribut de la table. Il y a une sémantique dans le découpage. CREATE TABLE matable  (col1 NUMBER,  col2 DATE,  col3 NUMBER) PARTITION BY RANGE(col2) (PARTITION part94q1 VALUES LESS THAN  TO_DATE (01-APR-1994, DD-MON-YYYY),  PARTITION part94q2 VALUES LESS THAN  TO_DATE (01-JUL-1994, DD-MON-YYYY));
Partitionnement par hachage (partition striping) Il s’agit en fait de séparer de manière équitable et aléatoire les lignes sur plusieurs partitions. Ce principe est dénommé partitionnement par hachage. Partition 1 Partition 2 temps Ce type de partitionnement n’a de sens que si l’on dispose d’un système parallèle, disque et processeurs. Elle est rarement utilisée seule, mais elle est très intéressante si elle est combinée avec un partitonnement par intervalles, pour obtenir un partitionnement composite. A remarquer qu’il ne s’agit en aucun cas d’un partitionnement vertical, puisque chaque ligne est totalement stockée dans une partition.
Partitionnement
Page 7 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE
CREATE TABLE matable  (col1 NUMBER,  col2 DATE,  col3 NUMBER) PARTITION BY HASH(col1)PARTITIONS 2;
Partionnement composite Ce type de partitionnement est simplement la combinaison des deux autres cas vus précédemment. C’est le type de partitionnement typique d’un entrepôt de données sur une machine parallèle. C’est la configuration la plus compliquée à administrer, mais de loin la plus efficace. Partition 1 Partition 2 Partition 3 Partition 4 sous-partition sous-partition sous-partition sous-partition 11 21 31 41 sous-partition sous-partition sous-partition sous-partition 12 22 32 42  temps
CREATE TABLE matable  (col1 NUMBER,  col2 DATE,  col3 NUMBER)  PARTITION BY RANGE (col2)  SUBPARTITION BY HASH (col1) SUBPARTITIONS 2  (PARTITION part94q1 VALUES LESS THAN  TO_DATE (01-APR-1999, DD-MON-YYYY),  PARTITION part94q2 VALUES LESS THAN  TO_DATE (01-JUL-1999, DD-MON-YYYY)));
Partitionnement
Page 8 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Indexation des tables partitionnées L’indexation de la table de fait est critique de part sa taille et de part de son aspect temporelle ou l’on ne fait en principe que d’insérer de nouveau records. La majorité des SGBD n’implémentent leurs index que sous forme d’arbres balancés (B-Tree), qui ont certains avantages, mais les inconvénients d’être volumineux et de se trouver déséquilibré suite à une insertion (ou un effacement) massif. Le chargement de l’entrepôt par série temporel va forcement déséquilibrer un tel index et sa reconstruction complète sera certainement très gourmande en ressource, alors que les séries temporelles existantes sont déjà indexées. A rappeler que ce problème se multiplie par le nombre d’index placé sur la table de fait, soit le nombre de dimensions du modèle dimensionnel. Il est beaucoup plus efficace d’indexer les partitions, qui dans un cas idéal se confond avec une série temporelle.
Partitionnement
Page 9 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Utilisation du partitionnement
Maintenance de la série temporelle Une table de fait d’un modèle dimensionnel représente quasi systématiquement une série temporelle. Elle est donc particulièrement adaptée à être découpée en entités plus petites. Dans la vie de l’entrepôt, les données anciennes ne représentent plus le même intérêt que les données actuelles. Il est courant, pour limiter la taille de l’entrepôt, de décider de stocker qu’un intervalle fixe de données, quelques années par exemple. Passé ce délai, les données pourront être effacées. Ce principe est souvent décrit comme une fenêtre temporelle déroulante, dont la date la plus récente est aujourd’hui, et la largeur correspond à l’intervalle de temps souhaité. Fenêtre déroulante  Fenêtre  déroulante Partition 1Partition 4Partition 3 Partition 2 temps age de l’entrepôt Données à historiser maintenant LTER TABLE matable ADD PARTITION part99q3  VALUES LESS THAN TO_DATE (01-OCT-1999, DD-MON-YYYY) ) ; L’effacement des anciennes lignes peut être une opération gourmande, aggravée par la maintenance des index sur les clés étrangère. Si on gère la fenêtre déroulante avec un grain représentant une partition, l’effacement des lignes peut être gérer avec un DROP, les index locaux sont simplement détruits. LTER TABLE matable DROP PARTITION part99q1 ; Sauvegarde de la table de fait La sauvegarde de la table de fait est également critique. Si elle n’est pas partitionnée, on doit sauvegarder l’ensemble de la table à chaque chargement, ce qui n’est pas très efficace. Il est beaucoup plus intéressant de ne sauvegarder que la nouvelle partition.
Partitionnement
Page 10 sur 11
31/03/03
IS-Net 29 DATA WEBHOUSE Optimisation du parallélisme Un des problèmes classiques de l’utilisation d’un système parallèle, est une décomposition du plan d'exécution sur plusieurs threads qui accèdes aux mêmes ressources disques. Les treads sont alors sérialisés par les ressources d’entrés sorties. En partitionnant les lignes sur différents périphériques (disques) les treads sont alors susceptibles de fonctionner en parallèle. Optimisation de l’accès aux partitions. Pour obtenir un gain de performance efficace sans devoir modifier les requêtes, il est nécessaire que notre SGBD dispose de méta-données sur le partitionnement des tables et encore que son optimiseur soit capable de les utiliser efficacement. Jointure sur partitions La jointure sur partition est un concept particulièrement intéressant, basé sur le partitionnement et le parallélisme. Si on fait une jointure entre deux tables partitionnées par hachage, le système dédie des treads directement à une jointure entre les différentes partitions.
Partitionnement
Page 11 sur 11
P a r t i t i o n
1
P a r t i t i o n
2
P a r t i t i o n 1
P a r t i t i o n
2
31/03/03
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.