Tôi không nghĩ rằng bạn cần hút bụi bằng tay, trừ khi bạn bắt đầu thấy sự suy giảm hiệu suất. Tuy nhiên, tôi thực sự khuyên bạn nên xem lại cài đặt chân không và tự động của bạn và điều chỉnh nó theo nhu cầu của bạn
Để xem các cài đặt hiện tại của bạn, hãy chạy truy vấn này:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Hầu hết các lĩnh vực là tự giải thích, nhưng đây là tài liệu về chúng:
https://www.postgresql.org/docs/civerse/static/r nb-config-autovacuum.html
Tôi có thể nói, mục tiêu của bạn là cấu hình autovacuum để dọn rác một cách nhất quán, nhưng đừng chạy autovacuum liên tục
Các cài đặt quan trọng nhất là:
- autovacuum_vacuum_scale_factor - xác định tỷ lệ phần trăm của bộ dữ liệu có thể bị chết trước khi dọn dẹp được kích hoạt. Giá trị mặc định = 0,2
- autovacuum_vacuum_thr Ngưỡng - số lượng tuple chết tối thiểu trước khi dọn dẹp được kích hoạt. Giá trị mặc định = 50
Ngưỡng giúp ngăn quá trình dọn dẹp được kích hoạt quá thường xuyên đối với các bảng nhỏ.
Cài đặt mặc định hoạt động ổn, trừ khi bạn có các bảng rất lớn. Nói một cách đơn giản, nếu bạn tình cờ có bảng mất 100 GB, bạn sẽ tích lũy được 20 GB rác, trước khi chế độ tự động sẽ được kích hoạt. Vì vậy, tôi thường khuyên bạn nên đặt hệ số tỷ lệ thấp. Làm thế nào thấp bạn nên xác định cho chính mình. Tôi sử dụng 0,05 cho dự án hiện tại của tôi
Ngưỡng cũng có thể được tăng lên. Nhiều ứng dụng có một vài bảng, thường xuyên được cập nhật và 50 bộ dữ liệu không nhiều. Tăng lên 1000 không dẫn đến bất kỳ vấn đề nào, nhưng tất nhiên, bạn nên xem xét trường hợp của riêng mình
Bạn cũng có thể tinh chỉnh autovacuum và có các cài đặt khác nhau cho một số bảng của bạn
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Nếu bạn định cấu hình scale_factor và ngưỡng, bạn sẽ ổn. Bạn cũng có thể tăng autovacuum_vacuum_cost_limit
, theo mặc định là bằng vacuum_cost_limit
, được đặt thành 200. Đây là một tính năng rất quan trọng của chân không, không cho phép nó ăn hết tài nguyên và cho phép ứng dụng của bạn hoạt động với dữ liệu ngay cả trong quá trình hút bụi , nhưng giá trị mặc định là quá thấp. Tăng nó lên 1000 không dẫn đến bất kỳ sự chậm trễ đáng kể nào, nhưng sẽ cho phép quá trình chân không kết thúc nhanh hơn nhiều
Tất nhiên, bạn cũng có thể chạy chân không bằng tay. Trong trường hợp đơn giản nhất, bạn có thể có một công việc định kỳ đơn giản, công việc này sẽ dọn dẹp hoàn toàn mỗi đêm, khi DB của bạn không được truy cập thường xuyên
Mong rằng sẽ giúp!