↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

百科 / 等待事件 / 轻量级锁

WAIT EVENT · LWLOCK轻量级锁

LWLockLogicalRepWorker

等待读取或更新逻辑复制工作进程的状态。

Waiting to read or update the state of logical replication workers

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

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

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

版本轨迹

相对 PostgreSQL 17 无变化。

各版本描述

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

  1. 1012

    LWLockLogicalRepWorkerLock曾用名

    等待对逻辑复制工作进程的操作完成。

    Waiting for action on logical replication worker to finish.

  2. 1320

    LWLockLogicalRepWorker

    等待读取或更新逻辑复制工作进程的状态。

    Waiting to read or update the state of logical replication workers.

触发机制

pgstat_report_wait_start 位于 src/backend/storage/lmgr/lwlock.c:739,是经 grep 核验的报告路径。公共身份/资源映射位于 src/backend/replication/logical/launcher.c:189。探针覆盖的操作是:等待读取或更新逻辑复制 worker 的状态。LWLockAcquire 无法立即取得显示为 LogicalRepWorker 的轻量级锁 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/replication/logical/launcher.c:189. The instrumented operation is: Waiting to read or update the state of logical replication workers. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as LogicalRepWorker. 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/LogicalRepWorker 的会话Sessions waiting on LWLock/LogicalRepWorker

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 = 'LogicalRepWorker'
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 = 'LogicalRepWorker'
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.

相关参数与指标

waiting_sessionswait_event_share

源码证据

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

PostgreSQL 18REL_18_6

演化历史

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

  1. PostgreSQL 13 ← 12 更名

    更名 LogicalRepWorkerLockLogicalRepWorker 描述措辞更新

    等待读取或更新逻辑复制工作进程的状态。

    描述前后对照
    Waiting for action on logical replication worker to finish. Waiting to read or update the state of logical replication workers.
  2. PostgreSQL 10 ← 9.6 新增此事件

    该版起出现

    等待对逻辑复制工作进程的操作完成。

同类事件

事件 引入 版本变动 最近变动
LWLOCK 轻量级锁 93 个 ↗
AddinShmemInit档案 9.6起点 132 次
等待管理扩展在共享内存中的空间分配。曾用名 AddinShmemInitLock 现存
AioUringCompletion档案 18 —
等待另一个进程通过 io_uring 完成 I/O。 现存
AioWorkerControl 19 —
等待更新 AIO 工作进程信息。 现存
AioWorkerSubmissionQueue档案 18 —
等待访问 AIO 工作进程的提交队列。 现存
AutoFile档案 9.6起点 132 次
等待更新postgresql.auto.conf文件。曾用名 AutoFileLock 现存
Autovacuum档案 9.6起点 132 次
等待读取或更新自动清理工作进程的当前状态。曾用名 AutovacuumLock 现存
AutovacuumSchedule档案 9.6起点 132 次
等待确认选中进行自动清理的表是否仍需清理。曾用名 AutovacuumScheduleLock 现存
BackendRandomLock 10 —
等待生成随机数。 于 12 移除
BackgroundWorker档案 9.6起点 132 次
等待读取或更新后台工作进程状态。曾用名 BackgroundWorkerLock 现存
BtreeVacuum档案 9.6起点 132 次
等待读取或更新B-树索引的清理相关信息。曾用名 BtreeVacuumLock 现存
BufferContent档案 9.6起点 132 次
等待访问内存中的数据页。曾用名 buffer_content 于 19 移除
BufferMapping档案 9.6起点 132 次
等待将数据块与缓冲池中的缓冲区关联。曾用名 buffer_mapping 现存
Checkpoint档案 9.6起点 132 次
等待开始检查点。曾用名 CheckpointLock 于 14 移除
CheckpointerComm档案 9.6起点 132 次
等待管理fsync请求。曾用名 CheckpointerCommLock 现存
CommitTs档案 9.6起点 132 次
等待读取或更新最近设置的事务提交时间戳值。曾用名 CommitTsLock 现存
CommitTsBuffer档案 9.6起点 132 次
在提交时间戳SLRU缓冲区上等待I/O。曾用名 commit_timestamp 现存
CommitTsSLRU档案 9.6起点 132 次
等待访问提交时间戳SLRU缓存。曾用名 CommitTsControlLock 现存
ControlFile档案 9.6起点 132 次
等待读取或更新pg_control文件或创建一个新的WAL文件。曾用名 ControlFileLock 现存
DataChecksumsWorker 20 —
等待数据校验和工作进程。 现存
DataChecksumTransition 20 —
等待数据校验和状态转换被写入 WAL。 现存
DSMRegistry档案 17 —
等待读取或更新动态共享内存注册表。 现存
DSMRegistryDSA档案 17 —
等待访问动态共享内存注册表的动态共享内存分配器。 现存
DSMRegistryHash档案 17 —
等待访问动态共享内存注册表的共享hash表。 现存
DynamicSharedMemoryControl档案 9.6起点 132 次
等待读取或更新动态共享内存分配信息。曾用名 DynamicSharedMemoryControlLock 现存
InjectionPoint档案 17 —
等待读取或更新注入点相关信息。 现存
LockFastPath档案 9.6起点 132 次
等待读取或更新进程的快速路径锁信息。曾用名 proc 现存
LockManager档案 9.6起点 194 次
等待读取或更新有关“重量级”锁的信息。曾用名 lock_manager 现存
LogicalDecodingControl 19 —
等待读取或更新逻辑解码状态信息。 现存
LogicalRepLauncherDSA档案 16 —
等待访问逻辑复制启动进程的动态共享内存分配器。 现存
LogicalRepLauncherHash档案 16 —
等待访问逻辑复制启动进程的共享hash表。 现存
LogicalRepWorker档案 10 131 次
等待读取或更新逻辑复制工作进程的状态。曾用名 LogicalRepWorkerLock 现存
MultiXactGen档案 9.6起点 132 次
等待读取或更新共享的多事务状态。曾用名 MultiXactGenLock 现存
MultiXactMemberBuffer档案 9.6起点 132 次
等待多事务成员 SLRU 缓冲区上的 I/O。曾用名 multixact_member 现存
MultiXactMemberSLRU档案 9.6起点 132 次
等待访问多事务成员 SLRU 缓存。曾用名 MultiXactMemberControlLock 现存
MultiXactOffsetBuffer档案 9.6起点 132 次
等待多事务偏移量 SLRU 缓冲区上的 I/O。曾用名 multixact_offset 现存
MultiXactOffsetSLRU档案 9.6起点 132 次
等待访问多事务偏移量 SLRU 缓存。曾用名 MultiXactOffsetControlLock 现存
MultiXactTruncation档案 9.6起点 132 次
等待读取或截断多事务信息。曾用名 MultiXactTruncationLock 现存
NotifyBuffer档案 9.6起点 132 次
在NOTIFY 消息 SLRU缓冲区上等待I/O。曾用名 async 现存
NotifyChannelHash 19 —
等待访问 NOTIFY 通道hash表。 现存
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 —
在并行 B-树扫描计划执行期间等待同步工作进程。 现存
ParallelHashJoin档案 11 131 次
在 Parallel Hash Join 计划执行期间等待同步工作进程。曾用名 parallel_hash_join 现存
ParallelQueryDSA档案 10 131 次
等待并行查询动态共享内存分配。曾用名 parallel_query_dsa 现存
ParallelVacuumDSA档案 17 —
等待为并行清理分配动态共享内存。 现存
PerSessionDSA档案 13 —
等待并行查询动态共享内存分配。 现存
PerSessionRecordType档案 13 —
等待访问并行查询中有关复合类型的信息。 现存
PerSessionRecordTypmod档案 13 —
等待访问并行查询中用于标识匿名记录类型的类型修饰符信息。 现存
PerXactPredicateList档案 12 131 次
在并行查询期间等待访问当前可串行化事务持有的谓词锁列表。曾用名 serializable_xact 现存
PgStatsData档案 15 —
等待访问共享内存中的统计数据。 现存
PgStatsDSA档案 15 —
等待访问统计信息的动态共享内存分配器。 现存
PgStatsHash档案 15 —
等待访问统计信息的共享内存hash表。 现存
PredicateLockManager档案 9.6起点 132 次
等待访问可串行化事务使用的谓词锁信息。曾用名 predicate_lock_manager 现存
ProcArray档案 9.6起点 132 次
等待访问各进程的共享数据结构(通常是为了获取快照或报告会话的事务 ID)。曾用名 ProcArrayLock 现存
RelationMapping档案 9.6起点 132 次
等待读取或更新pg_filenode.map文件(用于跟踪某些系统目录的文件节点分配)。曾用名 RelationMappingLock 现存
RelCacheInit档案 9.6起点 132 次
等待读取或更新pg_internal.init关系缓存初始化文件。曾用名 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缓冲区上等待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 次
在并行位图索引扫描期间等待访问共享的TID位图。曾用名 tbm 现存
SharedTupleStore档案 13 —
在并行查询期间等待访问共享元组存储。 现存
ShmemIndex档案 9.6起点 132 次
等待在共享内存中找到或分配空间。曾用名 ShmemIndexLock 现存
SInvalRead档案 9.6起点 132 次
等待从共享系统目录失效队列中取出消息。曾用名 SInvalReadLock 现存
SInvalWrite档案 9.6起点 132 次
等待向共享系统目录失效队列添加消息。曾用名 SInvalWriteLock 现存
SubtransBuffer档案 9.6起点 132 次
在子事务SLRU缓冲区上等待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缓冲区中替换一个页面。曾用名 WALBufMappingLock 现存
WALInsert档案 9.6起点 132 次
等待将WAL数据插入内存缓冲区。曾用名 wal_insert 现存
WALSummarizer档案 17 —
等待读取或更新 WAL 汇总状态。 现存
WALWrite档案 9.6起点 132 次
等待WAL缓冲区写入磁盘。曾用名 WALWriteLock 现存
WrapLimitsVacuum档案 9.6起点 132 次
等待更新事务 ID 和多事务消耗量的限制。曾用名 WrapLimitsVacuumLock 现存
XactBuffer档案 9.6起点 132 次
在事务状态的SLRU缓冲区上等待I/O。曾用名 clog 现存
XactSLRU档案 9.6起点 132 次
等待访问事务状态的SLRU缓存。曾用名 CLogControlLock 现存
XactTruncation档案 10 131 次
等待执行pg_xact_status或更新它可用的最早的事务ID。曾用名 CLogTruncationLock 现存
XidGen档案 9.6起点 132 次
等待分配新的事务ID。曾用名 XidGenLock 现存