Forum Linux.général Fragmentation database avec PgSQL 8.1

Posté par  (site web personnel) .
Étiquettes : aucune
0
12
oct.
2011

Bonjour,

J'ai une database de 220Mo qui fonctionne avec PgSQL 8.1 (pas possible d'upgrader maintenant). Si je fait un reindex, l'espace utilisé chute à 220 mais ensuite la db grossit (quelques mo / jour) alors qu'elle ne devrait pas.

J'ai augmenté progressivement les settings du démon autovacuum pour arriver à:
autovacuum = on
autovacuum_naptime = 25
autovacuum_vacuum_threshold = 40
autovacuum_analyze_threshold = 30
autovacuum_vacuum_scale_factor = 0.1
autovacuum_analyze_scale_factor = 0.05

C'est apparement plus que les settings recommandé (par défaut sur un 8.4) ce qui n'empêche pas la db de grossir.

Au niveau du FSM, j'ai fait un VACUUM VERBOSE qui affiche ceci:

INFO: free space map contains 2081 pages in 76 relations 
DETAIL: A total of 3088 page slots are in use (including overhead). 
3088 page slots are required to track all free space. 
Current limits are: 20000 page slots, 1000 relations, using 222 KB.

Donc pas de soucis à ce niveau.
Je ne vois vraiment pas ce qui pourrais causer cette croissance de la taille de la DB (il n'y a pas de nouvelle donnée insérée ou assez peu).

Si quelqu'un a une idée, ça me serait fort utile :)

D'avance merci.

  • # Problème de VACUUM ?

    Posté par  (site web personnel) . Évalué à 2.

    Si je comprends ton problème, tu as une base ou tu fais des opérations de type UPDATE ou INSERT/DELETE de telle manière que tu garde le même nombre de lignes ?

    D'après la documentation de VACUUM le VACUUM normal ne redonne pas l'espace disque au système, il faut faire un VACUUM FULL pour cela, qui prends plus de temps et nécessite de poser des verrous ce qui peut poser problème pour utiliser la base par ailleurs.

    Le processus AUTOVACUUM ne fait que des VACUUM simple et donc ne retourne pas l'espace non-utilisé au système

    Routine Vacuuming explique tout cela en détail et mieux que moi.

    pour finir essaie de passer des VACUUM FULL de temps à autre et de voir si ta base continue à grossir. Si je ne me trompe pas tu devrais récupérer de l'espace disque après chaque VACUUM FULL.

    • [^] # Re: Problème de VACUUM ?

      Posté par  (site web personnel) . Évalué à 1.

      En fait si tu regarde sur ton lien la partie:

      The usual goal of routine vacuuming is to do standard VACUUMs often enough to avoid needing VACUUM FULL. [...] In this approach, the idea is not to keep tables at their minimum size, but to maintain steady-state usage of disk space.

      Cela veut clairement dire que je ne devrais pas avoir besoin de VACUUM FULL si mon VACUUM démon est bien configuré (la fréquence indiquée devrait suffire).

      Apparemment, le retrait des données d'une table n'entraine effectivement pas de libération instantanée de l'espace disque mais ça constitue un pool d'espace qui sera ré-alloué par la suite.

      Je dirais donc que pour une db avec peu de mise à jour et beaucoup de consultation, ce problème ne devrait pas apparaitre (et c'est bien pour ça que je ne comprend pas ma situation actuelle).

      Merci pour l'aide.

      • [^] # Re: Problème de VACUUM ?

        Posté par  . Évalué à 1.

        Note essaye quand même de lire la doc correspondant à ta version et non à la 9.1... Le vacuum full a été réécrit pour la version 9.

        À part cela, ton analyse me semble correcte... Peux-tu essayer de voir l'espace utilisé par les différents objets ? (commande \dS+ iirc, p-ê pas encore dispo dans la 8.4)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.