Gunakan VACUUM (VERBOSE)
untuk mendapatkan statistik terperinci tentang apa yang dilakukannya dan mengapa.
Ada tiga alasan mengapa tupel mati tidak dapat dihapus:
-
Ada transaksi lama yang belum ditutup. Anda dapat menemukan anak-anak nakal dengan
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;
Anda dapat menghapus transaksi dengan
pg_cancel_backend()
ataupg_terminate_backend()
. -
Ada transaksi yang disiapkan yang belum dilakukan. Anda dapat menemukannya dengan
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;
Pengguna
COMMIT PREPARED
atauROLLBACK PREPARED
untuk menutupnya. -
Ada slot replikasi yang tidak digunakan. Temukan mereka dengan
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;
Gunakan
pg_drop_replication_slot()
untuk menghapus slot replikasi yang tidak digunakan.