从 PG 9.1 升级到 PG 9.5 会导致出现许多表达到其 XID 冻结限制的情况。结果,正在运行的系统在许多表上运行 autovacuum 进程,其中许多表示“(以防止回绕)”。到目前为止,这是一个非常繁忙的数据库,所以我并不感到惊讶。
由于我不能强制 autovacuum 不执行此操作,而且这样做不是一个好主意,因此我重新配置了原本空闲的数据库以高活动率运行 autovacuum,因此它会更快地完成(希望如此),我们可以得到回到正题。
我在我的 postgres.conf 中临时设置了以下内容,它似乎工作得很好。真正得到 I/O 启动。我省略了优化 WAL 大小和事务的其他设置,因为这高度依赖于系统:
# TEMPORARY -- aggressive autovacuum
autovacuum_max_workers = 16 # max number of autovacuum subprocesses
autovacuum_vacuum_cost_delay = 4ms # default vacuum cost delay for
# autovacuum, in milliseconds;
autovacuum_vacuum_cost_limit = 10000 # default vacuum cost limit for autovacuum
我停止并启动数据库服务器,然后使用 shell 调用监视发生的事务,如下所示:
watch -d -n 300 psql -c "select query from pg_stat_activity;"