
Envoyé par
Mohamed.Houri
Voilà plusieurs semaines que vous avez posé cette question de purge et il me semble que vous êtes toujours au point mort.
Bonjour Mohamed,
Non je ne suis pas au point mort, j'ai finaliser tous mes scripts et je les ai tester et ils sont fonctionnel, la seul chose qu'il me reste a faire, c'est les excuter pour faire une redefinition de toutes mes tables et ensuite tester mes applications dessus pour voir que deviennent les performances.
Si votre client prévoyait de faire une purge tous les 6 mois, pourquoi alors avoir attendu jusqu’à la mise en production pour commencer à envisager une solution de purge très efficace ?
Mon client n'a rien prévu depuis le debut de la base concernant une quelconque purge, ce n'est que maintenant qu'il demande a ce qu'elle soit prise en compte.
Erreur de conception au debut, je vous l'admet et je n etais pas présent non plus au debut pour le leur proposer.
Mais maintenant c'est a moi qu'on demande de trouver des solutions.
Je suppose que vous allez faire un partitionnement par date (range partition) et que vous allez considérer le critère de date qui sert à la purge comme clé de partitionnement. Très bien. Dans ce cas il vous faudra simplement supprimer les partitions que vous n’utilisez plus avec un simple:
1 2
|
alter table ma_nouvelle_tab_part drop partition p2010 update global indexes ; |
Je ne passerai pas sans vous signaler que, comme vous avez certainement des tables liées entre elles par des clés étrangères, vous devriez d’abord ‘’disabler’’ ces contraintes d’intégrité avant de supprimer les partitions et de les ‘’ré-enabler’’ à la fin sans validation bien évidemment.
Merci pour cette précision, c'est exactement ce qui m'est arrivé et c est comme ca que j'ai resolu le probleme de suppression des partitions.
Par contre, en passant à ce nouveau schéma, vous pourriez (au conditionnel) bien aussi
complètement détériorer la performance de votre application. La raison dans ce cas n’aura rien à voir avec la fragmentation des indexes basés sur le critère de date (‘’sweeper indexes’’ ou ‘smashed indexes’’ ou ‘’right hand indexes’’) mais plutôt avec le comportement des anciennes requêtes par rapport au partitionnement. Toute requête ne faisant pas appel à la clé de partitionnement fera un
''PARTITION RANGE ALL'' ce qui n’est pas du tout le but du partitionnement à savoir:
Alors le critere de mes partitions se base non sur des dates mais sur une valeur
PARTITION PART_2006 VALUES LESS THAN (64231324),
C'est une colonne qui est clé primaire de certaine tables mais parfois elle fait seulement partie de la clé primaire.
Effectivement, je ne maitrise pas ce qu'il va en advenir une fois partitionné, et c'est le but de ce post afin que vous m'aidiez.
Mais je t'avouerai que la méthode de paritionner pour purger et plus simple et plus rapide que celle avec des deletes (avec des deletes il me faut une vingtaine de scripts sur plus de deux/trois semaine, alors qu'avec les partitions, il me faut 3/4heures grand maximum)
il faut donc, selon tes conseils, que je regarde aussi comment réorganiser mes index ... sachant qu'on ne peut plus toucher au requetes qui les utilisent ?
Partager