受支持版本: 17 / 16 / 15 / 14

19.10. 自动清理 #

这些设置控制自动清理功能的行为。更多信息请参见 Section 24.1.6。请注意,其中许多设置都可以按表覆盖; 详情见 Storage Parameters

autovacuum (boolean) #

控制服务器是否运行 autovacuum 启动器守护进程。默认值为开启; 不过,autovacuum 要正常工作还必须启用 track_counts。 该参数只能在 postgresql.conf 文件或服务器命令行中设置; 不过,可以通过更改表存储参数为单个表禁用自动清理。

注意即使该参数被禁用,系统也会在有必要防止事务 ID 回卷时启动自动清理进程。 详情请参见 Section 24.1.5

autovacuum_max_workers (integer) #

指定同一时间允许运行的自动清理进程(不包括 autovacuum 启动器)的最大数量。 默认值为 3。该参数只能在服务器启动时设置。

autovacuum_naptime (integer) #

指定自动清理在任意给定数据库上运行之间的最小延迟。每一轮中,守护进程会检查数据库, 并根据需要为其中的表发出 VACUUMANALYZE 命令。 如果未指定单位,则按秒计。默认值为 1 分钟(1min)。 该参数只能在 postgresql.conf 文件或服务器命令行中设置。

autovacuum_vacuum_threshold (integer) #

指定在任意一个表上触发 VACUUM 所需的最少已更新或已删除元组数。 默认值为 50 个元组。该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_vacuum_insert_threshold (integer) #

指定在任意一个表上触发 VACUUM 所需的已插入元组数。 默认值为 1000 个元组。若指定为 -1,则 autovacuum 不会根据插入数量 在任何表上触发 VACUUM。 该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_analyze_threshold (integer) #

指定在任意一个表上触发 ANALYZE 所需的最少已插入、已更新或已删除元组数。 默认值为 50 个元组。该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_vacuum_scale_factor (floating point) #

指定一个表尺寸的分数,在决定是否触发 VACUUM 时将它加到 autovacuum_vacuum_threshold 上。默认值为 0.2(表尺寸的 20%)。 该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_vacuum_insert_scale_factor (floating point) #

指定一个表尺寸的分数,在决定是否触发 VACUUM 时将它加到 autovacuum_vacuum_insert_threshold 上。默认值为 0.2(表尺寸的 20%)。 该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_analyze_scale_factor (floating point) #

指定一个表尺寸的分数,在决定是否触发 ANALYZE 时将它加到 autovacuum_analyze_threshold 上。默认值为 0.1(表尺寸的 10%)。 该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_freeze_max_age (integer) #

指定在必须强制执行 VACUUM 以防止表内事务 ID 回卷之前, 一个表的 pg_class.relfrozenxid 字段可以达到的最大年龄(以事务计)。注意即使自动清理被禁用,系统也会启动自动清理进程来防止回卷。

清理还允许从 pg_xact 子目录中移除旧文件,这也是为什么默认值相对较低, 为 2 亿个事务。该参数只能在服务器启动时设置,不过可以通过更改表存储参数为单个表降低这个值。 更多信息请参见 Section 24.1.5

autovacuum_multixact_freeze_max_age (integer) #

指定在必须强制执行 VACUUM 以防止表内 multixact ID 回卷之前, 一个表的 pg_class.relminmxid 字段可以达到的最大年龄(以 multixact 计)。注意即使自动清理被禁用,系统也会启动自动清理进程来防止回卷。

清理 multixact 还允许从 pg_multixact/memberspg_multixact/offsets 子目录中移除旧文件,这也是为什么默认值相对较低, 为 4 亿个 multixact。该参数只能在服务器启动时设置,不过可以通过更改表存储参数为单个表降低这个值。 更多信息请参见 Section 24.1.5.1

autovacuum_vacuum_cost_delay (floating point) #

指定自动 VACUUM 操作中要使用的代价延迟值。如果指定为 -1, 则使用常规的 vacuum_cost_delay 值。如果未指定单位,则按毫秒计。 默认值为 2 毫秒。该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

autovacuum_vacuum_cost_limit (integer) #

指定自动 VACUUM 操作中要使用的代价限制值。如果指定为 -1(默认值), 则使用 vacuum_cost_limit 值。注意该值会在运行中的自动清理工作进程之间按比例分配, 因此所有工作进程的限制值之和不会超过这个变量的值。该参数只能在 postgresql.conf 文件或服务器命令行中设置; 但可以通过更改表存储参数为单个表覆盖该设置。

19.10.1. 默认行为 #

vacuum_truncate (boolean) #

启用或禁用 vacuum 尝试截断表末尾的空页。默认值为true。 如果为true,则VACUUM和 autovacuum 会执行截断,并将这些页面占用的磁盘空间返还给操作系统。 请注意,截断需要获取表上的ACCESS EXCLUSIVE锁。 如果在VACUUM中指定了TRUNCATE参数,它将覆盖该参数的值。 也可以通过修改表存储参数来为单个表覆盖此设置。

19.10.2. 冻结 (Freezing) #

这些设置控制旧行版本的冻结。更多信息请参阅Section 24.1.5Section 24.1.5.1

vacuum_freeze_table_age (integer) #

当表的pg_class.relfrozenxid字段达到该设置指定的年龄时,VACUUM会执行激进扫描。激进扫描与常规VACUUM不同,它会访问每一个可能包含未冻结 XID 或 MXID 的页面,而不仅仅是那些可能包含死元组的页面。默认值是 1.5 亿个事务。尽管用户可以将该值设置为 0 到 20 亿之间的任意值,VACUUM会悄悄将有效值调整为autovacuum_freeze_max_age的 95%,从而在触发防回卷 autovacuum 之前仍有机会执行一次常规手工VACUUM。更多信息请参见Section 24.1.5

vacuum_freeze_min_age (integer) #

指定VACUUM在扫描表时用来决定是否冻结行版本的切断年龄(以事务计)。默认值是 5000 万个事务。尽管用户可以将该值设置为 0 到 10 亿之间的任意值,VACUUM会悄悄将有效值调整为autovacuum_freeze_max_age的一半,这样强制 autovacuum 之间就不会间隔过短。更多信息请参见Section 24.1.5

vacuum_failsafe_age (integer) #

指定表的pg_class.relfrozenxid字段在VACUUM采取特别措施以避免系统范围事务 ID 回卷失败之前所允许达到的最大年龄(以事务计)。这是VACUUM的最后防线。失效保护通常会在防止事务 ID 回卷的 autovacuum 已经运行了一段时间后触发,但也有可能在任何VACUUM期间触发。

当失效保护被触发时,将不再应用任何有效的基于成本的延迟,并且会跳过进一步的非关键维护任务(例如索引 vacuum),而且任何正在使用的 缓冲区访问策略 都会被禁用,使 VACUUM 可以自由使用全部 共享缓冲区

默认值为 16 亿个事务。尽管用户可以将该值设置为 0 到 21 亿之间的任意值,VACUUM会悄悄将有效值调整为不低于autovacuum_freeze_max_age的 105%。

vacuum_multixact_freeze_table_age (integer) #

当表的pg_class.relminmxid字段达到该设置指定的年龄时,VACUUM会执行激进扫描。激进扫描与常规VACUUM不同,它会访问每一个可能包含未冻结 XID 或 MXID 的页面,而不是只扫描那些可能包含死元组的页面。默认值是 1.5 亿个 multixact。尽管用户可以将该值设置为 0 到 20 亿之间的任意值,VACUUM会悄悄将有效值调整为autovacuum_multixact_freeze_max_age的 95%,从而在触发防回卷 autovacuum 之前仍有机会执行一次常规手工VACUUM。更多信息请参见Section 24.1.5.1

vacuum_multixact_freeze_min_age (integer) #

指定VACUUM在扫描表时用来决定是否将 multixact ID 替换为较新的事务 ID 或 multixact ID 的切断年龄(以 multixact 计)。默认值是 5000 万个 multixact。尽管用户可以将该值设置为 0 到 10 亿之间的任意值,VACUUM会悄悄将有效值调整为autovacuum_multixact_freeze_max_age的一半,这样强制 autovacuum 之间就不会间隔过短。更多信息请参见Section 24.1.5.1

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。