首页 > 解决方案 > 如果我将某些表的 autovacuum 比例因子设置为零,是否会对 DB 产生不利影响?

问题描述

我们在 Centos 操作系统上使用 postgres 9.2 版本。我们有大约 1300 多张桌子。我们启用了以下自动真空设置。仍然很少有总是很忙的表(84 个表)没有被清理。这些表中的死元组超过 5000 个。由于这些表正在膨胀,并且观察到的区域很少有性能下降。

autovacuum = on                             
log_autovacuum_min_duration = 100       
autovacuum_max_workers = 5  
autovacuum_naptime = 1min  
autovacuum_vacuum_threshold = 40                        
autovacuum_analyze_threshold = 20                       
autovacuum_vacuum_scale_factor = 0.1    
autovacuum_analyze_scale_factor = 0.05  
autovacuum_freeze_max_age = 200000000                       
autovacuum_vacuum_cost_delay = 30ms                     
autovacuum_vacuum_cost_limit = 1200     

# - Cost-Based Vacuum Delay -

#vacuum_cost_delay = 0ms        # 0-100 milliseconds
#vacuum_cost_page_hit = 1       # 0-10000 credits
#vacuum_cost_page_miss = 10     # 0-10000 credits
#vacuum_cost_page_dirty = 20    # 0-10000 credits
vacuum_cost_limit = 200         # 1-10000 credits   

为了避免表膨胀和性能下降,我们想为繁忙的表设置'autovacuum_vacuum_scale_factor'(零)和'autovacuum_vacuum_threshold'(200)设置,如下所示。如果我将某些表的 autovacuum 比例因子设置为零,请告诉我是否对 DB 有任何不利影响。如果是,效果如何,如何测试。

ALTER TABLE cmdevice SET (autovacuum_vacuum_scale_factor = 0, autovacuum_vacuum_threshold = 200);

请让我知道 autovacuum_vacuum_cost_delay 和 autovacuum_vacuum_cost_limit 设置的作用。

标签: postgresqlpsqlpostgresql-9.2autovacuum

解决方案


该措施不会有效。虽然它会导致 autovacuum 一直在桌子上运行,但它不会让它更快。

首先尝试提高autovacuum_vacuum_cost_limit哪个决定了 autovacuum 工作后将“小睡”到 2000 左右。

如果这不起作用,autovacuum_vacuum_cost_delay请将小睡的持续时间设置为 0。这是你能做的最好的事情。

您可以使用 仅更改具有高活动性的表的设置ALTER TABLE ... SET (...)


推荐阅读