Sử dụng VACUUM (VERBOSE)
để có được số liệu thống kê chi tiết về những gì nó đang làm và tại sao.
Có ba lý do tại sao không thể loại bỏ các bộ dữ liệu chết:
-
Có một giao dịch đang chạy dài mà chưa được đóng. Bạn có thể tìm thấy những chàng trai hư với
SELECT pid, datname, usename, state, backend_xmin FROM pg_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC;
Bạn có thể loại bỏ giao dịch bằng
pg_cancel_backend()
hoặcpg_terminate_backend()
. -
Có những giao dịch đã chuẩn bị nhưng chưa được cam kết. Bạn có thể tìm thấy chúng bằng
SELECT gid, prepared, owner, database, transaction FROM pg_prepared_xacts ORDER BY age(transaction) DESC;
Người dùng
COMMIT PREPARED
hoặcROLLBACK PREPARED
để đóng chúng. -
Có các khe sao chép không được sử dụng. Tìm chúng bằng
SELECT slot_name, slot_type, database, xmin FROM pg_replication_slots ORDER BY age(xmin) DESC;
Sử dụng
pg_drop_replication_slot()
để xóa vị trí sao chép không sử dụng.