Timeout: VacuumTruncate
等待获取独占锁,以截去正在执行 vacuum 的表末尾所有空页。
PostgreSQL 等待事件档案
类别Timeout
事件
VacuumTruncate
版本PG 15-18
证据2 个源码位置
官方描述译文
等待获取独占锁,以截去正在执行 vacuum 的表末尾所有空页。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| — | — | ✓ | ✓ | ✓ | ✓ |
触发机制
WAIT_EVENT_VACUUM_TRUNCATE 位于 src/backend/access/heap/vacuumlazy.c:3280,是经 grep 核验的报告路径。公共身份/资源映射位于 src/backend/utils/activity/wait_event_names.txt:183。探针覆盖的操作是:等待获取独占锁,以截去正在执行 vacuum 的表末尾所有空页。VacuumTruncate 路径有意等待计时器、重试间隔、节流或安全退避;latch 超时后才重新评估工作。
正常还是麻烦?
- 正常: 当配置策略是有意的,而且有效工作按预期速率推进时,这项等待正常。
- 需要调查: 策略导致维护、恢复、备份或延迟目标无法达成,或者 spin delay 持续时,应当调查。
诊断 SQL
正在等待 Timeout/VacuumTruncate 的会话
当前 Timeout 等待分布
这些会话的锁与关系上下文
处置建议
- 确认拥有该计时器的 GUC 或函数。
- 比较有效工作量与延迟时间。
- 先检查它原本要控制的 CPU、I/O 与持久性压力,再调整策略。
源码证据
- PostgreSQL 18.6 · src/backend/access/heap/vacuumlazy.c:3280 —
WAIT_EVENT_VACUUM_TRUNCATE - PostgreSQL 18.6 · src/backend/utils/activity/wait_event_names.txt:183 —
VACUUM_TRUNCATE
关联控制项与信号
- GUC: [guc:autovacuum_naptime]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:oldest_transaction_age]