Tôi đang cố gắng để PostgreSQL tích cực tự động hút sạch cơ sở dữ liệu của tôi. Hiện tại tôi đã cấu hình chân không tự động như sau:
- autovacuum_vacuum_cost_delay = 0 # Tắt chân không dựa trên chi phí
- autovacuum_vacuum_cost_limit = 10000 #Max giá trị
- autovacuum_vacuum_thr Ngưỡng = 50 # Giá trị lỗi
- autovacuum_vacuum_scale_factor = 0,2 # Giá trị lỗi
Tôi nhận thấy rằng máy hút bụi tự động chỉ khởi động khi cơ sở dữ liệu không tải, vì vậy tôi gặp phải tình huống có nhiều bộ dữ liệu chết hơn so với bộ dữ liệu trực tiếp. Xem ảnh chụp màn hình đính kèm để biết ví dụ. Một trong số các bảng có 23 bộ dữ liệu trực tiếp nhưng 16845 bộ dữ liệu chết đang chờ chân không. Điều đó thật điên rồ!
Máy hút bụi tự động khởi động khi quá trình chạy thử kết thúc và máy chủ cơ sở dữ liệu không hoạt động, đó không phải là điều tôi muốn vì tôi muốn máy hút bụi tự động khởi động bất cứ khi nào số lượng tuple chết vượt quá 20% bộ dữ liệu trực tiếp + 50, vì cơ sở dữ liệu đã được cấu hình. Tự động hút bụi khi máy chủ không hoạt động là vô dụng đối với tôi, vì máy chủ sản xuất dự kiến sẽ đạt 1000 giây cập nhật / giây trong một thời gian duy trì, đó là lý do tại sao tôi cần máy hút bụi tự động để chạy ngay cả khi máy chủ đang tải.
Có điều gì tôi đang thiếu? Làm cách nào để buộc chân không tự động chạy trong khi máy chủ đang tải nặng?
Cập nhật
Đây có thể là một vấn đề khóa? Các bảng trong câu hỏi là các bảng tóm tắt được điền thông qua một trình kích hoạt chèn sau. Các bảng này được khóa trong chế độ CHIA SẺ ROW EXCLUSIVE để ngăn việc ghi đồng thời vào cùng một hàng.