Je ne pense pas que vous ayez besoin de passer l'aspirateur manuellement, sauf si vous commencez à voir une dégradation des performances. Cependant, je recommanderais fortement de revoir vos paramètres de vide et de vide automatique et de l'adapter à vos besoins
Pour voir vos paramètres actuels, exécutez cette requête:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
La plupart des champs sont explicites, mais voici la documentation à leur sujet:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Je dirais que votre objectif devrait être de configurer automatiquement le vide pour nettoyer les ordures, mais ne lancez pas le vide automatiquement en permanence
Les paramètres les plus importants sont:
- autovacuum_vacuum_scale_factor - détermine le pourcentage de tuples qui peuvent être morts avant le déclenchement d'un nettoyage. Valeur par défaut = 0,2
- autovacuum_vacuum_threshold - nombre minimum de tuples morts avant le déclenchement du nettoyage. Valeur par défaut = 50
Le seuil permet d'éviter que le processus de nettoyage soit déclenché trop souvent pour les petites tables.
Les paramètres par défaut fonctionnent bien, sauf si vous avez de très grandes tables. Autrement dit, si vous avez une table qui prend 100 Go, vous allez accumuler 20 Go de déchets, avant que l'auto-vide ne se déclenche. Ainsi, je recommande généralement de définir un facteur d'échelle bas. À quel point vous devez déterminer par vous-même. J'utilise 0,05 sur mon projet actuel
Les seuils peuvent également être augmentés. De nombreuses applications ont quelques tables, qui sont fréquemment mises à jour et 50 tuples ce n'est pas tant que ça. Augmenter cela à 1000 ne devrait pas poser de problème, mais bien sûr, vous devriez considérer votre propre cas
Vous pouvez également affiner l'autovacuum et avoir des paramètres différents pour certaines de vos tables
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Si vous configurez scale_factor et les seuils, tout devrait bien se passer. Vous pouvez également augmenter autovacuum_vacuum_cost_limit
, ce qui équivaut par défaut à vacuum_cost_limit
, qui est défini sur 200. Il s'agit d'une caractéristique très importante du vide, qui ne lui permet pas de consommer toutes les ressources et permet à votre application de fonctionner avec des données même pendant le processus de nettoyage. , mais la valeur par défaut est trop faible. L'augmenter à 1000 ne devrait pas entraîner de retards importants, mais permettra au processus de vide de se terminer beaucoup plus rapidement
Bien sûr, vous pouvez également exécuter le vide manuellement. Dans le cas le plus simple, vous pouvez avoir un travail cron simple, qui fera un nettoyage complet tous les soirs, lorsque votre base de données n'est pas fréquemment consultée
J'espère que cela pourra aider!