Użyj VACUUM (VERBOSE)
aby uzyskać szczegółowe statystyki tego, co robi i dlaczego.
Istnieją trzy powody, dla których nie można usunąć martwych krotek:
-
Istnieje długo trwająca transakcja, która nie została zamknięta. Złych chłopców możesz znaleźć za pomocą
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;
Możesz pozbyć się transakcji za pomocą
pg_cancel_backend()
lubpg_terminate_backend()
. -
Są przygotowane transakcje, które nie zostały zrealizowane. Możesz je znaleźć za pomocą
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;
Użytkownik
COMMIT PREPARED
lubROLLBACK PREPARED
aby je zamknąć. -
Istnieją gniazda replikacji, które nie są używane. Znajdź je za pomocą
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;
Użyj
pg_drop_replication_slot()
aby usunąć nieużywane gniazdo replikacji.