1 Vacuum启动频率太低
参数 | 建议 |
---|---|
autovacuum_vacuum_scale_factor | 当update,delete的tuples数量超过 autovacuum_vacuum_scale_factor * table_size autovacuum_vacuum_threshold 时,进行vacuum;对大量删除、更新的表可以适当降低这个值。 |
autovacuum_vacuum_threshold | 同上配合使用。 |
autovacuum_naptime | launcher会分配到每个DB上,如果有两个db配置1min,launcher会30s拉起一个worker。 |
2 Vacuum单次太慢
为什么慢分析:https://www.postgresql.org/docs/14/progress-reporting.html#VACUUM-PROGRESS-REPORTING
参数 | 建议 |
---|---|
autovacuum_vacuum_cost_delay | 结合下面的参数使用,可以配0不休眠 |
autovacuum_vacuum_cost_limit | vacuum干活会积累work point,超过autovacuum_vacuum_cost_limit后,开始休眠autovacuum_vacuum_cost_delay |
autovacuum_max_workers | 看CPU负载适当增加 |
shared_buffers | 增加缓存间接增加vacuum速度 |
autovacuum_work_mem | 单次可以处理更多的dead tuple |
maintenance_work_mem | 单次可以处理更多的dead tuple |
max_parallel_maintenance_workers | 执行Vacuum DDL时可以并发 |
3 Vacuum没有效果
参数 | Recommendation建议 |
---|---|
statement_timeout | 避免长事务 |
idle_in_transaction_session_timeout | 避免空闲长事务 |
log_min_duration_statement | 记录长事务 |
hot_standby_feedback | 打开后,备库的长事务查询会一直阻塞主库的清理动作 |
vacuum_defer_cleanup_age | 保留了太多的事务,可以适当减小 |
复制槽卡回收位置 | 复制槽一直在无法清理:pg_replication_slots |
二两阶段事务卡回收位置 | 一阶段提交的时候一直没有二阶段提交:pg_prepared_xacts |