【问题标题】:Postgresql 9.3 Autovacuum not keeping up despite aggressive settings尽管设置激进,但 Postgresql 9.3 Autovacuum 仍无法跟上
【发布时间】:2018-05-12 20:05:35
【问题描述】:

试图让 Postgresql 保持表更清洁,但即使调整了资源限制,它似乎也几乎没有跟上。

即使在设置之后

ALTER TABLE veryactivetable SET (autovacuum_vacuum_threshold = 10000);

veryactivetable 的 pg_stat_user_tables 返回 63356 n_dead_tup 并且 last_autoanalyze 和 last_autovacuum 已超过 24 小时

posgresql.conf 设置:

shared_buffers = 7680MB
work_mem = 39321kB

maintenance_work_mem = 1920MB

vacuum_cost_delay = 0
vacuum_cost_page_hit = 1000
vacuum_cost_page_miss = 1000
vacuum_cost_page_dirty = 2000
vacuum_cost_limit = 7000


autovacuum = on
log_autovacuum_min_duration = 0
autovacuum_max_workers = 10
autovacuum_naptime = 10s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.05
autovacuum_freeze_max_age = 200000000
autovacuum_vacuum_cost_delay = 50ms
autovacuum_vacuum_cost_limit = 7000

【问题讨论】:

    标签: postgresql postgresql-9.3 vacuum autovacuum


    【解决方案1】:

    autovacuum_vacuum_scale_factorautovacuum_analyze_scale_factor 设置为更高的值,最好恢复为默认值。不需要让 autovacuum 运行得比必要的更频繁,尤其是在您的情况下。我们的想法是让它在开始后快速完成。

    autovacuum_naptime 设置得更高,更接近一分钟的原始默认值。

    autovacuum_max_workers 恢复为 3,除非您有很多数据库或很多表。

    为了使 autovacuum 尽快完成(这是目标),您应该将autovacuum_vacuum_cost_delay 设置为 0。

    如果您只有几张非常繁忙的桌子,最好像您在问题中显示的那样将其设置在那些桌子上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2021-04-13
      • 2016-10-13
      • 2020-10-17
      • 2012-12-08
      相关资源
      最近更新 更多