Vous n'êtes pas identifié(e).

#1 06/10/2009 10:57:30

benbork
Membre

Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

Bonjour,

J'ai un gros soucis de maintenance de une base de données très volumineuse : presque 2 tera-octets répartis sur une table de près de 3 milliards de lignes ...
Cette dernière est donc très volumineuse, notamment une table qui contient des données enregistrées toutes les secondes, sous forme de 'bytea'.
En gros, je dois enregistrer 1 an de données, avec une précision à la seconde, pour 80 entitées. Puis une fois presques pleine, la base doit effectuer un roulement, remplaçant les données les plus vieilles par les nouvelles.
Pour cela, chaque nuit, les lignes correspondant aux jours "en trop" sont supprimées (afin de pouvoir être remplacées).
Sauf que l'espace disque n'est pas rendu pour autant...

Comme un simple autovacuum n'a pas suffit, j'ai cherché à mettre en place une solution "manuelle".
Après quelques lectures sur internet, j'ai testé une solution qui marche sur un test avec seulement 1 jour de données (4 gigas sur 7 millions de lignes):
- vacuum + analyze
- reindex

Mais avec une base plus grosse (dès qu'on atteint quelques semaines de données), l'analyse ne se lance même pas (ou en tout cas le mode verbose n'affiche rien, et attendre une nuit complète n'y change rien...)

Dans l'idéal, il faudrait que cette maintenance puisse se faire sans stopper les "enregistrements" pour autant.
Au pire, la maintenance devrait pouvoir etre effectuée le plus rapidement possible durant la nuit, pour ne stopper les "enregistrements" qu'un minimum de temps.

J'ai essayer de retoucher le fichier de config (nontament en augmentant le 'max_fsm_pages'), mais rien n'y fait...
Quelqu'un a-t-il une idée de config, ou une piste a essayer ?

Hors ligne

#2 06/10/2009 11:29:01

Marc Cousin
Membre

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

On est en plein dans un des quelques cas ou il est intéressant de partitionner par date : il s'agit de faire des plus petites tables, chacune ne contenant qu'une partie de l'intervalle de temps.

Voici déjà la doc sur le sujet, pour commencer : http://docs.postgresqlfr.org/8.4/ddl-partitioning.html


Marc.

Hors ligne

#3 06/10/2009 11:42:48

benbork
Membre

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

Merci pour la piste, qui aurait du être explorée lors de la conception, plutôt qu'a une semaine du déploiement...
Je vais y jeter un œil, et voir si cela est possible a mettre en place rapidement.

L'ennui, donc, est que je voudrais éviter (au moins dans un premier temps) de trop modifier la structure de ma base, car l'application doit être fonctionnelle la semaine prochaine, et seul ce problème subsiste.
Y a-t-il une configuration de postgresql (notamment les paramètres de réglage du vacuum et ru reindex ?) adaptée à mon cas, sans pour autant retoucher la structure ?

Merci!

Hors ligne

#4 07/10/2009 11:54:42

gleu
Administrateur

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

La modification de structure proposée par Marc ne demande aucune modification de l'application. Ce n'est pas un soucis pour le déploiement de la solution.

Avec la structure actuelle... Pour le REINDEX, seul un maintenance_work_mem plus important pourra vous aider. Pour le VACUUM, jouer avec les coûts ne pourra qu'augmenter la durée d'exécution du VACUUM, mais améliorer la rapidité des autres procédures.


Guillaume.

Hors ligne

#5 07/10/2009 12:06:29

benbork
Membre

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

Je suis effectivement en train de mettre en place le partitionnement, qui semble être la solution qui aurait du être spécifiée depuis le début, car complètement adaptée à mon cas.

Hors ligne

#6 07/10/2009 13:22:47

Marc Cousin
Membre

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

Par contre, attention, avec le partitonnement, il y a qq requêtes qui peuvent poser problème (les plans sont plus difficiles à élaborer).

Des choses toutes bêtes comme "select max(date) from ma_table_partitonnee". C'est full scan de toutes les partitions (pas retesté en 8.4, mais c'était le cas en 8.3).

Donc ça veut dire refaire une passe de validation sur l'appli.


Marc.

Hors ligne

#7 07/10/2009 13:27:04

benbork
Membre

Re : Pb urgent : maintenance (vacuum et reindex) sur gros volume de données

En effet, et j'en ai plein d'autre comme ca...
J'espère avoir le temps de modifier les requêtes a problème et de repasser un plan de test complet derrière, pas évident d'ici la fin de la semaine...

J'ai du boulot ;-)

Pour info, je suis en 8.3

Hors ligne

Pied de page des forums