Tôi có cần REINDEX và VACUUM một bảng sau khi xóa nhiều hàng không?


10

Tôi đang chạy một cơ sở dữ liệu PostgreSQL có một số bảng lưu trữ thông tin đăng nhập. Thông tin này chỉ dành cho mục đích báo cáo và được chuyển vào một tệp và bị xóa khỏi cơ sở dữ liệu nếu cũ hơn 30 ngày.

Có thể có hàng triệu hàng bị xóa và chúng tôi đã chạy REINDEX mỗi lần sau khi xóa.

Điều này đã đủ chưa, hay chúng ta cũng nên chạy VACUUM hoặc VACUUM ANALYZE? Hoặc là reindex không cần thiết và chúng ta nên thay vì chỉ chạy một chân không hoặc CHÂN KHÔNG PHÂN TÍCH?

Chúng tôi đang sử dụng PostgreSQL 8.2.3, mà tôi tin rằng không cho phép tự động hút bụi.


2
Bạn có thể muốn xem xét phân vùng, xem postgresql.org/docs/9.0/static/ddl-partitioning.html ; sau đó bạn chỉ có thể thả phân vùng và tránh hút bụi.
alex

3
Phiên bản 8.2.3 không có auto_vacuum, xem hướng dẫn, nhưng bạn nên cập nhật càng sớm càng tốt. Phiên bản 8.2 hiện tại là 8.2.17. Bạn đang có 14 bản vá phía sau, bao gồm một vài bản vá bảo mật. Nâng cấp lên 8.4 hoặc thậm chí 9.0 là một ý tưởng tốt hơn, auto_vacuum đã được cải thiện.
Frank Heikens

Câu trả lời:


13

Bạn nên thực hiện PHÂN TÍCH VACUUM vì VACUUM sẽ cho phép không gian được sử dụng bởi dữ liệu đã xóa và ngăn chặn giao dịch, và ANALYZE sẽ cập nhật số liệu thống kê kế hoạch sẽ dẫn đến kế hoạch truy vấn tốt hơn cho các truy vấn báo cáo của bạn.

Một REINDEX không bắt buộc về mặt lý thuyết, nhưng bạn có thể thấy rằng nó mang lại hiệu suất tốt hơn vì chỉ số này liền kề nhau.

Các trang tài liệu liên quan cho 8.2 có ở đây (chỉ mục lại thường xuyên)ở đây (hút bụi thường xuyên) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.