选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 等待事件 / 轻量级锁

WAIT EVENT · LWLOCK轻量级锁

LWLockWALSummarizer

等待读取或更新 WAL 汇总状态。

Waiting to read or update WAL summarization state

轻量级锁 引入 17 现存至 20 devel 0 次变动 动态触发图谱档案

类型
轻量级锁
引入版本
17
版本状态
当前稳定版
覆盖版本
4 个 · 17 – 20
触发路径
动态触发
实测发行版
18.6
名称变动
手册章节
监控统计

PostgreSQL 18 手册 官方文档 源码 wait.pg.center

版本轨迹

相对 PostgreSQL 17 无变化。

各版本描述

相邻版本里类型、名称与英文描述都相同的合并成一段,旧的在前。中文取自图谱或本站手册译文,没有译文的只给英文原文。

  1. 1720

    LWLockWALSummarizer

    Waiting to read or update WAL summarization state.

    Waiting to read or update WAL summarization state.

触发机制

pgstat_report_wait_start 位于 src/backend/storage/lmgr/lwlock.c:739,是经 grep 核验的报告路径。公共身份/资源映射位于 src/backend/postmaster/walsummarizer.c:273。探针覆盖的操作是:等待读取或更新 WAL 汇总状态。LWLockAcquire 无法立即取得显示为 WALSummarizer 的轻量级锁 tranche;后端在内部共享内存资源上休眠时,通用 LWLock 报告器发布该 tranche 名称。

pgstat_report_wait_start at src/backend/storage/lmgr/lwlock.c:739 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/postmaster/walsummarizer.c:273. The instrumented operation is: Waiting to read or update WAL summarization state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as WALSummarizer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.

通常正常

短暂内部临界区周围的零星样本属于正常。

A brief sample is normal around short internal critical sections.

值得警惕

若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话,应当调查;达到 25% 或持续超过五秒按紧急处理。

Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.

诊断 SQL

直接在 psql 里跑;标注的是语句里用到的视图与列所要求的最低版本。

正在等待 LWLock/WALSummarizer 的会话Sessions waiting on LWLock/WALSummarizer

PG ≥ 13
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'LWLock'
  AND wait_event = 'WALSummarizer'
ORDER BY query_age DESC NULLS LAST;

当前 LWLock 等待分布Current LWLock cohort

PG ≥ 13
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'LWLock'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;

这些会话的锁与关系上下文Lock and relation context for these sessions

PG ≥ 13
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'LWLock'
  AND a.wait_event = 'WALSummarizer'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

处置步骤

  1. 重复采样并锁定一个热点 tranche。
  2. 把它与受保护资源及当前负载阶段关联。
  3. 降低具体竞争源;增加并发可能让共享内存热点更糟。
英文原文
  1. Repeat the snapshot and isolate one hot tranche.
  2. Correlate it with the protected resource and current workload phase.
  3. Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse.

相关参数与指标

wal_bufferssynchronous_commit waiting_sessionswait_event_sharewal_byteswal_write_time

源码证据

图谱在各版本源码树里核对到的位置,新的在前。「触发点」是真正上报等待事件的调用处,「目录定义」只说明这个名字在枚举里存在。

PostgreSQL 18REL_18_6

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的变动清单。

  1. PostgreSQL 17 ← 16 新增此事件

    该版起出现

    等待读取或更新 WAL 汇总状态。

同类事件

事件 引入 版本变动 最近变动
LWLOCK 轻量级锁 92 个
AddinShmemInit档案 9.6起点 132 次
等待管理扩展在共享内存中的空间分配。曾用名 AddinShmemInitLock 现存
AioUringCompletion档案 18
等待另一个进程通过 io_uring 完成 I/O。 现存
AioWorkerControl 19
等待更新 AIO 工作进程信息。 现存
AioWorkerSubmissionQueue档案 18
等待访问 AIO worker 提交队列。 现存
AutoFile档案 9.6起点 132 次
等待更新 postgresql.auto.conf 文件。曾用名 AutoFileLock 现存
Autovacuum档案 9.6起点 132 次
等待读取或更新 autovacuum worker 的当前状态。曾用名 AutovacuumLock 现存
AutovacuumSchedule档案 9.6起点 132 次
等待确认被选中进行 autovacuum 的表仍需要 vacuum。曾用名 AutovacuumScheduleLock 现存
BackendRandomLock 10
等待生成随机数。 于 12 移除
BackgroundWorker档案 9.6起点 132 次
等待读取或更新后台 worker 的状态。曾用名 BackgroundWorkerLock 现存
BtreeVacuum档案 9.6起点 132 次
等待读取或更新 B-tree 索引中与 vacuum 相关的信息。曾用名 BtreeVacuumLock 现存
BufferContent档案 9.6起点 132 次
等待访问内存中的数据页。曾用名 buffer_content 于 19 移除
BufferMapping档案 9.6起点 132 次
等待将数据块关联到 buffer pool 中的 buffer。曾用名 buffer_mapping 现存
Checkpoint档案 9.6起点 132 次
等待开始执行检查点。曾用名 CheckpointLock 于 14 移除
CheckpointerComm档案 9.6起点 132 次
等待管理 fsync 请求。曾用名 CheckpointerCommLock 现存
CommitTs档案 9.6起点 132 次
等待读取或更新事务提交时间戳的最近设定值。曾用名 CommitTsLock 现存
CommitTsBuffer档案 9.6起点 132 次
等待事务提交时间戳 SLRU buffer 上的 I/O。曾用名 commit_timestamp 现存
CommitTsSLRU档案 9.6起点 132 次
等待访问事务提交时间戳 SLRU 缓存。曾用名 CommitTsControlLock 现存
ControlFile档案 9.6起点 132 次
等待读取或更新 pg_control 文件,或创建新的 WAL 文件。曾用名 ControlFileLock 现存
DataChecksumsWorker 19
等待数据校验和工作进程。 现存
DSMRegistry档案 17
等待读取或更新动态共享内存注册表。 现存
DSMRegistryDSA档案 17
等待访问动态共享内存注册表的动态共享内存分配器。 现存
DSMRegistryHash档案 17
等待访问动态共享内存注册表的共享哈希表。 现存
DynamicSharedMemoryControl档案 9.6起点 132 次
等待读取或更新动态共享内存分配信息。曾用名 DynamicSharedMemoryControlLock 现存
InjectionPoint档案 17
等待读取或更新与注入点相关的信息。 现存
LockFastPath档案 9.6起点 132 次
等待读取或更新进程的快速路径锁信息。曾用名 proc 现存
LockManager档案 9.6起点 194 次
等待读取或更新“重量级”锁的信息。曾用名 lock_manager 现存
LogicalDecodingControl 19
等待读取或更新逻辑解码状态信息。 现存
LogicalRepLauncherDSA档案 16
等待访问逻辑复制 launcher 的动态共享内存分配器。 现存
LogicalRepLauncherHash档案 16
等待访问逻辑复制 launcher 的共享哈希表。 现存
LogicalRepWorker档案 10 131 次
等待读取或更新逻辑复制 worker 的状态。曾用名 LogicalRepWorkerLock 现存
MultiXactGen档案 9.6起点 132 次
等待读取或更新共享 multixact 状态。曾用名 MultiXactGenLock 现存
MultiXactMemberBuffer档案 9.6起点 132 次
等待 multixact member SLRU buffer 上的 I/O。曾用名 multixact_member 现存
MultiXactMemberSLRU档案 9.6起点 132 次
等待访问 multixact member SLRU 缓存。曾用名 MultiXactMemberControlLock 现存
MultiXactOffsetBuffer档案 9.6起点 132 次
等待 multixact offset SLRU buffer 上的 I/O。曾用名 multixact_offset 现存
MultiXactOffsetSLRU档案 9.6起点 132 次
等待访问 multixact offset SLRU 缓存。曾用名 MultiXactOffsetControlLock 现存
MultiXactTruncation档案 9.6起点 132 次
等待读取或截断 multixact 信息。曾用名 MultiXactTruncationLock 现存
NotifyBuffer档案 9.6起点 132 次
等待 NOTIFY 消息 SLRU buffer 上的 I/O。曾用名 async 现存
NotifyChannelHash 19
等待访问 NOTIFY 通道哈希表。 现存
NotifyQueue档案 9.6起点 132 次
等待读取或更新 NOTIFY 消息。曾用名 AsyncQueueLock 现存
NotifyQueueTail档案 9.6起点 132 次
等待更新 NOTIFY 消息的存储上限。曾用名 NotifyQueueTailLock 现存
NotifySLRU档案 9.6起点 132 次
等待访问 NOTIFY 消息 SLRU 缓存。曾用名 AsyncCtlLock 现存
OidGen档案 9.6起点 132 次
等待分配新的 OID。曾用名 OidGenLock 现存
OldSnapshotTimeMap档案 9.6起点 132 次
等待读取或更新旧快照控制信息。曾用名 OldSnapshotTimeMapLock 于 17 移除
ParallelAppend档案 11 131 次
执行 Parallel Append 计划期间,等待选择下一个子计划。曾用名 parallel_append 现存
ParallelBtreeScan档案 18
执行 Parallel B-tree Scan 计划期间,等待同步 worker。 现存
ParallelHashJoin档案 11 131 次
执行 Parallel Hash Join 计划期间,等待同步 worker。曾用名 parallel_hash_join 现存
ParallelQueryDSA档案 10 131 次
等待并行查询的动态共享内存分配。曾用名 parallel_query_dsa 现存
ParallelVacuumDSA档案 17
等待并行 vacuum 的动态共享内存分配。 现存
PerSessionDSA档案 13
等待并行查询的动态共享内存分配。 现存
PerSessionRecordType档案 13
等待访问并行查询的复合类型信息。 现存
PerSessionRecordTypmod档案 13
等待访问并行查询中用于标识匿名 record 类型的类型修饰符信息。 现存
PerXactPredicateList档案 12 131 次
并行查询期间,等待访问当前可串行化事务所持有的谓词锁列表。曾用名 serializable_xact 现存
PgStatsData档案 15
等待访问共享内存中的统计数据。 现存
PgStatsDSA档案 15
等待访问统计信息的动态共享内存分配器。 现存
PgStatsHash档案 15
等待访问统计信息的共享内存哈希表。 现存
PredicateLockManager档案 9.6起点 132 次
等待访问可串行化事务使用的谓词锁信息。曾用名 predicate_lock_manager 现存
ProcArray档案 9.6起点 132 次
等待访问共享的进程级数据结构(通常用于获取快照或报告会话的事务 ID)。曾用名 ProcArrayLock 现存
RelationMapping档案 9.6起点 132 次
等待读取或更新 pg_filenode.map 文件(用于跟踪某些系统目录的 filenode 分配)。曾用名 RelationMappingLock 现存
RelCacheInit档案 9.6起点 132 次
等待读取或更新 pg_internal.init relation cache 初始化文件。曾用名 RelCacheInitLock 现存
ReplicationOrigin档案 9.6起点 132 次
等待创建、删除或使用复制源。曾用名 ReplicationOriginLock 现存
ReplicationOriginState档案 9.6起点 132 次
等待读取或更新一个复制源的进度。曾用名 replication_origin 现存
ReplicationSlotAllocation档案 9.6起点 132 次
等待分配或释放复制槽。曾用名 ReplicationSlotAllocationLock 现存
ReplicationSlotControl档案 9.6起点 132 次
等待读取或更新复制槽状态。曾用名 ReplicationSlotControlLock 现存
ReplicationSlotIO档案 9.6起点 132 次
等待复制槽上的 I/O。曾用名 replication_slot_io 现存
SerialBuffer档案 9.6起点 133 次
等待可串行化事务冲突 SLRU buffer 上的 I/O。曾用名 oldserxid 现存
SerialControl档案 17
等待读取或更新共享的 pg_serial 状态。 现存
SerializableFinishedList档案 9.6起点 132 次
等待访问已结束的可串行化事务列表。曾用名 SerializableFinishedListLock 现存
SerializablePredicateList档案 9.6起点 132 次
等待访问可串行化事务所持有的谓词锁列表。曾用名 SerializablePredicateLockListLock 现存
SerializableXactHash档案 9.6起点 132 次
等待读取或更新可串行化事务的信息。曾用名 SerializableXactHashLock 现存
SerialSLRU档案 9.6起点 132 次
等待访问可串行化事务冲突 SLRU 缓存。曾用名 OldSerXidLock 现存
SharedTidBitmap档案 10 131 次
并行 bitmap index scan 期间,等待访问共享 TID bitmap。曾用名 tbm 现存
SharedTupleStore档案 13
并行查询期间,等待访问共享 tuple store。 现存
ShmemIndex档案 9.6起点 132 次
等待在共享内存中查找或分配空间。曾用名 ShmemIndexLock 现存
SInvalRead档案 9.6起点 132 次
等待从共享系统目录失效队列中取出消息。曾用名 SInvalReadLock 现存
SInvalWrite档案 9.6起点 132 次
等待向共享系统目录失效队列中添加消息。曾用名 SInvalWriteLock 现存
SubtransBuffer档案 9.6起点 132 次
等待子事务 SLRU buffer 上的 I/O。曾用名 subtrans 现存
SubtransSLRU档案 9.6起点 132 次
等待访问子事务 SLRU 缓存。曾用名 SubtransControlLock 现存
SyncRep档案 9.6起点 132 次
等待读取或更新同步复制状态信息。曾用名 SyncRepLock 现存
SyncScan档案 9.6起点 132 次
等待选择同步表扫描的起始位置。曾用名 SyncScanLock 现存
TablespaceCreate档案 9.6起点 132 次
等待创建或删除表空间。曾用名 TablespaceCreateLock 现存
TwoPhaseState档案 9.6起点 132 次
等待读取或更新预备事务的状态。曾用名 TwoPhaseStateLock 现存
WaitEventCustom档案 17
等待读取或更新自定义等待事件信息。 现存
WaitLSN 19
等待读取或更新共享的 LSN 等待状态。 现存
WALBufMapping档案 9.6起点 132 次
等待替换 WAL buffer 中的页面。曾用名 WALBufMappingLock 现存
WALInsert档案 9.6起点 132 次
等待将 WAL 数据插入内存 buffer。曾用名 wal_insert 现存
WALSummarizer档案 17
等待读取或更新 WAL 汇总状态。 现存
WALWrite档案 9.6起点 132 次
等待将 WAL buffer 写入磁盘。曾用名 WALWriteLock 现存
WrapLimitsVacuum档案 9.6起点 132 次
等待更新事务 ID 和 multixact 的消耗上限。曾用名 WrapLimitsVacuumLock 现存
XactBuffer档案 9.6起点 132 次
等待事务状态 SLRU buffer 上的 I/O。曾用名 clog 现存
XactSLRU档案 9.6起点 132 次
等待访问事务状态 SLRU 缓存。曾用名 CLogControlLock 现存
XactTruncation档案 10 131 次
等待执行 pg_xact_status,或更新当前进程可用的最旧事务 ID。曾用名 CLogTruncationLock 现存
XidGen档案 9.6起点 132 次
等待分配新的事务 ID。曾用名 XidGenLock 现存