Lock: spectoken
等待获取推测式插入锁。
PostgreSQL 等待事件档案
类别Lock
事件
spectoken
版本PG 13-18
证据3 个源码位置
官方描述译文
等待获取推测式插入锁。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
PG_WAIT_LOCK 位于 src/backend/storage/lmgr/proc.c:1487,是经 grep 核验的报告路径。公共身份/资源映射位于 src/backend/utils/activity/wait_event_names.txt:425。探针覆盖的操作是:等待获取推测式插入锁。锁管理器无法立即授予 spectoken 重量级锁;ProcSleep 报告等待,并把后端挂到该锁的等待队列,直到持有者释放或请求被取消。
正常还是麻烦?
- 正常: 普通写入或计划内 DDL 的亚秒级锁交接可能正常。
- 需要调查: 面向用户的等待超过延迟目标、阻塞链持续增长,或根持有者处于 idle in transaction 时,应当调查。
诊断 SQL
正在等待 Lock/spectoken 的会话
当前 Lock 等待分布
这些会话的锁与关系上下文
处置建议
- 沿 pg_blocking_pids 构建到根节点的阻塞图。
- 检查根持有者状态、事务年龄与业务目的。
- 确认最安全的根动作后,再选择取消、超时或调整负载顺序。
源码证据
- PostgreSQL 18.6 · src/backend/storage/lmgr/proc.c:1487 —
PG_WAIT_LOCK - PostgreSQL 18.6 · src/backend/utils/activity/wait_event_names.txt:425 —
spectoken - PostgreSQL 18.6 · src/backend/utils/adt/lockfuncs.c:36 —
spectoken
关联控制项与信号
- GUC: [guc:lock_timeout] · [guc:deadlock_timeout]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:blocked_sessions] · [metric:locks_per_backend]