跳转到主要内容

track_cost_delay_timing

track_cost_delay_timing:收集基于成本的 vacuum 延迟计时。实测在档范围为 PG18–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 off,context 为 superuser。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:收集基于成本的 vacuum 延迟计时。

身份

类型 , bool
上游 pg_settings 类型
Context , superuser
超级用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Statistics / Cumulative Query and Index Statistics
上游分类
最后 boot 值 , off
off

生命周期

Fact
首次观测 PG18
在档版本 PG18–19 Beta 3
移除版本
引入提交 bb8dff9995f2 — Add cost-based vacuum delay time to progress views.
提交日期 2025-02-11
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG18–19 Beta 3 off off

机制详解

track_cost_delay_timing 测量 VACUUM 与 ANALYZE 因成本限速实际休眠的时间,并出现在进度视图、详细命令输出与符合条件的 autovacuum 日志中。

收集会反复读取操作系统时钟,开销依平台而异。它不会启用 vacuum delay,也不会改变 vacuum_cost_* 策略。

该指标用于区分实际工作与有意节流。广泛启用前可用 pg_test_timing 测量读取时钟的开销。其 superuser 上下文允许获授权会话修改,无需重启服务器。

调优建议

提示

Advice。 以下建议是工作负载起点,必须用真实测量验证。

场景 建议
OLTP 需要区分 VACUUM/ANALYZE 实际工作与有意 cost-delay 休眠时启用。用 pg_test_timing 和 autovacuum 负载测时钟读取开销;它是布尔值,不设置大小,也不会自行启用成本延迟。
OLAP 长维护与分析工作重叠、需要量化节流时间时有用。应把报告的延迟时间与维护总时长、前台延迟一起比较,并且只有运维真正使用该证据时才长期开启。
小规格 除非需要 vacuum-delay 诊断且平台时钟读取足够便宜,否则保持 off。启用本身不改变维护节流策略;vacuum_cost_* 参数仍然独立。

Pigsty 取值

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP on 不同于 boot 值 'on'
CRIT on 不同于 boot 值 'on'
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG18–19 Beta 3 未修改;OLAP: PG18–19 Beta 3 = on (dcs);CRIT: PG18–19 Beta 3 = on (dcs);TINY: PG18–19 Beta 3 未修改。 建议(待人工复核)——编辑推断(待维护者复核):仅 OLAP/crit 启用意在长维护或关键可观测场景暴露 vacuum/analyze 成本延迟时间,并接受读取时钟的开销。

常见坑

  • 误以为该开关会启用成本型 vacuum delay,而不是只计时已有延迟。
  • 不使用 pg_test_timing 测量,就忽略平台相关的时钟读取开销。
  • 没有启用相关进度、verbose 或 autovacuum 日志输出,却寻找该指标。
  • 把布尔值当成时长或缓冲区尺寸参数。

vacuum_cost_delay · autovacuum_vacuum_cost_delay · log_autovacuum_min_duration · track_io_timing · vacuum_buffer_usage_limit

参考资料