PostgreSQL参数解析autovacuum_vacuum_insert_scale_factor

1. autovacuum_vacuum_insert_scale_factor 参数介绍

autovacuum_vacuum_insert_scale_factor 参数指定了一个百分比因子,它会影响是否执行 vacuum 操作的一个阈值。我们知道当表中 insert 元组的数量大于一个阈值时,就会触发 vacuum 操作。该阈值由表的元组总数乘以该因子决定。该参数只能在 postgresql.conf 配置文件或者数据库启动命令行参数中设置。此外也可以在建表的时候指定存储参数覆盖该参数的设置。

  • 默认值 0.2
  • 最小值 0.0
  • 最大值 100.0

2. autovacuum_vacuum_insert_scale_factor 参数的内核实现

在内核中,relation_needs_vacanalyze() 函数用来判断一个表是否需要做 vacuum 操作,其中用到了 autovacuum_vacuum_insert_scale_factor 参数的值,判断的公式如下:

instuples > ( vac_ins_base_thresh + vac_ins_scale_factor * reltuples)

# instuples 表示上一次 vacuum 以来表的 insert 元组数量
# vac_ins_base_thresh 表示 autovacuum_vacuum_insert_threshold 参数值,默认值为 1000
# vac_ins_scale_factor 表示 autovacuum_vacuum_insert_scale_factor 参数值,默认值为 0.2
# reltuples 表示表的元组数量

从以上公式可以看出,在默认参数下,当一个表的 insert 元组数量超过元组总数的百分之20+1000时,会触发该表的 vacuum 操作。

3. 表的存储参数

在 create table 或者 alter table 时可以指定表的存储参数,autovacuum_vacuum_insert_scale_factor 相关的参数主要包含如下两个:

  • autovacuum_vacuum_insert_scale_factor
  • toast.autovacuum_vacuum_insert_scale_factor

使用示例:

# create table
create table t(id int, name text) with (autovacuum_vacuum_insert_scale_factor=0.1, toast.autovacuum_vacuum_insert_scale_factor=0.3);


# alter table
alter table t set(autovacuum_vacuum_insert_scale_factor=0.5);

如果指定了表的存储参数,那么其优先级高于 autovacuum_vacuum_insert_scale_factor 参数。

文章评论

0条评论