试图让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发布于 2018-05-14 02:48:12
将autovacuum_vacuum_scale_factor和autovacuum_analyze_scale_factor设置为更高的值,最好是恢复为默认值。没有必要让自动吸尘器频繁运行,特别是在您的情况下。这个想法是让它在启动后快速完成。
将autovacuum_naptime设置得更高,更接近原始默认值1分钟。
将autovacuum_max_workers恢复为3,除非您有很多数据库或表。
要使自动真空尽可能快地完成(这是目标),您应该做的是将autovacuum_vacuum_cost_delay设置为0。
如果您只有几个非常繁忙的表,最好将其设置在这些表上,就像您在问题中显示的那样。
https://stackoverflow.com/questions/50310253
复制相似问题