Chúng tôi có một sản phẩm sử dụng máy chủ cơ sở dữ liệu PostgreSQL được triển khai tại một vài trăm máy khách. Một số người trong số họ đã thu thập hàng chục gigabyte dữ liệu trong những năm qua. Vì vậy, trong phiên bản tiếp theo, chúng tôi sẽ giới thiệu các quy trình làm sạch tự động sẽ dần dần lưu trữ và DELETE hồ sơ cũ trong các công việc hàng loạt hàng đêm.PostgresQL Tự động VACUUM ĐẦY ĐỦ cho các bảng cồng kềnh
Nếu tôi hiểu chính xác, autovacuum sẽ bắt đầu và phân tích và tổ chức lại các bộ dữ liệu, do đó hiệu suất sẽ giống như khi có ít bản ghi hơn.
Không gian đĩa thực tế sẽ không được phát hành, nếu tôi hiểu đúng, vì đó chỉ xảy ra với một CHÂN KHÔNG ĐẦY ĐỦ, và đó không phải được kích hoạt bởi autovacuum.
Vì vậy, tôi đã suy nghĩ về một quy trình tự động sẽ thực hiện việc này.
Tôi đã tìm thấy chế độ xem bloat được sử dụng bởi nagios check_postgres tại http://wiki.postgresql.org/wiki/Show_database_bloat.
Chế độ xem này có tốt không? Tôi có đúng khi hiểu rằng nếu tbloat là> 2, nó có thể sử dụng VACUUM FULL không? Và nếu ibloat quá cao, nó có thể sử dụng REINDEX không?
Bất kỳ nhận xét nào về công việc sau để chạy như công việc hàng ngày?
vacuumdb -Z mydatabase
#vacuum với phân tích chỉselect tablename from bloatview order by tbloat desc limit 1
vacuumdb -f -t tablename mydatabase
select tablename, iname from bloatview order by ibloat desc limit 1
reindexdb -t tablename -i iname mydatabase
Tắt Tất nhiên, tôi vẫn cần phải quấn nó trong một kịch bản perl ngơi thoải mái tại crontab (chúng tôi đang sử dụng ubuntu 12), hoặc không postgresql có một số loại của scheduler tôi có thể làm điều này với?
Hoặc là tổng số quá mức cần thiết này và có quy trình đơn giản hơn nhiều không?
vacuumdb -Z có lẽ là không cần thiết, autovacuum dường như làm một công việc khá tốt để giữ phân tích được cập nhật. – greyfairer