Autovacuum là tiến trình nền tự động chạy hai việc trên từng bảng:
1. VACUUM — thu hồi không gian của dead tuple để tái sử dụng, cập nhật visibility map, và đẩy lùi ngưỡng transaction ID wraparound.
2. ANALYZE — cập nhật thống kê phân bố dữ liệu để planner chọn plan đúng.
Nó khởi động khi số dòng thay đổi vượt ngưỡng, mặc định khoảng autovacuum_vacuum_threshold (50) cộng autovacuum_vacuum_scale_factor (0.2) nhân số dòng — tức khoảng 20% bảng bị thay đổi.
Khi nào không kịp:
- Bảng rất lớn: 20% của bảng 100 triệu dòng là 20 triệu thay đổi — quá muộn. Hạ autovacuum_vacuum_scale_factor riêng cho bảng đó.
- Transaction chạy dài (kể cả trên replica có hot_standby_feedback) giữ snapshot cũ → vacuum không được phép dọn tuple mà transaction đó có thể còn cần.
- Bị throttle: autovacuum_vacuum_cost_delay giới hạn I/O; bảng ghi nhanh hơn tốc độ dọn.
- Quá ít worker: autovacuum_max_workers mặc định 3, nhiều bảng lớn phải xếp hàng.
alter table events set (autovacuum_vacuum_scale_factor = 0.02);