我们在 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 设置的作用。