合 PG中的等待事件列表
简介
等待事件表示会话正在等待的资源。例如,当 Aurora PostgreSQL 等待从客户端接收数据时,会发生等待事件 Client:ClientRead
。会话等待的典型资源包括以下内容:
- 例如,当会话试图修改缓冲区时,对缓冲区的单线程访问
- 当前被另一个会话锁定的行
- 已读取一个数据文件
- 已写入一个日志文件
例如,为了满足查询,会话可能会执行完整的表扫描。如果数据尚未在内存中,会话将等待磁盘输入/输出完成。当缓冲区读取到内存时,会话可能需要等待,因为其他会话正在访问相同的缓冲区。数据库使用预定义的等待事件记录等待。这些事件按类别进行分组。
等待事件本身并不显示性能问题。例如,如果请求的数据不在内存中,则必须从磁盘读取数据。如果一个会话锁定行以进行更新,则另一个会话将等待解锁该行,以便它可以更新该行。提交需要等待对日志文件的写入完成。等待是数据库正常运行不可或缺的组成部分。
大量等待事件通常显示性能问题。在这种情况下,您可以使用等待事件数据来确定会话将时间花费在哪里。例如,如果通常在几分钟内运行的报告现在运行了数小时,则可以确定对总等待时间贡献最大的等待事件。如果您能确定顶级等待事件的原因,您有时就可以进行更改来提高性能。例如,如果您的会话正在等待已被另一个会话锁定的行,则可以结束锁定会话。
等待事件的关联根因都是相对笼统的,因为从等待事件我们还无法直接定位直接原因,只能初步明确一个大体的方向。如果我们想进一步定位问题,可以通过存在较严重问题的等待事件在pg_activity中对应的会话的其他字段,比如SQL语句等来进一步定位,或者根据等待事件关联的问题领域,再使用其他分析工具去做进一步定位。比如如果我们发现IO问题比较多,那么通过OS的iostat就可以进一步分析IO是否真正存在问题,IO问题到底在哪。
PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。通过查阅pg_stat_activity中的wait_event_type和wait_event我们可以了解到每个sql进程“当前”更详细的执行状态,无论是对于异常定位排查,还是系统优化来说都更加方便了。
当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。根据等待信息,可以了解当前会话的状态。
将来也可以通过插件的形式,掌握数据库在某个时间段内的等待事件统计,更好的诊断数据库的健康状态。
已有的插件如下
https://github.com/postgrespro/pg_wait_sampling
https://postgrespro.com/docs/enterprise/10/pg-wait-sampling
用于对等待事件进行采样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | -- 慢查询SQL SELECT pgsa.pid, pgsa.client_port, pgsa.datname AS datname, pgsa.usename AS usename, pgsa.client_addr client_addr, pgsa.application_name AS application_name, pgsa.state AS state, pgsa.backend_start AS backend_start, pgsa.xact_start AS xact_start, state_change, pgsa.query_start AS query_start, TRUNC(EXTRACT( epoch FROM (NOW() - pgsa.xact_start) )) AS xact_stay, trunc(EXTRACT( epoch FROM (NOW() - pgsa.query_start) )) AS query_stay, REPLACE(pgsa.QUERY, chr(10), ' ') AS QUERY, pgsa.wait_event,pgsa.wait_event_type,pgsa.backend_type, 'select pg_terminate_backend('||pgsa.pid||');' kill1, 'select pg_cancel_backend('||pgsa.pid||');' kill2 FROM pg_stat_activity AS pgsa WHERE pgsa.state not in ( 'idle' ,'idle in transaction (aborted)' ) ORDER BY query_stay DESC,xact_stay DESC LIMIT 100; |
所有等待事件
分类 | 名称 | 描述 | 关联根因 |
---|---|---|---|
Activity | ArchiverMain | 归档进程的主循环等待 | 后台进程,一般可忽略 |
Activity | AutoVacuumMain | autovacuum启动进程的主循环等待 | 后台进程,一般可忽略 |
Activity | BgWriterHibernate | 后台写入进程等待,正在休眠 | 后台进程,一般可忽略 |
Activity | BgWriterMain | bgwriter进程的主循环等待 | 后台进程,一般可忽略 |
Activity | CheckpointerMain | CKPT进程主循环等待 | 后台进程,一般可忽略 |
Activity | LogicalApplyMain | 逻辑应用进程主循环等待 | 后台进程,一般可忽略 |
Activity | LogicalLauncherMain | 逻辑启动进程主循环等待 | 后台进程,一般可忽略 |
Activity | PgStatMain | 统计信息采集进程主循环等待 | 后台进程,一般可忽略 |
Activity | RecoveryWalAll | 实例恢复时等待WAL数据流到达 | 等待新的WAL数据 |
Activity | RecoveryWalStream | 在恢复时再次尝试检索 WAL 数据之前,等待任何类型的源(本地、存档或流)中的 WAL 数据不可用时 | 等待新的WAL数据 |
Activity | SysLoggerMain | syslogger进程主循环等待 | 后台进程,一般可忽略 |
Activity | WalReceiverMain | WAL接收进程主循环等待 | 后台进程,一般可忽略 |
Activity | WalSenderMain | WAL发送进程主循环等待 | 后台进程,一般可忽略 |
Activity | WalWriterMain | WAL写进程主循环等待 | 后台进程,一般可忽略 |
BufferPin | BufferPin | 等待获得BUFFER的PIN锁 | 热块、DBCACHE |
Client | ClientRead | 等待读取客户端输入 | 未提交事务,空闲等待 |
Client | ClientWrite | 等待向客户端发送数据 | 网络、TOPSQL |
Client | LibPQWalReceiverConnect | 在 WAL 接收器中等待建立与远程服务器的连接。 | 网络、远程服务器性能 |
Client | LibPQWalReceiverReceive | 等待 WAL 接收器接收来自远程服务器的数据。 | 网络、远程服务器性能 |
Client | SSLOpenServer | 等待SSL连接 | 网络问题、SSL配置问题 |
Client | WalReceiverWaitStart | 等待启动进程发送初始化复制数据流 | 网络问题、SSL配置问题 |
Client | WalSenderWaitForWAL | 进程正等待在 WAL 发件人进程中刷新预写日志 (WAL) | 主库性能问题 |
Client | WalSenderWriteData | 进程正在等待 WAL 发件人进程中处理来自预写日志 (WAL) 接收方的回复时的任何活动 | 网络问题、主库性能问题 |
Extension | Extension | 等待和extension交换数据或消息 | 和扩展插件有关 |
IO | BaseBackupRead | 等待基础备份读取文件 | 磁盘IO |
IO | BaseBackupSync | 等待基础备份数据写入持久化存错 | 磁盘IO |
IO | BaseBackupWrite | 等待基础备份数据写入文件 | 磁盘IO |
IO | BufFileRead | bffered文件读等待 | 磁盘IO,热块,DBCACHE |
IO | BufFileWrite | buffered文件写等待 | DBCACHE,磁盘IO |
IO | BufHashTableSearch | 缓冲区HASH 表查询 | 缓冲区hash表查询 |
IO | ControlFileRead | 等待控制文件读 | 磁盘IO |
IO | ControlFileSync | 等待控制文件写入持久化存储 | 磁盘IO |
IO | ControlFileSyncUpdate | 等待控制文件修改到达持久化存储 | 磁盘IO |
IO | ControlFileWrite | 等待写入控制文件 | 磁盘IO |
IO | ControlFileWriteUpdate | 等待一个修改控制文件的写操作 | 磁盘IO |
IO | CopyFileRead | COPY命令中的读等待 | 磁盘IO |
IO | CopyFileWrite | COPY命令中的写等待 | 磁盘IO |
IO | DataFileExtend | 等待 relation数据文件扩展 | 磁盘IO,磁盘容量 |
IO | DataFileFlush | 等待 relation数据文件写入持久存储 | 磁盘IO |
IO | DataFileImmediateSync | 等待一个立即同步 relation 数据文件写入持久存储 | 磁盘IO |
IO | DataFilePrefetch | 等待从Relation数据文件异步预读数据 | 磁盘IO |
IO | DataFileRead | 等待从relation数据文件读数据 | 磁盘IO |
IO | DataFileSync | 等待 relation 数据文件的变化写入持久存储 | 磁盘IO |
IO | DataFileTruncate | 等待relation 数据文件截断 | 磁盘IO |
IO | DataFileWrite | 等待 relation数据文件写 | 磁盘IO |
IO | DisableConnectFileRead | HA锁分片逻辑文件读取 | 磁盘IO,分布式事务 |
IO | DisableConnectFileSync | HA锁分片逻辑文件强制刷盘 | 磁盘IO,分布式事务 |
IO | DisableConnectFileWrite | HA锁分片逻辑文件写入 | 磁盘IO,分布式事务 |
IO | DoubleWriteFileRead | 双写文件读,和双写区IO有关的读 | 磁盘IO,DML操作 |
IO | DoubleWriteFileWrite | 双写文件写,与脏快写盘有关 | 并发DML、DML操作 |
IO | DSMFillZeroWrite | 等待向一个动态共享内存文件写入字节0 | 并行查询、系统并发、后台任务 |
IO | DWSingleFlushGetPos | 单页面双写文件查找可用位置 | 磁盘IO,并发DML |
IO | DWSingleFlushWrite | 刷新双写数据到永久存储 | 磁盘IO,并发DML |
IO | LockFileAddToDataDirRead | 向数据目录中添加锁文件时的等待 | 磁盘IO,读写权限,数据库配置错误 |
IO | LockFileAddToDataDirSync | 向数据目录添加锁文件时刷新产生的等待 | 磁盘IO,读写权限,数据库配置错误 |
IO | LockFileAddToDataDirWrite | 向数据目录添加锁文件时写入产生的等待 | 磁盘IO,读写权限,数据库配置错误 |
IO | LockFileCreateRead | 向数据目录中添加锁文件前读取产生的等待 | 磁盘IO,读写权限,数据库配置错误 |
IO | LockFileCreateSync | 创建目录锁文件时同步到持久存储 | 磁盘IO |
IO | LockFileCreateWRITE | 创建目录锁文件时写入数据 | 磁盘IO |
IO | LockFileCreateWrite | 创建目录锁文件时写入数据 | 磁盘IO |
IO | LockFileReCheckDataDirRead | 在重新检查数据目录中的锁文件时等待读取锁文件的操作 | 磁盘IO,读写权限,数据库配置错误 |
IO | LOGCTRL_SLEEP | 在等待一个用于日志控制的事件类型,发生在执行需要管理日志的操作时 | 磁盘IO,数据库错误、并发执行 |
IO | LogicalRewriteCheckpointSync | CKPT时等待逻辑重写映射到达持久化存储 | 磁盘IO,检查点,逻辑复制 |
IO | LogicalRewriteMappingSync | 逻辑重写时等待映射数据达到持久化存储 | 磁盘IO、逻辑复制 |
IO | LogicalRewriteMappingWrite | 逻辑重写时等待写映射数据达到持久化存储 | 磁盘IO、逻辑复制 |
IO | LogicalRewriteSync | 等待逻辑重写映射到达持久化存储 | 磁盘IO、逻辑复制 |
IO | LogicalRewriteTruncate | 等待映射数据截断到达持久化存储 | 磁盘IO、逻辑复制 |
IO | LogicalRewriteWrite | 等待一个逻辑重写映射写操作 | 磁盘IO、逻辑复制 |
IO | MPFL_INIT | 初始化max_page_flush_lsn,启动数据库时,设置每个节点的最大页面刷新日志序列号(LSN)的操作 | 数据库启动 |
IO | MPFL_READ | 在读取多进程文件日志(MPFL)时等待文件操作的完成 | 磁盘IO,并发事务 |
IO | MPFL_WRITE | 在写入多进程文件日志(MPFL)时等待文件操作的完成 | 磁盘IO,并发事务 |
IO | OBSList | 对象存储相关,遍历OBS目录 | 磁盘IO |
IO | OBSRead | 对象存储相关,读取OBS对象 | 磁盘IO |
IO | OBSWrite | 对象存储相关,写入OBS对象 | |
IO | PredoApply | 等待并行回放应用回放 | 并行恢复、流复制 |
IO | PredoProcessPending | 并行日志回放中当前记录回放等待其它记录回放完 成 | 并行日志恢复 |
IO | RelationMapRead | 读取系统表到存储位置之间的映射文件 | 磁盘IO、并发DDL、并发SQL执行 |
IO | RelationMapSync | 等待Relation Map文件写入持久存储 | 磁盘IO |
IO | RelationMapWrite | 等待Relation Map文件写 | 磁盘IO、并发DML、并发DDL |
IO | ReorderBufferRead | RecorderBuffer管理中等待读操作(逻辑复制) | 磁盘IO、逻辑复制 |
IO | ReorderBufferWrite | RecorderBuffer管理中等待写操作(逻辑复制) | 磁盘IO、逻辑复制 |
IO | ReorderLogicalMappingRead | RecorderBuffer管理中等待逻辑映射文件读操作 | 磁盘IO、逻辑复制 |
IO | ReplicationSlotRead | 等待复制槽控制文件的读操作 | 磁盘IO、复制 |
IO | ReplicationSlotRestoreSync | 当复制槽控制文件从内存中复制时等待该文件写入持久存储 | 磁盘IO、复制 |
IO | ReplicationSlotSync | 等待复制槽控制文件写入持久存储 | 磁盘IO、复制 |
IO | ReplicationSlotWrite | 等待一个复制槽控制文件写操作 | 磁盘IO、复制 |
IO | SLRUFlushSync | 将pg_clog、pg_subtrans和pg_multixact文件持久化到磁盘。主要在执行checkpoint和数据库停机时发生 | 磁盘IO、检查点、数据库关闭、并发事务 |
IO | SLRURead | 后台进程正在等待从SLRU(Simple LRU)文件中读取数据。SLRU文件是一种用于存储固定大小的记录的简单缓冲区管理器,例如pg_clog、pg_subtrans和pg_multixact | 磁盘IO、并发事务、子事务嵌套 |
IO | SLRUSync | 页写入后等待SLRU数据写入持久存储 | 磁盘IO、并发事务、子事务嵌套 |
IO | SLRUWrite | 等待 SLRU 页写操作 | 磁盘IO、并发事务、子事务嵌套 |
IO | SnapbuildRead | 后台进程正在等待从snapbuild文件中读取数据,snapbuild文件是一种用于存储逻辑复制的快照信息的文件,例如pg_logical/snapshots和pg_logical/replorigin_checkpoint | 磁盘IO、并发事务、逻辑复制 |
IO | SnapbuildSync | 等待序列化的历史目录快照写入持久存储 | 磁盘IO、并发事务、逻辑复制 |
IO | SnapbuildWrite | 等待写入序列化的历史目录快照 | 磁盘IO、并发事务、逻辑复制 |
IO | StrategyGetBuffer | 表示后台进程正在等待从缓冲区管理器中获取一个可用的缓冲区页面。缓冲区管理器使用Clock Sweep算法来选择一个候选的缓冲区页面,如果该页面是干净的,或者可以被写回磁盘,那么就可以分配给后台进程。如果该页面是脏的,或者被其他进程锁定或引用,那么就需要继续扫描下一个页面。当缓冲区中的页面都很繁忙时,就会出现StrategyGetBuffer等待事件 | 缓冲区配置、热块冲突、并发过大、检查点不合理 |
IO | TimelineHistoryFileSync | 等待通过流式复制接收到的时间线历史文件写入持久存储 | 磁盘IO,流复制 |
IO | TimelineHistoryFileWrite | 流式复制时等待时间线文件上的一个写操作被收到 | 磁盘IO,流复制 |
IO | TimelineHistoryRead | 等待时间线历史文件上的读操作 | 磁盘IO,流复制 |
IO | TimelineHistorySync | 等待新创建的时间线历史文件写入持久存储 | 磁盘IO,流复制 |
IO | TimelineHistoryWrite | 等待新创建的时间线历史文件上的写操作 | 磁盘IO,流复制 |
IO | TwophaseFileRead | 等待两阶段状态文件读操作 | 磁盘IO、分布式事务 |
IO | TwophaseFileSync | 等待两阶段状态文件写入持久存储 | 磁盘IO、分布式事务 |
IO | TwophaseFileWrite | 等待两阶段状态文件写操作 | 磁盘IO、分布式事务 |
IO | UndoFileExtend | UNDO文件扩展 | UNDO量增加 |
IO | UndoFileFlush | UNDO文件刷盘 | 并发事务 |
IO | UndoFilePrefetch | UNDO文件预读 | 一致性读 |
IO | UndoFileRead | UNDO文件读 | 一致性读 |
IO | UndoFileSync | UNDO文件同步 | 并发事务 |
IO | UndoFileWrite | UNDO文件写 | 并发事务 |
IO | VersionFileWrite | 创建数据库时写入VERSION文件产生的等待 | 磁盘IO |
IO | WALBootstrapSync | bootstrap的时候等待WAL文件写入持久存储 | 磁盘IO、启动 |
IO | WALBootstrapWrite | bootstrap的时候等待WAL页写操作 | 磁盘IO、启动 |
IO | WALBufferAccess | WAL BUFFER访问 | 并发事务 |
IO | WALBufferFull | WAL缓冲区满 | WAL并发、并发修改、IO性能 |
IO | WALCopyRead | 当使用拷贝一个现有的WAL 段创建一个新WAL段的时候等待读操作 | 磁盘IO、复制 |
IO | WALCopySync | 当使用拷贝一个现有的WAL 段创建一个新WAL段的时候等待写入持久存储 | 磁盘IO、复制 |
IO | WALCopyWrite | 当使用拷贝一个现有的WAL 段创建一个新WAL段的时候等待写操作 | 磁盘IO、复制 |
IO | WALInitSync | 等待一个新初始化的WAL文件写入持久存储 | 磁盘IO、检查点 |
IO | WALInitWrite | 初始化新的WAL文件的时候等待写操作 | 磁盘IO、检查点 |
IO | WALRead | 等待WAL文件读 | 磁盘IO |
IO | WALSenderTimelineHistoryRead | 在 walsender 时间线命令期间等待从时间线历史文件中读取 | 磁盘IO、复制 |
IO | WALSync | 等待 WAL 文件到达持久的存储空间 | 磁盘IO、WAL量 |
IO | WALSyncMethodAssign | WAL 同步模式时等待数据写入持久存储 | 磁盘IO、WAL量 |
IO | WALWrite | 等待WAL文件写 | 磁盘IO、WAL量 |
IPC | BgWorkerShutdown | 等待后台worker关闭 | 关闭实例 |
IPC | BgWorkerStartup | 等待后台worker启动 | 启动实例 |
IPC | BtreePage | 等待继续并行 B 树扫描所需的页可用(并行索引扫描) | 并行执行 |
IPC | ExecuteGather | 执行Gather时等待子进程的活动 | 表分析 |
IPC | Hash/Batch/Allocating | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Batch/Electing | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Batch/Loading | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Build/Allocating | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Build/Electing | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Build/HashingInner | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/Build/HashingOuter | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBatches/Allocating | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBatches/Deciding | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBatches/Electing | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBatches/Finishing | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBatches/Repartitioning | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBuckets/Allocating | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBuckets/Electing | HASH JOIN 相关 | HASH JOIN |
IPC | Hash/GrowBuckets/Reinserting | HASH JOIN 相关 | HASH JOIN |
IPC | LogicalSyncData | 等待逻辑复制远程服务发送数据,用于初始表同步 | 逻辑复制 |
IPC | LogicalSyncData | 等待逻辑复制的远程服务器发送用于初始表 同步的数据 | 逻辑复制 |
IPC | LogicalSyncStateChange | 等待逻辑复制远程服务改变状态 | 逻辑复制 |
IPC | LogicalSyncStateChange | 等待逻辑复制的远程服务器更改状态 | 逻辑复制 |
IPC | MessageQueueInternal | 等待其他进程连接到共享消息队列中 | 并行执行 |
IPC | MessageQueueInternal | 等待其他进程被挂接到共享消息队列 | 并行执行 |
IPC | MessageQueuePutMessage | 等待写一条协议消息到共享消息队列中 | 并行执行 |
IPC | MessageQueuePutMessage | 等待把一个协议消息写到一个共享消息队列 | 并行执行 |
IPC | MessageQueueReceive | 等待从共享消息队列中接收字节 | 并行执行 |
IPC | MessageQueueReceive | 等待从一个共享消息队列接收字节 | 并行执行 |
IPC | MessageQueueSend | 等待向共享消息队列发送字节 | 并行执行 |
IPC | MessageQueueSend | 等待向一个共享消息队列中发送字节 | 并行执行 |
IPC | ParallelBitmapScan | 等待并行位图索引扫描初始化 | 并行执行 |
IPC | ParallelCreateIndexScan | 等待并行 CREATE INDEX 工作者完成堆扫描 | 并行创建索引 |
IPC | ParallelFinish | 等待并行查询worker结束计算 | 并行执行 |
IPC | ParallelFinish | 等待并行工作者完成计算 | 并行执行 |
IPC | ProcArrayGroupUpdate | 当事务结束时等待组leader清除transaction id | 长事务,并行执行 |
IPC | Promote | 等待备用节点升级 | 备库升级 |
IPC | ReplicationOriginDrop | 等待复制源变为非活动状态以被删除 | 复制槽 |
IPC | ReplicationOriginDrop | 等待一个复制源头变得不活跃以便被删除 | 复制槽 |
IPC | ReplicationSlotDrop | 等待复制槽变为非活动状态以被删除 | 复制槽 |
IPC | ReplicationSlotDrop | 等待一个复制槽变得不活跃以便被删除 | 复制槽 |
IPC | SafeSnapshot | 等 待 一 个 用 于 READ ONLY DEFERRABLE 事务的快照,一般在串行事务隔离级别出现 | 只读事务、串行隔离级别 |
IPC | SyncRep | 同步复制时等待远程服务确认 | 同步复制 |
Lock | advisory | 等待获取建议用户锁 | 并发事务 |
Lock | cstore_freespace | 对列存空闲空间加锁 | 列存储 |
Lock | extend | 等待扩展 relation结束 | 文件扩展,并发写入 |
Lock | filenode | 对文件名加锁,文件扩展、TRUNCATE等 | 并发执行,并发DDL |
Lock | frozenid | 等待修改 pg_database.datfrozenxid和 pg_database.datminmxid. | VACUUM、磁盘IO性能、数据库配置 |
Lock | object | 除了relation外的其他数据库对象(DB,SCHEMA等) | DDL操作 |
Lock | page | 等待获取relation中的一个页面的锁 | 热块、SHARED BUFFERS |
Lock | partition | 保护分区元数据一致性的串行化等待 | DDL操作,并发执行 |
Lock | partition_seq | 对分区表的分区加锁 | DDL操作,并发执行 |
Lock | relation | 等待获得一个关系上的锁 | 并发执行 |
Lock | speculative token | 等待获取推测插入锁 | 热块、事务并发、热表 |
Lock | subtransactionid | 对子事务号加锁 | 子事务 |
Lock | transactionid | 等待一个事务结束 | 事务并发 |
Lock | tuple | 等待获取元组(tuple)锁 | 热块、事务并发 |
Lock | userlock | 等待获取用户锁 | 用户锁 |
Lock | virtualxid | 等待获取虚拟XID锁 | 并发执行、活跃会话 |
LWLock | AddinShmemInit | 等待共享内存中的内存空间管理 | 共享内存初始化 |
LWLock | AddinShmemInitLock | 等待共享内存中的内存空间管理 | 共享内存初始化 |
LWLock | AlterPortLock | 用于保护CN更改注册端口号的操作 | 修改端口号 |
LWLock | ASPMappingLock | 用于管理ASP的hash表的并发访存 | 活跃会话历史数据 |
LWLock | async | 等待async (notify) buffer IO完成 | 活跃会话、磁盘IO性能 |
LWLock | Async Ctl | 用于保护Async buffer | 会话交互 |
LWLock | AsyncCtlLock | 等待读取或者修改共享通知状态 | 会话数,并发执行,并发事务 |
LWLock | AsyncQueueLock | 等待读取或者修改通知消息 | 会话数,并发执行,并发事务 |
LWLock | AutoanalyzeLock | 自动分析 | 自动分析 |
LWLock | AutoFile | 等待修改postgresql.auto.conf 文件 | 参数文件修改 |
LWLock | AutoFileLock | 等待修改postgresql.auto.conf 文件 | 参数文件修改 |
LWLock | Autovacuum | 等待Autovacuum worker 或者launcher等待读取或者修改 autovacuum worker的当前状态 | VACUUM |
LWLock | AutovacuumLock | 等待Autovacuum worker 或者launcher等待读取或者修改 autovacuum worker的当前状态 | VACUUM |
LWLock | AutovacuumSchedule | 等待被选择做vacuum 的表仍然需要 vacuuming的确认信息 | VACUUM |
LWLock | AutovacuumScheduleLock | 等待被选择做vacuum 的表仍然需要 vacuuming的确认信息 | VACUUM |
LWLock | BackendRandomLock | 等待生成随机数 | 随机数生成 |
LWLock | BackgroundWorker | 等待读取后者修改后台worker进程的状态 | 并行执行,后台进程启动,后台进程关闭 |
LWLock | BackgroundWorkerLock | 等待读取后者修改后台worker进程的状态 | 并行执行,后台进程启动,后台进程关闭 |
LWLock | BadBlockStatHashLock | 访问坏块统计信息内存数据产生的等待 | 坏块统计信息 |
LWLock | BarrierLock | 确保主备节点达到一致性的屏障机制 | 集群高可用 |
LWLock | BlockchainVersionLock | 在不同节点间传递区块链同步信息 | 区块链 |
LWLock | BtreeVacuum | 等待读取或者修改vacuum相关的B树索引信息 | VACUUM,索引 |
LWLock | BtreeVacuumLock | 等待读取或者修改vacuum相关的B树索引信息 | VACUUM,索引 |
LWLock | buffer_content | 等待在DB CACHE中读写数据页 | 磁盘IO性能、热块、DBCACHE |
LWLock | buffer_io | 等待数据页IO完成 | 磁盘IO性能、检查点、热块 |
LWLock | buffer_mapping | 等待将数据块与缓冲池中的缓冲区关联 | DBCACHE,热块冲突 |
LWLock | BufferContent | 等待在DB CACHE中读写数据页 | 磁盘IO性能、热块、DBCACHE |
LWLock | BufferContent | 等待访问内存中的PAGE | DBCACHE,热块冲突 |
LWLock | BufferContentLock | 等待访问内存中的PAGE | DBCACHE,热块冲突 |
LWLock | BufferIOLock | 类似于Oracle的BBW的read by other session | DBCACHE,热块冲突 |
LWLock | BufferMapping | 等待将数据块与缓冲池中的缓冲区关联 | DBCACHE,热块冲突 |
LWLock | BufFreelistLock | 会话试图从缓冲区中分配或者释放缓冲区产生的等待 | DBCACHE,热块冲突 |
LWLock | BufMapping | 大量会话并发房屋shared buffer的HASH表产生的等待 | DBCACHE,热块冲突 |
LWLock | BufMappingLock | 大量会话并发房屋shared buffer的HASH表产生的等待 | DBCACHE,热块冲突 |
LWLock | CacheSlotMappingLock | 用于保护CU Cache全局信息 | 列存 |
LWLock | CaptureViewFileHashLock | 开启性能视图采集时,保护哈希表的并发访存 | 性能采集 |
LWLock | CBMParseXlogLock | 控制cbm文件(变更位图文件)的并发访存 | 变更位图文件访问锁,增量备份 |
LWLock | CheckpointerComm | 等待管理fsync 请求 | 磁盘IO性能,并发写入 |
LWLock | CheckpointerCommLock | 等待管理fsync 请求 | 磁盘IO性能,并发写入 |
LWLock | CheckpointLock | 等待执行CKPT | 并发事务 |
LWLock | clog | 等待CLOG缓冲区的IO操作 | 事务并发、磁盘IO性能 |
LWLock | CLOG Ctl | 控制各个clog分区信息的并发访存 | 并发事务,并发DML |
LWLock | CLogBufMappingLock | 控制共享clog页面映射的并发访存 | 并发事务,并发DML |
LWLock | CLogControlLock | 等待读取或者修改事务状态 | 并发事务 |
LWLock | CLogTruncationLock | 等待执行txid_status 或者将可获得的最老的transaction id赋给它 | 事务并发、磁盘IO性能、检查点配置 |
LWLock | ClusterRPLock | 用于加速集群的CCN中维护的集群负载数据的并发存取控制(新版本已废弃) | 集群负载控制 |
LWLock | commit_timestamp | 等待 commit timestamp buffer IO操作完成 | 事务并发、参数配置、磁盘IO性能 |
LWLock | CommitTs | 等待 commit timestamp buffer IO操作完成 | 事务并发、参数配置、磁盘IO性能 |
LWLock | CommitTsBuffer | 为一个commit timestamp SLRU BUFFER等待IO完成 | 事务并发、参数配置、磁盘IO性能 |
LWLock | CommitTsControlLock | 等待读取或者修改事务提交时间戳 | 事务提交,页控制相关,DB CACHE,并发事务, |
LWLock | CommitTsLock | 等待读取或者修改事务时间戳的最后值集合 | 事务提交,并发事务, |
LWLock | CommitTsSLRU | 等待访问commit timestamp SLRU CACHE | 事务并发、参数配置、磁盘IO性能 |
LWLock | ConsumerStateLock | 用于时序consumer工作状态更新 | 时序数据压缩 |
LWLock | ControlFile | 等待读取或者修改控制文件,或者创建一个新的WAL文件 | DML,并发写入,磁盘IO性能 |
LWLock | ControlFileLock | 等待读取或者修改控制文件,或者创建一个新的WAL文件 | DML,并发写入,磁盘IO性能 |
LWLock | CSNBufMappingLock | 控制共享csnlog页面映射的并发访存 | 全局事务,并发事务 |
LWLock | CSNLOG Ctl | 控制各个csnlog分区信息的并发访存 | 全局事务,并发事务 |
LWLock | CsnMinLock | 控制csn min信息的并发访存 | 并发事务,MVCC |
LWLock | CStoreColspaceCacheLock | 用于保护列存表的CU空间分配 | 列存储缓冲 |
LWLock | CStoreCUCacheSweepLock | 用于列存CU Cache循环淘汰 | 列存储缓冲 |
LWLock | CUSlotListLock | 用于存储列存储分布表的数据分布信息,便于为优化器编译提供数据 | 列存储、SQL解析 |
LWLock | DataCacheLock | 列存模式下CU的并发修改锁 | 列存储,DML |
LWLock | DataFileIdCacheLock | 列存模式下CU的并发修改锁 | 列存储,DML |
LWLock | DataSyncRepLock | 用于在主备复制时保护数据页同步信息 | DML,并发事务、集群同步 |
LWLock | DelayDDLLock | 串行化DDL操作的锁 | 并发DDL |
LWLock | DeleteCompactionLock | VACUUM FULL时需要申请的锁 | VACUUM |
LWLock | DeleteConsumerLock | SQL执行过程中进行消费者端操作时需要的锁等待。分布式执行、并行执行等都会产生消费者端操作 | 分布式执行,并行执行 |
LWLock | DfsConnectorCacheLock | 用于保护缓存HDFS连接的句柄的全局哈希表 | hdfs |
LWLock | DfsSpaceCacheLock | 用于控制HDFS表导入时文件ID单调递增 | hdf、数据导入 |
LWLock | DfsUserLoginLock | 用于保护HDFS用户信息的全局链表 | hdfs、用户登录 |
LWLock | DnUsedSpaceHashLock | DN节点统计使用空间的排他锁,避免相同的统计任务冲突 | DN节点、空间使用统计 |
LWLock | DoubleWriteLock | 保护双写缓冲的闩锁 | 脏块写 |
LWLock | dummyServerInfoCacheLock | 用于保护缓存加速集群连接信息的全局哈希表 | 登录、查询连接信息 |
LWLock | DWSingleFlushFirstLock | Dn节点CKPT增量刷脏块 | CKPT增量刷脏块 |
LWLock | DWSingleFlushPosLock | Dn节点刷新脏块 | CKPT增量刷脏块 |
LWLock | DWSingleFlushWriteLock | Dn节点刷新脏块 | CKPT增量刷脏块 |
LWLock | DynamicSharedMemoryControl | 等待读取或者修改动态共享内存状态 | 动态共享内存分配、释放 |
LWLock | DynamicSharedMemoryControlLock | 等待读取或者修改动态共享内存状态 | 动态共享内存分配、释放 |
LWLock | ExtensionConnectorLibLock | 连接池建立时加载动态链接库的等待事件 | LOGON |
LWLock | FdwPartitionCacheLock | 多个并发会话并发访问外部表分区缓冲 | 外部表并发访问 |
LWLock | FileStatLock | 用于保护存储统计文件信息的数据结构 | 访问文件统计信息 |
LWLock | FullBuildXlogCopyStartPtrLock | 保护全量备份时的日志起始点的轻量级锁 | 全量备份 |
LWLock | GeneralExtendedLock | 使用扩展的并发量较大 | 扩展 |
LWLock | GlobalPrevHashLock | 全局前置HASH表操作并发引发,和缓冲、配置信息等全局信息的访问有关 | 各类缓冲访问 |
LWLock | GlobalSeqLock | 并发访问全局序列号引发的等待 | 序列号 |
LWLock | GlobalWorkloadLock | 全局WORKLOAD统计信息的访问 | AWR |
LWLock | GPCClearLock | 并发清除全局计划缓冲 | 计划缓冲、SQL解析 |
LWLock | GPCCommitLock | 用于保护全局Plan Cache hash表的添加操作 | SQL解析 |
LWLock | GPCMappingLock | 用于全局Plan Cache缓存管理 | SQL解析、高并发执行 |
LWLock | GPCTimelineLock | 用于保护全局Plan Cache hash表检查Timeline的操作 | SQL解析(已废弃) |
LWLock | GTMHostInfoLock | 已废弃 | |
LWLock | gtt_shared_ctl | 已废弃 | |
LWLock | HadrSwitchoverLock | 主备故障切换 | 主备切换 |
LWLock | HypoIndexLock | 用于保护假索引的创建和删除 | 虚拟索引、SQL优化 |
LWLock | InstanceRealTLock | 用于保护共享实例统计信息hash表的更新操作 | 指标采集 |
LWLock | InstanceTimeLock | 用于获取实例中会话的时间信息 | 指标采集、会话数过多 |
LWLock | InstrUserLockId | 用户登录登出数据库 | 用户登录登出 |
LWLock | InstrWorkloadLock | 保护负载管理统计信息的内存hash表访问 | 指标采集 |
LWLock | IOStatLock | 保护IO资源统计信息的锁 | 指标采集 |
LWLock | JobShmemLock | 用于定时任务功能中保护定时读取的全局变量 | 定时任务执行 |
LWLock | LLVMDumpIRLock | 用于导出动态生成函数所对应的汇编语言 | SQL解析,LLVM |
LWLock | LLVMParseIRLock | 用于在查询开始处从IR文件中编译并解析已写好的IR函数 | SQL解析,LLVM |
LWLock | lock_manager | 在并行执行中,等待为后端添加或检查锁,或者等待加入或退出锁组 | 事务并发 |
LWLock | LockFastPath | 等待更新进程的FAST PATH LOCK信息 | 事务并发 |
LWLock | LockManager | 在并行执行中,等待为后端添加或检查锁,或者等待加入或退出锁组 | 事务并发 |
LWLock | LockMgrLock | 在并行执行中,等待为后端添加或检查锁,或者等待加入或退出锁组 | 事务并发 |
LWLock | LogicalReplicationSlotPersistentDataLock | 用于保护逻辑复制过程中复制槽位的数据 | 流复制 |
LWLock | LogicalRepWorkerLock | 等待逻辑复制的WORKER结束任务 | 流复制 |
LWLock | LsnXlogChkFileLock | 用于串行更新特定结构中记录的主备机的xlog flush位置点,保证主备服务器的数据一致性 | 流复制 |
LWLock | LWTRANCHE_ACCOUNT_TABLE | 控制账户锁定状态hash表的并发读写 | 安全控制、登录 |
LWLock | MatviewSeqnoLock | 物化视图序号锁等待 | 物化视图操作相关 |
LWLock | MaxPageFlushLsnFileLock | 用于保护最大页面刷新LSN文件的并发更新 | 并发DML |
LWLock | MetaCacheLock | 用于保护MetaCache | 并发DML,并发解析 |
LWLock | MetaCacheSweepLock | 保护元数据循环淘汰 | 缓冲配置、并发解析 |
LWLock | MPFLLOCK | ||
LWLock | multixact_member | 等待 multixact_member buffer IO操作完成 | 事务并发,磁盘IO性能 |
LWLock | multixact_offset | 等待 multixact offset buffer IO操作完成 | 事务并发,磁盘IO性能 |
LWLock | MultiXactGen | 等待读取或者修改共享组合事务( multixact)状态 | 并发事务 |
LWLock | MultiXactGenLock | 等待读取或者修改共享组合事务( multixact)状态 | 并发事务 |
LWLock | MultiXactMember Ctl | ||
LWLock | MultiXactMemberBuffer | 为一个multixact SLRU buffer等待IO | 并发事务 |
LWLock | MultiXactMemberControlLock | 等待读取或者修改组合事务(multixact) 成员映射信息 | 并发事务 |
LWLock | MultiXactMemberSLRU | 等待访问multixact SLRU CACHE | 并发事务 |
LWLock | MultiXactOffset Ctl | ||
LWLock | MultiXactOffsetBuffer | 为一个multixact offset SLRU buffer等待IO | 并发事务 |
LWLock | MultiXactOffsetControlLock | 等待读取或者修改组合事务(multixact) 偏移映射信息 | 并发事务 |
LWLock | MultiXactOffsetSLRU | 等待访问multixact offset SLRU CACHE | 并发事务 |
LWLock | MultiXactTruncation | 等待清空multixact 信息 | 并发事务 |
LWLock | MultiXactTruncationLock | 等待读取或者截断 multixact 信息 | 事务并发,大事务 |
LWLock | NGroupMappingLock | 对于保护nodegroup哈希表的单个分桶并发修改加锁,用于全局sequence | SEQUENCE,分布式 |
LWLock | NodeTableLock | 用于保护存放数据库节点信息的共享结构,用于保护存放CN和DN节点信息的共享结构1 | 集群管理 |
LWLock | NormalizedSqlLock | 用于SQL规范化转换 | 并发解析 |
LWLock | NotifyBuffer | 等待Notify buffer的SLRU缓冲区上的IO | IPC,IO性能 |
LWLock | NotifyQueue | 等待读取或者修改Notify消息 | IPC,并发DDL |
LWLock | NotifyQueueTail | 等待修改通知消息存储限制 | ipc |
LWLock | NotifyQueueTailLock | 等待修改通知消息存储限制 | ipc |
LWLock | NotifySLRU | 等待访问Notify SLRU缓冲 | ipc |
LWLock | OBSGetPathLock | 用于避免对obs路径的写写并发和读写并发,和对象存储有关 | 对象存储 |
LWLock | OBSRuntimeLock | 用于获取环境变量,如GASSHOME | 环境变量 |
LWLock | OidGen | 等待分配或者赋予一个 OID | 并发DDL |
LWLock | OidGenLock | 等待分配或者赋予一个 OID | 并发DDL |
LWLock | oldserxid | 等待oldserxid buffer IO完成 | 磁盘IO性能,事务并发 |
LWLock | OldSerXid SLRU Ctl | 保护old xids的slru buffer | MVCC,并发事务 |
LWLock | OldSerXidLock | 等待读取或记录冲突的可序列化事务 | 事务隔离级别,并发事务 |
LWLock | OldSnapshotTimeMap | 等待读取或者修改旧的snapshot控制信息 | 事务并发,SAVEPOINT |
LWLock | OldSnapshotTimeMapLock | 等待读取或者修改旧的snapshot控制信息 | 事务并发,SAVEPOINT |
LWLock | OperatorHistLock | 用于避免并发访问或者修改记录算子级历史数据的全局结构 | 并发解析,并发执行 |
LWLock | OperatorRealTLock | 用于避免并发访问或者修改记录算子级实时数据的全局结构 | 并发解析,并发执行 |
LWLock | parallel_append | 在 Parallel Append 计划执行期间等待选择下一个子计划 | 并发APPEND写入 |
LWLock | parallel_hash_join | 在 Parallel Hash 计划执行期间等待分配或交换一块内存或者更新计数器 | 并发HASH JOIN |
LWLock | parallel_query_dsa | 等待并行查询动态共享内存分配锁 | |
LWLock | ParallelAppend | 在 Parallel Append 计划执行期间等待选择下一个子计划 | 并发APPEND写入 |
LWLock | ParallelHashJoin | 在 Parallel Hash 计划执行期间等待分配或交换一块内存或者更新计数器 | 并发HASH JOIN |
LWLock | ParallelQueryDSA | 等待并行查询动态共享内存分配锁 | 并行执行 |
LWLock | PartIdCacheLock | 分区表的数量过多或者被访问得过于频繁 | 分区表 |
LWLock | PartOidCacheLock | 分区表的数量过多或者被访问得过于频繁 | 分区表 |
LWLock | PercentileLock | 全局百分位缓冲区争用,全局PercentileBuffer是GaussDB中的一个全局变量,用于存储每个算子的执行时间的百分位数 | 并发执行,SQL解析 |
LWLock | PerSessionDSA | 等待并行查询动态共享内存分配锁 | 并行执行 |
LWLock | PerSessionRecordType | 并行查询中等待匿名记录类型的相关信息(比如CTE) | 并行执行 |
LWLock | PerXactPredicateList | 并行查询中等待可序列化的对象的谓词锁定产生的等待 | 并行执行 |
LWLock | PgfdwLock | 外部访问引发的等待 | 外部表 |
LWLock | PGPROCLock | 访问进程数组产生的等待 | 性能监控、并发登录 |
LWLock | PgStatsData | 访问统计信息区域的等待 | 性能监控 |
LWLock | PgStatsDSA | 访问统计信息区域的等待 | 性能监控 |
LWLock | PgStatsHash | 访问统计信息区域的等待 | 性能监控 |
LWLock | PLdebugger | PL/PGSQL跟踪 | PL/PGSQL跟踪 |
LWLock | PldebugLock | PL/PGSQL跟踪 | PL/PGSQL跟踪 |
LWLock | PoolerLock | 试图从数据库连接处中获取或者释放一个连接引发的等待 | 并发登录,会话数 |
LWLock | predicate_lock_manager | 等待添加或检查谓词锁信息 | 并发执行 |
LWLock | PredicateLockManager | 等待添加或检查谓词锁信息 | 并发执行 |
LWLock | PredicateLockMgrLock | 当一个进程试图访问可序列化事务使用的谓词锁定信息时产生的,为了保护谓词锁定管理器的数据结构 | 并发执行 |
LWLock | proc | 等待读取或者修改快速路径锁的信息 | 并发锁 |
LWLock | ProcArray | 等待获得snapshot或者在会话结束时清理XID,或者查询XID | 并发事务 |
LWLock | ProcArrayLock | 等待获得snapshot或者在会话结束时清理XID,或者查询XID | 并发事务 |
LWLock | ProcXactMappingLock | 访问进程数组与事务数组之间的关系产生的等待 | 并发事务 |
LWLock | PruneDirtyQueueLock | 清理脏页队列产生的等待 | 数据库配置,脏页 |
LWLock | RcvWriteLock | 防止并发调用WalDataRcvWrite | 流复制 |
LWLock | RelationMapping | 等待更新用于存储目录到文件节点映射的关系映射文件 | DDL操作 |
LWLock | RelationMappingLock | 等待更新用于存储目录到文件节点映射的关系映射文件 | DDL操作 |
LWLock | RelCacheInit | 等待读写 relation cache初始化文件(pg_internal.init) | 磁盘IO性能,数据库中表的数量过多 |
LWLock | RelCacheInitLock | 等待读写 relation cache初始化文件(pg_internal.init) | 磁盘IO性能,数据库中表的数量过多 |
LWLock | RelfilenodeReuseLock | 避免错误地取消已重用的列属性文件的链接 | 列存储 |
LWLock | replication_origin | 等待读取或者修改复制进度 | 数据库复制 |
LWLock | replication_slot_io | 等待复制槽上的IO | 数据库复制、磁盘IO性能 |
LWLock | ReplicationOrigin | 等待设置、删除或使用复制源 | 流复制 |
LWLock | ReplicationOriginLock | 等待设置、删除或使用复制源 | 流复制 |
LWLock | ReplicationSlotAllocation | 等待分配或者始放一个复制槽 | 流复制,复制槽 |
LWLock | ReplicationSlotAllocationLock | 等待分配或者始放一个复制槽 | 流复制,复制槽 |
LWLock | ReplicationSlotControl | 等待读取或者修改复制槽状态 | 流复制,复制槽 |
LWLock | ReplicationSlotControlLock | 等待读取或者修改复制槽状态 | 流复制,复制槽 |
LWLock | ReplicationSlotIO | 等待复制SLOT上的IO | 流复制,复制槽 |
LWLock | ReplicationSlotLock | 并发访问复制槽 | 流复制,复制槽 |
LWLock | ResourcePoolHashLock | 等待资源池HASH数据结构,一般是在分配池中连接 | 并发执行,并发登录 |
LWLock | RestartPointQueueLock | 备机恢复性能存在问题 | 流复制 |
LWLock | RoleIdLock | ||
LWLock | RoleIdPartLock | ||
LWLock | RollbackReqHashLock | 管理共享内存中存储回滚请求信息的哈希表的并发访存 | 回滚操作 |
LWLock | RowPageReplicationLock | 用于管理行存储的数据页复制,当数据页在复制时,防止被篡改 | 副本复制 |
LWLock | RPNumberLock | 用于加速openGauss的数据库节点对正在执行计划的任务线程的计数 | 并行执行 |
LWLock | SearchServerLibLock | 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁 | GPU加速,加载动态链接库 |
LWLock | SegmentHeadPartitionLock | 保护段页式segment头部元信息的分区锁 | DDL,分区表 |
LWLock | SerialBuffer | 等待一个用于存储可串行化事务冲突信息的SLRU缓冲区上的IO | IO |
LWLock | SerializableFinishedList | 等待访问serializable 事务完成清单 | 事务隔离级别,并发事务 |
LWLock | SerializableFinishedListLock | 等待访问serializable 事务完成清单 | 事务隔离级别,并发事务 |
LWLock | SerializablePredicateLockList | 等待在一个被serializable事务锁锁定的清单上做操作 | 事务隔离级别,并发事务 |
LWLock | SerializablePredicateLockListLock | 等待在一个被serializable事务锁锁定的清单上做操作 | 事务隔离级别,并发事务 |
LWLock | SerializableXactHashLock | 等待检索或者存储serializable事务相关的信息 | 事务隔离级别,并发事务 |
LWLock | SerialSLRU | 等待一个用于存储可串行化事务冲突信息的SLRU缓冲区 | IO |
LWLock | SessionHistLock | 用于避免并发访问或者修改记录query级历史数据的全局结构 | GSP |
LWLock | SessionRealTLock | 用于避免并发访问或者修改记录query级实时数据的全局结构 | GSP |
LWLock | SharedTidBitmap | 并行BITMAP INDEX SCAN时等待共享TID的访问闩锁 | 并行执行 |
LWLock | SharedTupleStore | 并行查询时等待访问数据块 | 并行执行 |
LWLock | ShmemIndex | 等待在共享内存中查找或者分配空间 | 共享内存操作,并发 |
LWLock | ShmemIndexLock | 等待在共享内存中查找或者分配空间 | 共享内存操作,并发 |
LWLock | SInvalRead | 等待从共享失效队列中检索或删除消息 | 并发SQL |
LWLock | SInvalReadLock | 等待从共享失效队列中检索或删除消息 | 并发SQL |
LWLock | SInvalWrite | 等待在共享失效队列中添加消息 | 并发SQL |
LWLock | SInvalWriteLock | 等待在共享失效队列中添加消息 | 并发SQL |
LWLock | StartBlockMappingLock | 用于globalstat从pgstat获取startblockarray等信息 | PGSTATE |
LWLock | StreamingEngineConnLock | 流引擎连接锁 | 流引擎 |
LWLock | StreamingEngineExecLock | 流引擎执行所 | 流引擎 |
LWLock | subtrans | 等待 subtransaction buffer IO操作完成 | 事务并发,磁盘IO性能 |
LWLock | SubtransBuffer | 等待 subtransaction buffer IO操作完成 | 事务并发,磁盘IO性能 |
LWLock | SubtransControlLock | 等待读取或者修改子事务信息 | 并发事务,子事务,SAVEPOINT |
LWLock | SubtransSLRU | 等待 subtransaction buffer并发访问 | 事务并发,磁盘IO性能 |
LWLock | SyncPaxosLock | 保护paxos同步队列的并发访存 | 副本复制 |
LWLock | SyncRep | 等待读取或更新有关同步复制的信息 | 流复制,同步复制 |
LWLock | SyncRepLock | 等待读取或更新有关同步复制的信息 | 流复制,同步复制 |
LWLock | SyncScan | 等待获取表上扫描的开始位置以便于进行同步扫描 | 表或索引扫描操作 |
LWLock | SyncScanLock | 等待获取表上扫描的开始位置以便于进行同步扫描 | 表或索引扫描操作 |
LWLock | TablespaceCreate | 等待创建或者删除表空间 | 表空间操作,磁盘IO性能,文件系统 |
LWLock | TablespaceCreateLock | 等待创建或者删除表空间 | 表空间操作,磁盘IO性能,文件系统 |
LWLock | tbm | 等待 TBM 共享迭代器锁,一般发生在并行bitmap扫描中,等待TID BITMAP | 并发执行、索引扫描 |
LWLock | TDEKeyCacheLock | 控制透明加密数据密钥缓存的并发读写 | 透明加密 |
LWLock | TsTagsCacheLock | 用于时序tag缓存管理 | 时序数据相关 |
LWLock | TwoPhaseState | 等待读取或者修改prepared transaction的状态 | 分布式事务 |
LWLock | TwoPhaseStateLock | 等待读取或者修改prepared transaction的状态 | 分布式事务 |
LWLock | TwoPhaseStatePartLock | 两阶段提交相关的轻量级锁等待 | 两阶段提交相关的轻量级锁等待 |
LWLock | UHeapStatLock | 保护ustore统计信息的并发访存 | ustore统计信息 |
LWLock | UndoPerZoneLock | 保护每个undozone内信息的并发访存 | UNDO,USTORE |
LWLock | UndoSpaceLock | 保护undospace的并发访存 | UNDO,USTORE |
LWLock | UndoZoneLock | 保护undozone的并发访存 | UNDO,USTORE |
LWLock | UniqueSqlEvictLock | 开启Unique SQL回收时,保护哈希表的并发访存 | SQL统计信息 |
LWLock | UniqueSQLMappingLock | 用于保护uniquesql hash table | SQL统计信息 |
LWLock | UnlinkRelHashTblLock | 保护共享内存中待删除文件哈希表的并发访存 | 文件删除 |
LWLock | UspagrpMappingLock | ||
LWLock | WaitCountHashLock | 用于保护用户语句计数功能场景中的共享结构 | PGSTAT相关信息统计 |
LWLock | wal_insert | 等待将WAL插入缓冲区 | 事务并发、WALBUFFER |
LWLock | WALBufferInitWait | 初始化WAL BUFFER | 初始化WAL BUFFER |
LWLock | WALBufMapping | 等待替换 WAL 缓冲区中的页面 | WAL BUFFER,DML,并发写入 |
LWLock | WALBufMappingLock | 等待替换 WAL 缓冲区中的页面 | WAL BUFFER,DML,并发写入 |
LWLock | WALFlushWait | 等待WAL文件强制刷盘 | 等待WAL强制刷盘 |
LWLock | WALInitSegment | 初始化WAL文件 | 初始化WAL文件 |
LWLock | WALInsert | 用于避免与其它WAL插入操作并发执行 | REDO并发,并发DML,并发事务 |
LWLock | WALInsertLock | 用于避免与其它WAL插入操作并发执行 | REDO并发,并发DML,并发事务 |
LWLock | WALWrite | 等待从WAL缓冲区中写数据到磁盘 | DML,并发写入,磁盘IO性能 |
LWLock | WALWriteLock | 等待从WAL缓冲区中写数据到磁盘 | DML,并发写入,磁盘IO性能 |
LWLock | WALWritePaxosLock | 保护向paxos复制组件写wal日志的并发顺序 | 集群副本复制 |
LWLock | WorkloadCGroupHashLock | 用于避免并发访问或者修改Cgroup信息构成的哈希表 | 负载采集 |
LWLock | WorkloadIoStatHashLock | 用于避免并发访问或者修改用于统计当前数据库节点的IO信息的哈希表 | 负载采集 |
LWLock | WorkloadIOUtilLock | 用于保护记录iostat,CPU等负载信息的结构 | 负载采集 |
LWLock | WorkloadNodeGroupLock | 用于避免并发访问或者修改内存中的nodegroup信息构成的哈希表 | 负载采集 |
LWLock | WorkloadRecordLock | 用于避免并发访问或修改在内存自适应管理时对数据库主节点收到请求构成的哈希表 | 负载采集 |
LWLock | WorkloadSessionInfoLock | 保护负载管理session info内存hash表访问 | 负载采集 |
LWLock | WorkloadStatHashLock | 用于避免并发访问或者修改包含数据库主节点的SQL请求构成的哈希表 | 负载采集 |
LWLock | WorkloadUserInfoLock | 用于避免并发访问或修改负载管理的用户信息哈希表 | 负载采集 |
LWLock | WrapLimitsVacuum | 等待修改multixact消耗和transaction id的限制 | 事务并发,磁盘IO性能,VACUUM、维护WORKER配置 |
LWLock | WrapLimitsVacuumLock | 等待修改multixact消耗和transaction id的限制 | 事务并发,磁盘IO性能,VACUUM、维护WORKER配置 |
LWLock | XactBuffer | 等待更改事务状态数据,事务状态管理器性能有问题或者IO有问题时会出现该等待 | 并发事务,io性能 |
LWLock | XactSLRU | 等待更改事务状态数据,事务状态管理器性能有问题时会出现该等待 | 并发事务 |
LWLock | XactTruncation | 更新事务状态时的等待,出现在清理过期XID,CKPT等 | 并发事务,VACUUM |
LWLock | XidGen | 等待生成事务XID | 并发事务 |
LWLock | XidGenLock | 等待生成事务XID | 并发事务 |
LWLock | XlogRemoveSegLock | 保护Xlog段文件的回收操作 | 并发事务,WAL配置 |
STATUS | acquire lock | 申请锁 | 申请锁 |
STATUS | acquire lwlock | 申请轻量级锁 | 申请轻量级锁 |
STATUS | analyze | 分析操作 | 表分析操作 |
STATUS | cancel query | 取消某连接上正在执行的SQL语句 | 取消某连接上正在执行的SQL语句 |
STATUS | create index | 索引创建 | 索引创建 |
STATUS | flush data | 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值 | 集群同步 |
STATUS | get conn | 获取到其他节点的连接 | 获取到其他节点的连接 |
STATUS | HashAgg - build hash | HASH JOIN | HASH JOIN |
STATUS | HashAgg - write file | HASH JOIN | HASH JOIN |
STATUS | HashJoin - build hash | HASH JOIN | HASH JOIN |
STATUS | HashJoin - write file | HASH JOIN | HASH JOIN |
STATUS | HashSetop - build hash | HASH JOIN | HASH JOIN |
STATUS | HashSetop - write file | HASH JOIN | HASH JOIN |
STATUS | Material | 物化视图操作 | 物化视图操作 |
STATUS | Material - write file | 物化视图操作 | 物化视图操作 |
STATUS | NestLoop | NESTED LOOP表连接 | NESTED LOOP表连接 |
STATUS | pooler create conn | 等待pooler建立连接,当前正在与nodename 指定节点建立连接,且仍有N个连接等待建 立 | 等待pooler建立连接 |
STATUS | reset cmd | ||
STATUS | set cmd | 当前节点上执行SET命令 | 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执 行。 |
STATUS | Sort | 排序操作 | 排序操作 |
STATUS | Sort - write file | 物理排序操作中的文件写入 | 物理排序操作中的文件写入 |
STATUS | stop query | 停止某连接上正在执行的查询 | 停止某连接上正在执行的查询 |
STATUS | stream get conn | 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象 | 流复制 |
STATUS | synchronize quit | stream plan结束时,等待stream线程组内的线程统一退出 | 流复制 |
STATUS | vacuum | VACUUM操作 | VACUUM操作 |
STATUS | vacuum full | 全量VACUUM操作 | 全量VACUUM |
STATUS | wait active statement | 等待作业执行,正在资源负载管控中 | 资源管理 |
STATUS | wait cmd | 等待完成读取网络通信包 | 等待完成读取网络通信包 |
STATUS | wait data sync | 等待完成数据页到备机的同步 | 流复制 |
STATUS | wait data sync queue | 等待把行存的数据页或列存的CU放入同步队列 | 流复制 |
STATUS | wait io | 等待IO | 等待IO |
STATUS | wait memory | 等待内存获取 | 流复制 |
STATUS | wait node | 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回 | 流复制 |
STATUS | wait pooler abort conn | 等待pooler完成终止连接 | 等待pooler完成终止连接 |
STATUS | wait pooler clean conn | 等待pooler完成清理连接 | 等待pooler完成清理连接 |
STATUS | wait pooler get conn | 等待pooler完成获取连接 | 等待pooler完成获取连接 |
STATUS | wait producer ready | 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态 | 流复制 |
STATUS | wait reserve td | ustore itl等待 | ustore itl等待 |
STATUS | wait stream group destroy | 流复制 | 流复制 |
STATUS | wait sync consumer next step | Stream算子等待消费者执行 | 流复制 |
STATUS | wait sync producer next step | Stream算子等待生产者执行 | 流复制 |
STATUS | wait transaction sync | 等待xid指定事务同步 | 流复制 |
STATUS | wait wal sync | 等待特定LSN的wal log完成到备机的同步 | 流复制 |
Timeout | BaseBackupThrottle | 在基础备份时等待限流 | 备份 |
Timeout | PgSleep | 进程处于 pg_sleep等待 | |
Timeout | RecoveryApplyDelay | 在恢复时因为WAL延迟到达产生的等待 | 实例恢复 |
等待事件详解
- Aurora PostgreSQL 优化的基本概念
- Aurora PostgreSQL 等待事件
- Client:ClientRead
- Client:ClientWrite
- CPU
- IO:BufFileRead 和 IO:BufFileWrite
- IO:DataFileRead
- IO:XactSync
- IPC:DamRecordTxAck
- Lock:advisory
- Lock:extend
- Lock:Relation
- Lock:transactionid
- Lock:tuple
- LWLock:buffer_content (BufferContent)
- LWLock:buffer_mapping
- LWLock:BufferIO (IPC:BufferIO)
- LWLock:lock_manager
- LWLock:MultiXact
- Timeout:PgSleep
等待事件 | 定义 |
---|---|
Client:ClientRead | 当 Aurora PostgreSQL 等待从客户端接收数据时,会发生此事件。 |
Client:ClientWrite | 当 Aurora PostgreSQL 等待将数据写入客户端时,会发生此事件。 |
CPU | 当线程在 CPU 中处于活动状态或正在等待 CPU 时,会发生此事件。 |
IO:BufFileRead 和 IO:BufFileWrite | 这些事件发生在 Aurora PostgreSQL 创建临时文件时。 |
IO:DataFileRead | 当由于分页在共享内存中不可用,连接等待后端进程从存储中读取所需分页时,会发生此事件。 |
IO:XactSync | 当数据库等待 Aurora 存储子系统确认常规事务的提交,或者准备好的事务的提交或回滚时,会发生此事件。 |
IPC:DamRecordTxAck | 当 Aurora PostgreSQL 在使用数据库活动流的会话中生成活动流事件,然后等待该事件变为持久事件时,会发生此事件。 |
Lock:advisory | 当 PostgreSQL 应用程序使用锁定来协调多个会话之间的活动时,会发生此事件。 |
Lock:extend | 当后端进程正在等待锁定关系以对其进行扩展,而另一个进程出于同样目的锁定该关系时,会发生此事件。 |
Lock:Relation | 当查询等待获取当前被另一个事务锁定的表或视图上的锁定时,会发生此事件。 |
Lock:transactionid | 当事务正在等待行级锁定时,会发生此事件。 |
Lock:tuple | 在后端进程等待获取元组锁定时,会发生此事件。 |
LWLock:buffer_content (BufferContent) | 当某个会话等待读取或写入内存中的某个数据页面,而另一个会话正锁定该页面以进行写入时,会发生此事件。 |
LWLock:buffer_mapping | 当会话正在等待将数据块与共享缓冲池中的缓冲区关联起来时,会发生此事件。 |
LWLock:BufferIO (IPC:BufferIO) | 当 Aurora PostgreSQL 或 RDS for PostgreSQL 正在等待其他进程在同时尝试访问页面时完成输入/输出 (I/O) 操作时,会发生此事件。 |
LWLock:lock_manager | 当 Aurora PostgreSQL 引擎维护共享锁的内存区域以便在无法使用快速路径锁时分配、检查和取消分配锁时,会发生此事件。 |
LWLock:MultiXact | 当 Aurora PostgreSQL 保持会话处于打开状态以完成涉及表中同一行的多个事务时,就会发生此类事件。等待事件表示多事务处理的哪个方面正在生成等待事件,即 LWLock:MultiXactOffsetSLRU、LWLock:MultiXactOffsetBuffer、LWLock:MultiXactMemberSLRU 或 LWLock:MultiXactMemberBuffer。 |
Timeout:PgSleep | 当服务器进程调用 pg_sleep 函数并且正在等待睡眠超时过期时,会发生此事件。 |
LWLock - buffer_content
当某个会话等待读取或写入内存中的某个数据页面,而另一个会话正锁定该页面以进行写入时,会发生 LWLock:buffer_content
事件。在 Aurora PostgreSQL 13 及更高版本中,此等待事件被称为 BufferContent
。
上下文
要读取或操作数据,PostgreSQL 会通过共享内存缓冲区访问数据。要从缓冲区读取,进程会在共享模式下获取缓冲区内容的轻量级锁 (LWLock)。要写入缓冲区,它会在独占模式下获得该锁。共享锁允许其他进程同时获取对该内容的共享锁。独占锁可防止其他进程获取对该内容的任何类型的锁定。
LWLock:buffer_content
(BufferContent
) 事件表示多个进程试图获取对特定缓冲区的内容的锁定。
等待次数增加的可能原因
当 LWLock:buffer_content
(BufferContent
) 事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点: