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 PREPARED
oderROLLBACK PREPARED
um 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.