Je gère une grande base de données (quelques centaines de concerts) contenant des tables avec différents rôles, certains d'entre eux détenant des millions d'enregistrements. Certaines tables ne reçoivent qu'un grand nombre d'insertions et de suppressions, d'autres quelques insertions et un grand nombre de mises à jour.
La base de données fonctionne sur PostgreSQL 8.4 sur un système Debian 6.0 amd64 avec 16 gigaoctets de RAM.
La question est parfois le processus de vide automatique sur une table, prend beaucoup de temps (jours) pour terminer. Je veux pouvoir dire approximativement combien de temps une commande de vide particulière prendra, pour pouvoir décider de l'annuler ou non. De plus, s'il y avait un indicateur de progrès pour les opérations de vide postgres, ce serait vraiment utile.
Éditer:
Je ne cherche pas de solution pare-balles. Une simple indication approximative du nombre de tuples morts ou d'octets d'E / S nécessaires suffit pour décider. C'est vraiment ennuyeux de n'avoir aucune idée de quand VACUUM
se terminera, que ce soit.
J'ai vu qu'il y pg_catalog.pg_stat_all_tables
avait une colonne pour le nombre de tuples morts. Il est donc possible d'avoir une estimation, même si cela signifie qu'il faut ANALYZE
avant le tableau. D'un autre côté, autovacuum_vacuum_threshold
et les autovacuum_vacuum_scale_factor
paramètres seuls prouvent que postgres lui-même sait quelque chose sur la quantité de changement sur les tables et le met probablement entre les mains du DBA aussi.
Je ne sais pas quelle requête exécuter, car lorsque je lance VACUUM VERBOSE
, je vois que non seulement les tables, mais les index sur celles-ci sont également traités.