5
PostgreSQL上的Aggressive Autovacuum
我试图让PostgreSQL主动自动清理数据库。我目前已将自动吸尘配置如下: autovacuum_vacuum_cost_delay = 0#关闭基于成本的真空 autovacuum_vacuum_cost_limit = 10000#最大值 autovacuum_vacuum_threshold = 50#默认值 autovacuum_vacuum_scale_factor = 0.2#默认值 我注意到只有在数据库未处于负载状态时才会启动自动清理功能,因此我遇到了这样的情况:死元组比活动元组多得多。有关示例,请参见随附的屏幕截图。其中一张桌子有23个活动元组,但有16845个死元组正在等待真空。太疯狂了! 当测试运行完成并且数据库服务器处于空闲状态时,自动吸尘器将启动,这不是我想要的,因为当失效的元组的数量超过20%的活动元组+ 50时,我希望自动吸尘器启动,因为数据库已经配置。服务器空闲时自动清理对我来说毫无用处,因为生产服务器在持续的时间内有望达到每秒数千次的更新,这就是即使服务器负载时我也需要运行自动清理的原因。 有什么我想念的吗?在服务器负载较重时,如何强制自动吸尘器运行? 更新资料 难道这是一个锁定问题?有问题的表是汇总表,这些表是通过插入后触发器填充的。这些表被锁定为SHARE ROW EXCLUSIVE模式,以防止并发写入同一行。