LWLock: MultiXactMemberSLRU
等待访问 multixact member SLRU 缓存。
PostgreSQL 等待事件档案
类别LWLock
事件
MultiXactMemberSLRU
版本PG 13-18
证据3 个源码位置
官方描述译文
等待访问 multixact member SLRU 缓存。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
此锁保护 pg_multixact/members 的 SLRU 缓存;这里保存共享行锁使用的 multitransaction ID 成员事务。并发行锁创建与旧成员查询会在这里相遇。
正常还是麻烦?
- 正常: 使用 SELECT FOR SHARE/KEY SHARE,或因外键检查创建 multixact 的负载中会短暂出现。
- 需要调查: 持续竞争指向大量共享行锁、multixact 抖动、冻结落后,或 pg_multixact 存储缓慢。
诊断 SQL
正在等待 LWLock/MultiXactMemberSLRU 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 找出制造大量共享行锁的语句与表。
- 检查 multixact 年龄与 autovacuum 进度。
- 降低锁扇出并解除 multixact 冻结阻塞;若同时出现 buffer 等待,再查 member SLRU I/O。
源码证据
- PostgreSQL 18.6 · src/backend/storage/lmgr/lwlock.c:174 —
MultiXactMemberSLRU - 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:399 —
MultiXactMemberSLRU
关联控制项与信号
- GUC: [guc:autovacuum_multixact_freeze_max_age] · [guc:vacuum_multixact_freeze_table_age]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:oldest_multixact_age] · [metric:multixact_member_io]
典型事故模式
高扇出的外键负载锁住大量父表行,同时长事务推迟 multixact 清理,最终引发 member 缓存竞争。