PostgreSQL参数autovacuum
PostgreSQL 参数 autovacuum 用于启动 autovacuum launcher 子进程,对数据库自动执行 vacuum 操作。autovacuum 参数默认值为 on,但是如果要想让 autovacuum 功能真正工作,另外一个参数 track_counts 也必须设置为 on。
- 默认值:on
- postgresql.conf 或者 server 启动的命令行中设置,需要重启生效
- autovacuum 和 track_counts 两个参数同时打开才能真正开启 autovacuum 功能
- 可以通过修改表的存储参数,实现对单个表禁用 autovacuum 功能
- 即使 autovacuum 功能是关闭的,系统在事务号快回卷的时候也会开启 autovacuum 进程来执行 vacuum 操作
修改表的存储参数,关闭 autovacuum 功能,如下:
# 创建表时指定存储参数 create table t(id text) with(autovacuum_enabled = off); # 修改表存储参数 postgres=# alter table t set(autovacuum_enabled = off); ALTER TABLE # 查看表的存储参数 postgres=# \d+ t Table "public.t" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+--------+-----------+----------+---------+----------+--------------+------------- id | text[] | | | | extended | | Access method: heap Options: autovacuum_enabled=off
内核实现上,autovacuum 参数对应全局变量 autovacuum_start_daemon。如果 autovacuum 为 on,而 track_counts 参数为 off,那么将会有一个告警日志输出出来,如下:
void autovac_init(void) { if (autovacuum_start_daemon && !pgstat_track_counts) ereport(WARNING, (errmsg("autovacuum not started because of misconfiguration"), errhint("Enable the \"track_counts\" option."))); }
以下代码表示 autovacuum 和 track_counts 两个参数都打开,才会启动 autovacuum launcher 进程。
bool AutoVacuumingActive(void) { if (!autovacuum_start_daemon || !pgstat_track_counts) return false; return true; }
文章评论
共0条评论