选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 清理

CONFIGURATION PARAMETER清理 / 默认行为

vacuum_truncate

允许 VACUUM 截断表尾的空页面。

Enables vacuum to truncate empty pages at the end of the table.

布尔 会话 引入 18 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
会话任何用户都可在会话内用 SET 修改
默认值
on
引入版本
18
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 0164a0f9ee

版本轨迹

PostgreSQL 18 新增此参数。

默认值变迁

on 18 – 20

默认值自 PostgreSQL 18 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.10 清理 本站手册 官方原文

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

机制详解

允许 VACUUM 截断表尾的空页面。它可在会话级修改,因此不同会话可能采用不同的行为。

它参与 VACUUM 的触发、节流或冻结决策;多数行为可被表级 storage parameter 覆盖。应结合 pg_stat_*、pg_class 年龄与真实维护日志判断,而不是只看全局值。

应把 vacuum_truncate 与 vacuum_max_eager_freeze_failure_rate、vacuum_freeze_table_age、autovacuum_freeze_max_age 一起监控和变更。先在对应角色与真实负载上验证,再按其 user context 选择会话修改、reload 或 restart;历史默认值并不等于当前有效值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    根据表大小、变更速率与维护 SLA 调 vacuum_truncate,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。

  • OLAP分析与批处理

    批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。

  • 小规格低配实例与开发机

    先保持默认;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

常见问题

  • 误以为截断能删除关系中间的空页;只有连续空表尾可以移除。
  • 忽略 ACCESS EXCLUSIVE 锁尝试及其在繁忙表上的阻塞延迟。
  • 关闭截断后仍期待操作系统文件大小自动缩小。
  • 忘记表级 vacuum_truncate storage parameter 可覆盖会话/全局值。
  • 依赖 failsafe 期间截断空间;为尽快完成,VACUUM 可能跳过它。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 18 ← 17 新增此参数

    PostgreSQL 18 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
18 on 会话 布尔
19 on 会话 布尔
20 沿用 on 会话 布尔

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Vacuuming 清理 1 个
默认行为 1
vacuum_truncate 布尔 会话 on
允许 VACUUM 截断表尾的空页面。 现存