Използвайте VACUUM (VERBOSE)
за да получите подробна статистика за това какво прави и защо.
Има три причини, поради които мъртвите кортежи не могат да бъдат премахнати:
-
Има продължителна транзакция, която не е приключена. Можете да намерите лошите момчета с
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;
Можете да се отървете от транзакция с
pg_cancel_backend()
илиpg_terminate_backend()
. -
Има подготвени транзакции, които не са ангажирани. Можете да ги намерите с
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;
Потребител
COMMIT PREPARED
илиROLLBACK PREPARED
за да ги затворите. -
Има слотове за репликация, които не се използват. Намерете ги с
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;
Използвайте
pg_drop_replication_slot()
за да изтриете неизползван слот за репликация.