PostgreSQL 中 autovacuum 中的 autovacuum_vacuum_cost_delay 是什么?

What is autovacuum_vacuum_cost_delay in autovacuum in PostgreSQL?

我正在尝试使用配置文件中的以下配置参数调整 PostgreSQL 服务器:

autovacuum_freeze_max_age = 500000000
autovacuum_max_workers = 6
autovacuum_naptime = '15s'
autovacuum_vacuum_cost_delay = 0
maintenance_work_mem = '10GB'
vacuum_freeze_min_age = 10000000

我想了解 autovacuum_vacuum_cost_delay 的作用。我试着在 google 上搜索了很多,但没有找到足够好的东西来理解。

The documentation refers to vacuum_cost_delay,表示:

The amount of time that the process will sleep when the cost limit has been exceeded.

这是一个减慢 autovacuum 的功能。每当 autovacuum worker 工作时(删除一个元组,读取一个块,......),它收集工作点。一旦这些点超过 autovacuum_vacuum_cost_limit(默认为 200),它就会暂停 autovacuum_vacuum_cost_delay.

原因是VACUUM使用了很多资源,所以默认放慢速度,希望不会影响正常操作。但是,如果 autovacuum 太慢,您最终可能会得到臃肿的表格。