Question Ai-je besoin de REINDEX et de VACUUM une table après la suppression de nombreuses lignes?


J'exécute une base de données PostgreSQL qui a plusieurs tables qui stockent des informations de journalisation. Ces informations sont uniquement destinées à la génération de rapports. Elles sont sauvegardées dans un fichier et supprimées de la base de données si elles datent de plus de 30 jours.

Des millions de lignes peuvent être supprimées et nous avons exécuté un REINDEX après chaque suppression.

Est-ce suffisant ou devrions-nous également exécuter une analyse VACUUM ou VACUUM ANALYSE? Ou bien le REINDEX n'est pas nécessaire et nous devrions plutôt juste exécuter une ANALYSE VACUUM ou VACUUM?

Nous utilisons PostgreSQL 8.2.3, qui, à mon avis, ne permet pas le nettoyage automatique.


9
2017-09-23 16:44


origine


Vous voudrez peut-être envisager de partitionner, voir postgresql.org/docs/9.0/static/ddl-partitioning.html ; alors vous pouvez simplement laisser tomber les partitions et éviter de passer l'aspirateur. - alex
La version 8.2.3 a auto_vacuum, voir le manuel, mais vous devez mettre à jour dès que possible. La version 8.2 actuelle est 8.2.17. Vous avez 14 correctifs, y compris quelques correctifs de sécurité. Une mise à niveau vers la version 8.4 ou même la version 9.0 est une meilleure idée. Auto_vacuum a été amélioré. - Frank Heikens


Réponses:


Vous devez effectuer une ANALYSE VACUUM, car VACUUM autorisera la réutilisation de l’espace utilisé par les données supprimées et empêchera l’enveloppement des transactions. ANALYZE mettra à jour les statistiques du planificateur, ce qui devrait permettre d’optimiser les plans de requête pour vos requêtes de génération de rapports.

Théoriquement, un REINDEX n'est pas requis, mais vous constaterez peut-être qu'il en résulte de meilleures performances car l'index est contigu.

Les pages de documentation pertinentes pour 8.2 sont ici (ré-index de routine) et ici (aspiration de routine).


12
2017-09-23 17:45