LWLock: XactSLRU
等待访问事务状态 SLRU 缓存。
PostgreSQL 等待事件档案
类别LWLock
事件
XactSLRU
版本PG 13-18
证据3 个源码位置
官方描述译文
等待访问事务状态 SLRU 缓存。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
事务状态 SLRU 锁保护 pg_xact 缓存元数据与页面,PostgreSQL 读取或更新事务提交状态时会经过这里。对未缓存或很老 XID 的可见性检查会把这条路径带到前台。
正常还是麻烦?
- 正常: 事务结束与偶发 pg_xact 缓存未命中会带来短暂等待。
- 需要调查: 持续等待可能表示事务状态缓存抖动、访问很老的元组,或 pg_xact 路径存在存储延迟。
诊断 SQL
正在等待 LWLock/XactSLRU 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 检查老事务以及 vacuum/freeze 健康度。
- 关联 XactBuffer 与 pg_xact I/O 等待。
- 先消除可见性边界阻塞者并恢复清理进度,再考虑容量调整。
源码证据
- PostgreSQL 18.6 · src/backend/storage/lmgr/lwlock.c:178 —
XactSLRU - PostgreSQL 18.6 · src/backend/storage/lmgr/lwlock.c:739 —
pgstat_report_wait_start - PostgreSQL 18.6 · src/backend/utils/activity/wait_event_names.txt:403 —
XactSLRU
关联控制项与信号
- GUC: [guc:autovacuum_freeze_max_age] · [guc:vacuum_freeze_table_age]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:oldest_transaction_age] · [metric:xact_slru_io]
典型事故模式
长生命周期快照阻止清理,同时查询反复访问冷的旧元组版本,引发 pg_xact 缓存抖动与 XactSLRU 竞争。