PostgreSQL参数解析autovacuum_vacuum_threshold
1. autovacuum_vacuum_threshold 参数介绍
autovacuum_vacuum_threshold 参数指定了一个表中 update 或者 delete 的最小阈值,超过该阈值就会触发 vacuum 操作。该参数只能在 postgresql.conf 配置文件或者数据库启动命令行参数中设置。此外也可以在建表的时候指定存储参数覆盖该参数的设置。
- 默认值 50
- 最小值 0
- 最大值 INT_MAX
2. autovacuum_vacuum_threshold 参数的内核实现
在内核中,relation_needs_vacanalyze() 函数用来判断一个表是否需要做 vacuum 操作,其中用到了 autovacuum_vacuum_threshold 参数的值,判断的公式如下:
n_dead_tuples > ( vac_base_thresh + vac_scale_factor * reltuples) # n_dead_tuples 表示表的死元组数量 # vac_base_thresh 表示 autovacuum_vacuum_threshold 参数值,默认值为 50 # vac_scale_factor 表示 autovacuum_vacuum_scale_factor 参数值,默认值为 0.2 # reltuples 表示表的元组数量
从以上公式可以看出,在默认参数下,当一个表的死元组数量超过元组总数的百分之20+50时,会触发该表的 vacuum 操作。
3. 表的存储参数
在 create table 或者 alter table 时可以指定表的存储参数,autovacuum_vacuum_threshold 相关的参数主要包含如下两个:
- autovacuum_vacuum_threshold
- toast.autovacuum_vacuum_threshold
使用示例:
# create table create table t(id int, name text) with (autovacuum_vacuum_threshold=100, toast.autovacuum_vacuum_threshold=200); # alter table alter table t set(autovacuum_vacuum_threshold=500);
如果指定了表的存储参数,那么其优先级高于 autovacuum_vacuum_threshold 参数。
文章评论
共0条评论