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.
la source
VACUUM FULL
sur 9.0+, car il réécrit complètement la table. Cela devrait aussi fonctionner régulièrementVACUUM
, mais je ne l'ai pas encore testé. Carautovacuum
cela fonctionnerait si vous pouviez attraper le processus de travail de l'autovacuum sur une table donnée, mais je ne sais pas comment y parvenir.C'est très difficile à déterminer. Vous pouvez régler la purge automatique pour être plus agressif ou plus doux. Mais lorsqu'il est réglé sur doux et qu'il est à la traîne et que la charge d'E / S de base est trop élevée, il peut arriver qu'il n'atteigne jamais un état de vide approprié - alors vous voyez le processus en cours d'exécution et en cours d'exécution. De plus, les éditions ultérieures de PostreSQL ont des capacités d'autovacuum nettement améliorées, cela seul peut suffire pour passer à l'une d'entre elles (de préférence 9.2 comme la plus récente).
La barre de progression semble une bonne idée, mais j'imagine que ce n'est pas si facile à mettre en œuvre de manière significative. Comme vous avez une charge constante sur vos tables, il est tout à fait possible que la progression recule apparemment (je veux dire que le nombre / pourcentage de lignes mortes augmente au lieu de diminuer) - alors quelle conclusion tirez-vous?
la source
VACUUM ANALYZE VERBOSE
imprime au moins une certaine activité sur la console comme il le fait. Il vaut mieux alors juste regarder une invite statique se demandant si quelque chose est coincé pendant des heures.VACUUM
, pas l'autovacuum, mais c'est toujours quelque chose.Dans notre production, l'une des plus grandes tables avait ce journal:
C'est de loin la pire consommation de ressources, toutes les autres tables ont pris moins de 2 s.
Pour voir ces types de journaux, vous devez exécuter ceci:
(pendant 5 ms), rechargez le fichier de configuration.
la source
J'ai trouvé ce post et ce post utile, mais comme d'autres l'ont mentionné, il peut être difficile de calculer la progression globale du vide, car le processus implique quelques opérations distinctes.
J'utilise cette requête pour surveiller la progression de l'analyse de la table de vide, qui semble être la majeure partie du travail:
Cependant, cela n'inclura pas l'analyse d'index, qui se produit ensuite, et peut prendre autant de temps, sinon plus, si vous avez une tonne d'index. Malheureusement, je ne trouve aucun moyen de surveiller le balayage / la mise sous vide de l'index.
la source