autovacuum 是 postgresql 里非常重要的一个服务端进程,能够自动地执行,在一定条件下自动地对 dead tuples 进行清理并对表进行分析 autovacuum参数控制 autovacuum 进程是否打开,默认为 "on"

根据postgresql.conf相关配置,理解autovacuum会在两种情况下会被触发:

  1. 表上(update,delete 记录) >= autovacuum_vacuum_scale_factor* reltuples(表上记录数) + autovacuum_vacuum_threshold

说明: 清理基本阈值是autovacuum_vacuum_threshold 清理的缩放系数是autovacuum_vacuum_scale_factor 元组的数目是 reltuples 可以从统计收集器里面获取,

  参考sql如下: SELECT reltuples from pg_class WHERE relkind = 'r' AND relname = 'test';

  1. 指定表上事务的最大年龄配置参数autovacuum_freeze_max_age,默认为2亿,达到这个阀值将触发 autovacuum进程,从而避免 wraparound。

表上的事务年龄可以通过 pg_class.relfrozenxid查询。

--例如,查询表 test_1 的事务年龄

select relname,age(relfrozenxid) from pg_class where relname='test_1';

relname | age ---------+---------- test_1 | 14208876 (1 row)