我们正在为我们的生产评估 PostgreSQL 11.1。拥有一个每秒更新 4251 次、每秒删除约 1000 次、每秒插入约 3221 次、每天处理 10 亿次事务的系统,我们面临的挑战是 PostgreSQL 不重用其(删除/更新)空间,并且表的大小不断增加.
我们配置了激进的 Autovacuum 设置以避免环绕情况。还尝试添加定期执行vacuum analyze
和vacuum
- 仍然没有空间重用。(仅vacuum full
或pg_repack
向操作系统释放空间——但这不是重用。)
以下是我们的真空设置:
autovacuum | on
vacuum_cost_limit | 6000
autovacuum_analyze_threshold | 50
autovacuum_vacuum_threshold | 50
autovacuum_vacuum_cost_delay | 5
autovacuum_max_workers | 32
autovacuum_freeze_max_age | 2000000
autovacuum_multixact_freeze_max_age | 2000000
vacuum_freeze_table_age | 20000
vacuum_multixact_freeze_table_age | 20000
vacuum_cost_page_dirty | 20
vacuum_freeze_min_age | 10000
vacuum_multixact_freeze_min_age | 10000
log_autovacuum_min_duration | 1000
autovacuum_naptime | 10
autovacuum_analyze_scale_factor | 0
autovacuum_vacuum_scale_factor | 0
vacuum_cleanup_index_scale_factor | 0
vacuum_cost_delay | 0
vacuum_defer_cleanup_age | 0
autovacuum_vacuum_cost_limit | -1
autovacuum_work_mem | -1