Bonjour à tous,
Je réfléchis actuellement sur la meilleure façon de structurer une table partitionée sur une base Oracle 10.2.0.4.
C'est une table dans laquelle seront stockées des données de performance d'un parc de serveurs, les données sont collectées par serveur et par pas de 5 minutes.
=> PERF(collectdate, parc, serveur, valeur).
On veut pouvoir répondre rapidement aux question suivantes :
- perfs sur un intervalle de dates pour un ou plusieurs parcs.
- perfs sur un intervalle de dates pour un ou plusieurs serveurs.
L'intervalle de dates ne peut pas excéder 2 jours.
Environ 1 million de lignes par jour y sont insérées, il existe 20 parcs différents et 4000 serveurs différents. Je souhaite conserver 1 an d'historique, donc environ 360 millions de lignes au total.
Je me suis tourné vers le partitioning pour obtenir de meilleures perfs en selection.
Les solutions sont multiples, et j'ai fait de nombreux tests avec 120 millions de lignes, seulement aucun ne donne de résultat vraiment tranché et au dessus du lot.
Pour comprendre la suite : "moisjour" correspond à une colonne supplémentaire qui correspond à la concaténation du mois et du jour. De type NUMBER, elle servira de clé de partition, de cette manière j'aurai une partition par jour, et je crée les 367 partitions à la création de la table et n'ai pas besoin de retoucher aux partitions au fil du temps.
Voici donc mes essais principaux, j'ai également fait de nombreux mix des ces solutions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 De base : - Aucune partition sur la table - Index (collectdate, parc) - Index (collectdate, serveur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PERF_PART_1 : - Aucune partition sur la table - Index partitioné : (moisjour, collectdate, parc) PARTITION BY RANGE (moisjour) - Index partitioné : (moisjour, collectdate, serveur) PARTITION BY RANGE (moisjour)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PERF_PART_2 : - PARTITION BY RANGE (MOISJOUR) - Index local : (collectdate, parc) - Index local : (collectdate, serveur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 PERF_PART_3 : - PARTITION BY RANGE (MOISJOUR) SUBPARTITION BY HASH (SERVEUR) SUBPARTITIONS 8 - Index local : (collectdate, parc, serveur)
Tout d'abord, la nouvelle colonne "moisjour" vous semble-t-elle justifiée/pertinente? Y a-t-il un autre moyen d'obtenir facilement un partitionnement par jour?
Ensuite, quelle solution vous semble la meilleure (y compris une solution que je n'aurai pas exposée ici), et pourquoi?
Lorsqu'on a le choix, y a-t-il une différence entre partitionnement BY LIST et BY RANGE?
Des suggestions/conseils divers sur l'utilisation du partitioning?
Voilà tout, en l'absence de nouveaux éléments je sais laquelle je retiendrai, mais les tests n'ayant rien donné de vraiment concluant, j'aurai aimé avoir des avis avant de me lancer.
Merci d'avance pour vos réponses, et merci également d'avoir pris le temps de me lire!
Si vous avez besoin de précisions n'hésitez pas.
Partager