Tôi quản lý một cơ sở dữ liệu lớn (vài trăm hợp đồng biểu diễn) có chứa các bảng với nhiều vai trò khác nhau, một số trong số chúng chứa hàng triệu bản ghi. Một số bảng chỉ nhận được số lượng lớn chèn và xóa, một số bảng khác chèn và số lượng cập nhật lớn.
Cơ sở dữ liệu chạy trên PostgreSQL 8.4 trên hệ thống Debian 6.0 amd64 với 16 gigabyte RAM.
Câu hỏi đôi khi là quá trình tự động trên bàn, mất một thời gian rất dài (ngày) để hoàn thành. Tôi muốn có thể nói đại khái là một lệnh chân không cụ thể sẽ mất bao nhiêu thời gian, để có thể quyết định có nên hủy nó hay không. Ngoài ra nếu có một chỉ báo tiến độ cho các hoạt động chân không postgres, nó sẽ thực sự hữu ích.
Biên tập:
Tôi không tìm kiếm một giải pháp chống đạn. Chỉ cần một gợi ý sơ bộ về số lượng bộ dữ liệu chết hoặc byte I / O cần thiết là đủ để quyết định. Thật sự rất khó chịu khi không có manh mối khi nào VACUUM
sẽ kết thúc, dù thế nào đi nữa.
Tôi đã thấy rằng pg_catalog.pg_stat_all_tables
có một cột cho số bộ dữ liệu chết. Vì vậy, có thể có một ước tính, ngay cả khi nó có nghĩa là người ta phải ANALYZE
bàn trước đó. Mặt khác, autovacuum_vacuum_threshold
và autovacuum_vacuum_scale_factor
các thiết lập một mình chứng minh rằng chính postgres biết điều gì đó về lượng thay đổi trên các bảng và có lẽ cũng đặt nó vào tay DBA.
Tôi không chắc chắn nên chạy truy vấn nào, bởi vì khi tôi chạy VACUUM VERBOSE
, tôi thấy rằng không chỉ các bảng mà cả các chỉ mục trên chúng cũng đang được xử lý.