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 PREPAREDouROLLBACK PREPAREDpour 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é.