Vacuum PostgreSQL DB de PHP
-
07-07-2019 - |
Question
Je souhaite nettoyer une base de données PostgreSQL à partir de PHP.
J'ai essayé ceci:
pg_query($conn,"vacuum analyse;");
Comment puis-je savoir si cela fonctionne?
La solution 2
Exécutez cette requête avant et après l'exécution de la requête vide. Si, après le vide, l'âge est inférieur à ce qu'il était avant, alors le vide a fonctionné avec succès.
SELECT age(datfrozenxid) as age FROM pg_database where datname='your_db';
Autres conseils
Première question: pourquoi avez-vous fait VACUUM FULL ? Cela n'a pas de sens. Il ne devrait pratiquement jamais être appelé.
Deuxièmement: Utiliser le vide à partir de php (probablement une page Web) peut être problématique. Le vide peut facilement prendre plus de 3 minutes, ce qui correspond (si je me souviens bien) au délai d’expiration standard pour les demandes Web.
La meilleure solution consiste à utiliser autovacuum. Si vous ne pouvez pas utiliser autovacuum, planifiez les appels de vacuumdb à l’aide de cron.
En supposant que votre vide dure plus de quelques secondes, vous pouvez exécuter le paramètre " SELECT * FROM pg_stat_activity
". dans un client postgres pour obtenir une liste des requêtes en cours d’exécution. Votre requête VACUUM devrait apparaître là-bas.
Je crois que cela ne renvoie pas d'erreur, cela fonctionne probablement. Voici la documentation sur le vide.
http://www.postgresql.org/docs/current /interactive/sql-vacuum.html