Partager l'article ! Performance - Partitionnement (1): Bonsoir, Me revoici avec ma table de 115 millions de lignes (j'ai perdu accidentellement celle de 125 millions ...
Par ailleurs, je m'étais arreté à décembre 2007, mais bien evidemment tous les jours les statistiques arrivent de part nos 25 pays et continuent d'alimenter notre
table.
Pas besoin d'être fort en mathématiques pour comprendre:
décembre 2007=115 millions de lignes
Années 2008 => Plus d' UN MILLIARD DE LIGNES.
L'idée étant de conserver bien sur l'année en cours + une année d'archive: Au bas mot 2,5 milliards de lignes !!
Les intérrogations seront essentiellement par date et par quesionnaire.
Il convient de bien réfléchir à comment stocker ces informations car les manipulations de centaines de millions de lignes ne s'effectuent pas de la même facon que pour une table de quelques
milliers de lignes.
Tout devient critique (Statistiques, sauvegarde, maintenance des indexes,...)
Pour les tables à forte volumétrie ORACLE a bien sur pensé à nous, et il a créé le partitionnement.
Cela va revenir à découper notre table selon des critères bien précis.
Il existe trois type de partitionnement:
Dans mon cas, Etant donnée que je vais interroger la table par date et par questionnaire, il peut être jucieux d'effectuer un partitionnement par intervalle sur la
date, suivi d'un sous partitionnement par questionnaire. Pour le sous partitionnement, on utilisera un partitionnement par hash.
Afin de permettre à ORACLE d'utiliser au mieux son algorythme de répartition des valeurs, il convient de choisir un nombre de sous partitions qui soit une puissance de 2(
4,8,16,32,64,128,...)
En général les deux raisons qui poussent à effectuer du partionnement sont:
Pour ce qui est de l'administration on en reparlera dans un prochain article.
Pour les performances, c'est assez simple à comprendre.
Admettons que je fasse une requête du type
Si ma table est partitionnée par date et sous partitionné par type de formulaire, ORACLE va utiliser cette information pour aller directement dans la partition concernée et va donc travailler sur
un sous ensemble de la table.
Assez parlé, crééons une nouvelle table qui prennent en compte le partitionnement.
(
q1 number,
q2 number,
q3 number,
q4 number,
q5 number,
q6 number,
q7 number,
q8 number,
q9 number,
q10 number,
id_pays number,
id_formulaire number,
date_questionnaire number)
PARTITION BY RANGE(date_questionnaire) SUBPARTITION BY HASH(id_formulaire) SUBPARTITIONS 64
(
PARTITION P_20071201 VALUES LESS THAN (20071202),
PARTITION P_20071202 VALUES LESS THAN (20071203),
PARTITION P_20071203 VALUES LESS THAN (20071204),
PARTITION P_20071204 VALUES LESS THAN (20071205),
PARTITION P_20071205 VALUES LESS THAN (20071206),
PARTITION P_20071206 VALUES LESS THAN (20071207),
PARTITION P_20071207 VALUES LESS THAN (20071208),
PARTITION P_20071208 VALUES LESS THAN (20071209),
PARTITION P_20071209 VALUES LESS THAN (20071210),
PARTITION P_20071210 VALUES LESS THAN (20071211),
PARTITION P_20071211 VALUES LESS THAN (20071212),
PARTITION P_20071212 VALUES LESS THAN (20071213),
PARTITION P_20071213 VALUES LESS THAN (20071214),
PARTITION P_20071214 VALUES LESS THAN (20071215),
PARTITION P_20071215 VALUES LESS THAN (20071216),
PARTITION P_20071216 VALUES LESS THAN (20071217),
PARTITION P_20071217 VALUES LESS THAN (20071218),
PARTITION P_20071218 VALUES LESS THAN (20071219),
PARTITION P_20071219 VALUES LESS THAN (20071220),
PARTITION P_20071220 VALUES LESS THAN (20071221),
PARTITION P_20071221 VALUES LESS THAN (20071222),
PARTITION P_20071222 VALUES LESS THAN (20071223),
PARTITION P_20071223 VALUES LESS THAN (20071224),
PARTITION P_20071224 VALUES LESS THAN (20071225),
PARTITION P_20071225 VALUES LESS THAN (20071226),
PARTITION P_20071226 VALUES LESS THAN (20071227),
PARTITION P_20071227 VALUES LESS THAN (20071228),
PARTITION P_20071228 VALUES LESS THAN (20071229),
PARTITION P_20071229 VALUES LESS THAN (20071230),
PARTITION P_20071230 VALUES LESS THAN (20071231),
PARTITION P_20071231 VALUES LESS THAN (20080101)
) ;
Et bien je réponds, qu'avec ce sujet, j'ai de quoi remplir mon blog pour novembre !!!!
LAO.
| Février 2012 | ||||||||||
| L | M | M | J | V | S | D | ||||
| 1 | 2 | 3 | 4 | 5 | ||||||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 | ||||
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | ||||
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | ||||
| 27 | 28 | 29 | ||||||||
|
||||||||||