43.10. pg_autovacuum #
目录pg_autovacuum存放自动清理守护进程的可选逐关系配置参数。如果某个特定关系在这里有条目,则给定的参数将用于对该表做自动清理。如果没有条目,将使用系统范围的默认值。关于自动清理守护进程的更多信息,见第 22.1.4 节。
注意
pg_autovacuum很可能会在未来版本中消失,这些信息将改为保存在pg_class.reloptions条目中。
表 43.10. pg_autovacuum列
| 名字 | 类型 | 引用 | 描述 |
|---|---|---|---|
vacrelid | oid | | 此条目所属的表 |
enabled | bool | 如果为假,除了防止事务 ID 回卷之外,不会对该表做自动清理 | |
vac_base_thresh | integer | 触发清理之前所需的最小已修改元组数 | |
vac_scale_factor | float4 | 乘以reltuples后加到vac_base_thresh上的系数 | |
anl_base_thresh | integer | 触发分析之前所需的最小已修改元组数 | |
anl_scale_factor | float4 | 乘以reltuples后加到anl_base_thresh上的系数 | |
vac_cost_delay | integer | 自定义的vacuum_cost_delay参数 | |
vac_cost_limit | integer | 自定义的vacuum_cost_limit参数 | |
freeze_min_age | integer | 自定义的vacuum_freeze_min_age参数 | |
freeze_max_age | integer | 自定义的autovacuum_freeze_max_age参数 |
当已更新或已删除元组的数量超过vac_base_thresh加上vac_scale_factor乘以该关系当前估计的活元组数时,自动清理守护进程将对特定的表发起一次VACUUM操作。类似地,当已插入、已更新或已删除元组的数量超过anl_base_thresh加上anl_scale_factor乘以该关系当前估计的活元组数时,它将发起一次ANALYZE操作。
此外,当表的pg_class.relfrozenxid字段的年龄超过freeze_max_age个事务时,无论该表是否被更改过,甚至即使它的pg_autovacuum.enabled被设置为false,自动清理守护进程也会执行一次VACUUM操作以防止事务 ID 回卷。即使自动清理在其他情况下被禁用,系统也会发起自动清理来执行这样的VACUUM。关于回卷预防的更多信息,见第 22.1.3 节。
任何数值字段都可以包含-1(或者任何负值),表示该特定值应使用系统范围的默认值。注意,vac_cost_delay变量的默认值继承自autovacuum_vacuum_cost_delay配置参数,或者在前者被设置为负值时继承自vacuum_cost_delay。同样的规则也适用于vac_cost_limit。此外,自动清理会忽略把逐表的freeze_max_age设置为大于系统范围设置值的尝试(只能设置得更小),而freeze_min_age的值将被限制为系统范围autovacuum_freeze_max_age设置值的一半。注意,虽然可以把freeze_max_age设置得非常小甚至为零,这通常是不明智的,因为这会迫使频繁清理。