Utilisez VACUUM (VERBOSE)
pour obtenir des statistiques détaillées sur ce qu'il fait et pourquoi.
Il y a trois raisons pour lesquelles les lignes mortes ne peuvent pas être supprimées :
-
Il existe une transaction de longue durée qui n'a pas été fermée. Vous pouvez trouver les mauvais garçons avec
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;
Vous pouvez vous débarrasser d'une transaction avec
pg_cancel_backend()
oupg_terminate_backend()
. -
Il existe des transactions préparées qui n'ont pas été validées. Vous pouvez les trouver avec
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;
Utilisateur
COMMIT PREPARED
ouROLLBACK PREPARED
pour les fermer. -
Il existe des emplacements de réplication qui ne sont pas utilisés. Trouvez-les avec
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;
Utilisez
pg_drop_replication_slot()
pour supprimer un emplacement de réplication inutilisé.