Verwenden Sie VACUUM (VERBOSE) um detaillierte Statistiken darüber zu erhalten, was es tut und warum.
Es gibt drei Gründe, warum tote Tupel nicht entfernt werden können:
-
Es gibt eine lange laufende Transaktion, die noch nicht abgeschlossen wurde. Du kannst die bösen Jungs finden mit
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;Sie können eine Transaktion mit
pg_cancel_backend()loswerden oderpg_terminate_backend(). -
Es gibt vorbereitete Transaktionen, die nicht festgeschrieben wurden. Sie finden sie mit
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;Benutzer
COMMIT PREPAREDoderROLLBACK PREPAREDum sie zu schließen. -
Es gibt Replikationsslots, die nicht verwendet werden. Finden Sie sie mit
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;Verwenden Sie
pg_drop_replication_slot()um einen unbenutzten Replikationsslot zu löschen.