LWLock: BufferContent
等待访问内存中的数据页。
PostgreSQL 等待事件档案
类别LWLock
事件
BufferContent
版本PG 13-18
证据3 个源码位置
官方描述译文
等待访问内存中的数据页。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
后端已经找到所需的共享缓冲区,但尚未取得该 buffer descriptor 的 content lock。堆表与索引代码在读取或修改内存页前都会取得此锁,因此大量工作进程访问同一页面时会在这里串行化。
正常还是麻烦?
- 正常: 并发读写共享页面时,零星而短暂的样本很常见。
- 需要调查: 大量前台会话连续命中时,通常指向热点堆表/索引页、向右增长的索引,或与业务同时访问相同块的维护任务。
诊断 SQL
正在等待 LWLock/BufferContent 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 找出等待会话共同访问的关系与语句。
- 用页面与索引证据确认热点,不能只凭等待名称下结论。
- 先分散热点键、批量写入或错峰维护,再考虑容量调整。
源码证据
- PostgreSQL 18.6 · src/backend/storage/lmgr/lwlock.c:148 —
BufferContent - 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:373 —
BufferContent
关联控制项与信号
- GUC: [guc:shared_buffers]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:statement_latency]
典型事故模式
单调递增键让并发 B-tree 插入集中到最右叶子页,BufferContent 与插入延迟同步上升。