PostgreSQL的autovacuum中的autovacuum_vacuum_cost_delay是什么?

问题描述

我正在尝试使用配置文件中的以下配置参数来调整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是指vacuum_cost_delay,它表示:

超过成本限制时,进程将进入休眠状态的时间。

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

原因是VACUUM使用了大量资源,因此默认情况下会降低它的速度,以免对正常操作造成干扰。但是,如果自动清理速度太慢,则可能导致表膨胀。