J'ai également le même problème d'index qui grossit dans une table à nombre de lignes constant mais dans laquelle je fais des delete puis insert tous les jours
J'ai dû mettre en place un reindex, mais qui a pour contrainte de locker la table le temps de l'opération (1h30 quand-même !)
Sous Postgresql actuellement il est possible de "défragmenter" un index sans verrou sur la table avec l'option
CREATE INDEX CONCURRENTLY. En gros on créé un 2ème index, sans locker la table, sur les mêmes colonnes, puis on supprime l'ancien et on renomme le nouveau
Mais pour les indexes des PK ce n'est pas encore possible, dans la version actuelle de Postgresql (9.1), de recréer une PK avec "using index" pour spécifier un index déjà existant qu'on aurait créé avec l'option "concurrently"
C'est donc une contrainte de la version actuelle, le seul moyen étant de planifier la tâche de maintenance (le reindex par exemple) dans un créneau horaire où la table n'est pas utilisée
Pour le VACUUM FULL, c'est aussi contraignant car il locke la table le temps de l'opération. Dans les versions 8.x c'était tellement long qu'un export/import de la table était plus rapide. Là dans les dernières versions c'est apparemment plus rapide d'après la doc (je n'ai pas testé personnellement).
A toi de voir en fonction du temps que ça prend sur ta table si c'est acceptable ou pas et si tu arrives à trouver un créneau horaire pour le faire, sans que personne n'accède à la table
Partager