Client: WalSenderWaitForWal
在 WAL sender 进程中等待 WAL 完成刷写。
PostgreSQL 等待事件档案
类别Client
事件
WalSenderWaitForWal
版本PG 17-18
证据4 个源码位置
官方描述译文
在 WAL sender 进程中等待 WAL 完成刷写。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| — | — | — | — | ✓ | ✓ |
历史名称:Client/WalSenderWaitForWAL (PG 13-16)
触发机制
WAIT_EVENT_WAL_SENDER_WAIT_WAL 位于 src/backend/replication/walsender.c:1714,是经 grep 核验的报告路径。公共身份/资源映射位于 src/backend/utils/activity/wait_event.c:289。探针覆盖的操作是:在 WAL sender 进程中等待 WAL 完成刷写。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 WalSenderWaitForWal;PostgreSQL 正在等待远端或网络推进。
正常还是麻烦?
- 正常: 空闲状态的 ClientRead 通常只是连接池存量。
- 需要调查: 活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。
诊断 SQL
正在等待 Client/WalSenderWaitForWal 的会话
当前 Client 等待分布
这些会话的锁与关系上下文
处置建议
- 先看 state 与事务年龄,再决定它是否算负载。
- 关联负责的应用、连接池与网络路径。
- 修复消费者背压或连接池策略,不要反复终止连接。
源码证据
- PostgreSQL 16.15 · src/backend/replication/walsender.c:1714 —
WAIT_EVENT_WAL_SENDER_WAIT_WAL - PostgreSQL 16.15 · src/backend/utils/activity/wait_event.c:289 —
WalSenderWaitForWAL - PostgreSQL 18.6 · src/backend/replication/walsender.c:1813 —
WAIT_EVENT_WAL_SENDER_WAIT_FOR_WAL - PostgreSQL 18.6 · src/backend/utils/activity/wait_event_names.txt:92 —
WAL_SENDER_WAIT_FOR_WAL
关联控制项与信号
- GUC: [guc:wal_buffers] · [guc:synchronous_commit] · [guc:max_connections] · [guc:idle_in_transaction_session_timeout]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:wal_bytes] · [metric:wal_write_time] · [metric:active_backends]