等待事件(Wait event)是KingbaseES数据库性能分析的一项重要的参考指标。
本部分提供KingbaseES数据库系统等待事件的相关信息。
你可以通过下面的SQL语句查询/分析KingbaseES等待事件相关信息。
下面的例子展示了如何查看实时等待事件sys_stat_activity视图
SELECT pid, wait_event_type, wait_event FROM sys_stat_activity WHERE wait_event is NOT NULL; pid | wait_event_type | wait_event ------+------------------+--------------- 2540 | Lock | relation 6644 | LWLock | ProcArrayLock (2 rows)
每一行代表一个服务器进程,显示进程当前所处的等待事件。
后端在等待一个轻量级锁:轻量级锁用于保护共享内存中的数据结构,防止并发问题。
等待事件名称 |
描述 |
---|---|
ShmemIndexLock |
等待 在共享内存中查找或者分配空间。 |
OidGenLock |
等待分配或者赋予一个 OID。 |
XidGenLock |
等待分配或者赋予一个事务 ID。 |
ProcArrayLock |
等待在事 务结尾得到一个快照或者清除事务 ID。 |
SInvalReadLock |
等待从共享无 效消息队列中检索或者移除消息。 |
SInvalWriteLock |
等待在共 享无效消息队列中增加一个消息。 |
WALBufMappingLock |
等待在 WAL 缓冲区中替换一个页面。 |
WALWriteLock |
等待 WAL 缓冲区被写入到磁盘。 |
ControlFileLock |
等待读取 或者更新控制文件或创建一个新的 WAL 文件。 |
CheckpointLock |
等待执行检查点。 |
CLogControlLock |
等待读取或者更新事务状态。 |
SubtransControlLock |
等待读取或者更新子事务信息。 |
MultiXactGenLock |
等 待读取或者更新共享多事务状态。 |
MultiXactOffsetControlLock |
等 待读取或者更新多事务偏移映射。 |
MultiXactMemberControlLock |
等 待读取或者更新多事务成员映射。 |
RelCacheInitLock |
等待读取 或者写入关系缓冲区初始化文件。 |
CheckpointerCommLock |
等待管理 fsync 请求。 |
TwoPhaseStateLock |
等 待读取或者更新预备事务的状态。 |
TablespaceCreateLock |
等待创建或者删除表空间。 |
BtreeVacuumLock |
等待读取或者更新一个 B-树索引的 vacuum 相关的信息。 |
AddinShmemInitLock |
等待管理共享内存中的空间分配。 |
AutovacuumLock |
自动清 理工作者或者启动器等待更新或者 读取自动清理工作者的当前状态。 |
AutovacuumScheduleLock |
等待确 认选中进行清理的表仍需要清理。 |
SyncScanLock |
等待为同步扫 描得到一个表上扫描的开始位置。 |
RelationMappingLock |
等待更新用来存储目录 到文件节点映射的关系映射文件。 |
AsyncCtlLock |
等待读取或者更新共享通知状态。 |
AsyncQueueLock |
等待读取或者更新通知消息。 |
SerializableXactHashLock |
等待检索或 者存储有关可序列化事务的信息。 |
SerializableFinishedListLock |
等待 访问已结束可序列化事务的列表。 |
SerializablePredicateLockListLock |
等待在由可序列化事 务持有的所列表上执行一个操作。 |
OldSerXidLock |
等待读 取或者记录冲突的可序列化事务。 |
SyncRepLock |
等待读 取或者更新有关同步复制的信息。 |
BackgroundWorkerLock |
等 待读取或者更新后台工作者状态。 |
DynamicSharedMemoryControlLock |
等待 读取或者更新动态共享内存状态。 |
AutoFileLock |
等 待更新kingbase.auto.conf文件。 |
ReplicationSlotAllocationLock |
等待分配或者释放一个复制槽。 |
ReplicationSlotControlLock |
等待读取或者更新复制槽状态。 |
CommitTsControlLock |
等 待读取或者更新事务提交时间戳。 |
CommitTsLock |
等待读取或 者更新事务时间戳的最新设置值。 |
ReplicationOriginLock |
等 待设置、删除或者使用复制源头。 |
MultiXactTruncationLock |
等待读取或者阶段多事务信息。 |
OldSnapshotTimeMapLock |
等待 读取或者更新旧的快照控制信息。 |
LogicalRepWorkerLock |
等 待逻辑复制工作者上的动作完成。 |
CLogTruncationLock |
等待执行txid _status或更新可用的最新事务id。 |
clog |
在等地clog (事务状态)缓冲区上的I/O。 |
commit_timestamp |
等待提交时间戳缓冲区上的 I/O。 |
subtrans |
等待子事务缓冲区上的 I/O。 |
multixact_offset |
等待多事务偏移缓冲区上的 I/O。 |
multixact_member |
等待多事务成员缓冲区上的 I/O。 |
async |
等待 async(通知)缓冲区上的 I/O。 |
oldserxid |
等待 oldserxid 缓冲区上的 I/O。 |
wal_insert |
等待把 WAL 插入到一个内存缓冲区。 |
buffer_content |
等待读 取或者写入内存中的一个数据页。 |
buffer_io |
等待一个数据页面上的 I/O。 |
replication_origin |
等待读取或者更新复制进度。 |
replication_slot_io |
等待一个复制槽上的 I/O。 |
proc |
等待读取或者更新 fast-path 锁信息。 |
buffer_mapping |
等待把一个数据 块与缓冲池中的一个缓冲区关联。 |
lock_manager |
等待增加或检查用 于后端的锁,或者等待加入或退 出一个锁定组。 |
predicate_lock_manager |
等待增加或者检查谓词锁信息。 |
serializable_xact |
等待在并行查询 中对一个可序列化事务执行操作。 |
parallel_query_dsa |
等 待并行查询动态共享内存分配锁。 |
tbm |
等待TBM共享迭代器锁。 |
parallel_append |
在Parallel Append计划 执行期间等待选择下一个子计划。 |
parallel_hash_join |
在Parallel Hash计划执行期间等待分配 或交换一块内存或者更新计数器。 |
后端在等待一个重量级锁:重量级锁也被称为锁管理器锁或简单锁,主要保护SQL可见的对象,例如表,同时也被用于确保特定内部操作的互斥,如关系扩展。
等待事件名称 |
描述 |
---|---|
relation |
等待获得一个关系上的锁。 |
extend |
等待扩展一个关系。 |
page |
等待获得一个关系上的页面的锁。 |
tuple |
等待获得一个元组上的锁。 |
transactionid |
等待一个事务结束。 |
virtualxid |
等待获得一个虚拟 xid 锁。 |
speculative token |
等待获取一个 speculative insertion lock。 |
object |
等待获得一个非关系数据库对象上的锁。 |
userlock |
等待获得一个用户锁。 |
advisory |
等待获得一个咨询用户锁。 |
服务器进程在等待访问一个数据缓冲区:此时没有其他进程在检查该缓冲区。如果另一个进程持有一个即将需要读取的数据缓存区的游标,缓冲区 pin 等待可能会被延长。
等待事件名称 |
描述 |
---|---|
BufferPin |
等待在一个缓冲区上加 pin。 |
后台辅助进程活动等待:服务器进程处于闲置状态。这类等待被用于在其主处理循环中等待系统进程的活动。
等待事件名称 |
描述 |
---|---|
ArchiverMain |
在归档进程的主循环中等待。 |
AutoVacuumMain |
在autovacuum启动器进程的主循环中等待。 |
BgWriterHibernate |
在后台写入器进程中等待,休眠中。 |
BgWriterMain |
在后台写入器进程的后台工作者的主循环中等待。 |
CheckpointerMain |
在检查点进程的主循环中等待。 |
LogicalApplyMain |
在逻辑应用进程的主循环中等待。 |
LogicalLauncherMain |
在逻辑启动器进程的主循环中等待。 |
PgStatMain |
在统计收集器进程的主循环中等待。 |
RecoveryWalAll |
在恢复时 等待来自于任意类型来源(本地、归档或流)的WAL。 |
RecoveryWalStream |
在恢复时等待来自于一个流的WAL。 |
SysLoggerMain |
在系统日志进程的主循环中等待。 |
WalReceiverMain |
在WAL接收器进程的主循环中等待。 |
WalSenderMain |
在WAL发送器进程的主循环中等待。 |
WalWriterMain |
在WAL写入器进程的主循环中等待。 |
KshMain |
在KSH进程的主循环中等待。 |
KwrMain |
在KWR进程的主循环中等待。 |
客户端等待:服务器进程在一个套接字上等待来自用户应用的某种活动, 并且该服务器预计将有预期之外的事件发生。
等待事件名称 |
描述 |
---|---|
ClientRead |
等待从客户端读取数据。 |
ClientWrite |
等待向客户端写入数据。 |
LibPQWalReceiverConnect |
在WAL接收器中等待建立与远程服务器的连接。 |
LibPQWalReceiverReceive |
在WAL接收器中等待从远程服务器接收数据。 |
SSLOpenServer |
在尝试连接期间等待SSL。 |
WalReceiverWaitStart |
等待startup进程发送流复制的初始数据。 |
WalSenderWaitForWAL |
在WAL发送器进程中等待WAL被刷写。 |
WalSenderWriteData |
在WAL发送器进程中处理来自WAL接收器的回复时等待任意活动。 |
扩展插件等待:服务器进程在一个扩展模块中等待活动。这一类等待用于跟踪自定义等待点。
等待事件名称 |
描述 |
---|---|
Extension |
在一个扩展中等待。 |
进程间通讯等待:服务器进程在等待来自服务器中另一个进程的某种活动。
等待事件名称 |
描述 |
---|---|
BgWorkerShutdown |
等待后台工作者关闭。 |
BgWorkerStartup |
等待后台工作者启动。 |
BtreePage |
等待继续并行 B-树扫描所需的页号变得可用。 |
CheckpointDone |
等待检查点完成。 |
CheckpointStart |
等待检查点开始。 |
ClogGroupUpdate |
等待组领 袖在事务结束时更新事务状态。 |
ExecuteGather |
在执行Gathe r节点时等待来自子进程的活动。 |
Hash/Batch/Allocating |
等待一个选出的Parallel Hash参与者分配哈希表。 |
Hash/Batch/Electing |
在选出一个Parallel Hash参与者来分配一个哈希表。 |
Hash/Batch/Loading |
等待其他Parallel Hash参与者完成装载哈希表。 |
Hash/Build/Allocating |
等待一个选出的Parallel Hash参与者分配初始哈希表。 |
Hash/Build/Electing |
在选出一个Parallel Hash参与者以分配初始哈希表。 |
Hash/Build/HashingInner |
等待其他Parallel Hash参 与者完成对内关系的哈希操作。 |
Hash/Build/HashingOuter |
等待其他Parallel Hash参 与者完成对外关系的哈希操作。 |
Hash/GrowBatches/Allocating |
等待一个选出的Parallel Hash参与者分配更多批次。 |
Hash/GrowBatches/Deciding |
在选出一个Parallel H ash参与者决定未来的批次增长。 |
Hash/GrowBatches/Electing |
在选出一个Parallel Hash参与者分配更多批次。 |
Hash/GrowBatches/Finishing |
在等待一个选出的Parallel H ash参与者决定未来的批次增长。 |
Hash/GrowBatches/Repartitioning |
等待其他Parallel Hash参与者完成重新分区。 |
Hash/GrowBuckets/Allocating |
等待一个选出的Parallel Hash参与者完成更多桶的分配。 |
Hash/GrowBuckets/Electing |
在选出一个Parallel Hash参与者分配更多桶。 |
Hash/GrowBuckets/Reinserting |
等待其他Parallel Hash参与者 完成将元组插入到新桶的操作。 |
LogicalSyncData |
等待逻辑复制的远程服务 器发送用于初始表同步的数据。 |
LogicalSyncStateChange |
等待逻 辑复制的远程服务器更改状态。 |
MessageQueueInternal |
等待其 他进程被挂接到共享消息队列。 |
MessageQueuePutMessage |
等待把一个协 议消息写到一个共享消息队列。 |
MessageQueueReceive |
等待 从一个共享消息队列接收字节。 |
MessageQueueSend |
等待向 一个共享消息队列中发送字节。 |
ParallelBitmapScan |
等待并行位图扫描被初始化。 |
ParallelCreateIndexScan |
等待并行CREATE INDEX工作者完成堆扫描。 |
ParallelFinish |
等待并行工作者完成计算。 |
ProcArrayGroupUpdate |
等待组 领袖在事务结束时清除事务ID。 |
Promote |
等待备用节点升级。 |
ReplicationOriginDrop |
等待一个复 制源头变得不活跃以便被删除。 |
ReplicationSlotDrop |
等待一个 复制槽变得不活跃以便被删除。 |
SafeSnapshot |
等待一个用于READ ONLY DEFERRABLE事务的快照。 |
SyncRep |
在同步复制期 间等待来自远程服务器的确认。 |
超时等待:服务器进程在等待一次超时发生。
等待事件名称 |
描述 |
---|---|
BaseBackupThrottle |
当有限流活动时在基础备份期间等待。 |
PgSleep |
在调用pg_sleep的进程中等待。 |
RecoveryApplyDelay |
在恢复时等待应用WAL,因为它被延迟了。 |
IO等待:服务器进程在等待一次IO完成。
等待事件名称 |
描述 |
---|---|
BufFileRead |
等待从一个缓存的文件中读取。 |
BufFileWrite |
等待向一个缓存的文件中写入。 |
ControlFileRead |
等待从控制文件中读取。 |
ControlFileSync |
等待控制文件到达稳定存储。 |
ControlFileSyncUpdate |
等待对控制文件的更新到达稳定存储。 |
ControlFileWrite |
等待一个对控制文件的写入。 |
ControlFileWriteUpdate |
等待一个写操作更新控制文件。 |
CopyFileRead |
在文件拷贝操作期间等待一个读操作。 |
CopyFileWrite |
在文件拷贝操作期间等待一个写操作。 |
DataFileExtend |
等待一个关系数据文件被扩充。 |
DataFileFlush |
等待一个关系数据文件到达稳定存储。 |
DataFileImmediateSync |
等待一 个关系数据文件的立即同步到达稳定存储。 |
DataFilePrefetch |
等 待从一个关系数据文件中的一次异步预取。 |
DataFileRead |
等待一次对一个关系数据文件的读操作。 |
DataFileSync |
等待 对一个关系数据文件的更改到达稳定存储。 |
DataFileTruncate |
等待一个关系数据文件被截断。 |
DataFileWrite |
等待一次对一个关系数据文件的写操作。 |
DSMFillZeroWrite |
等待 向一个动态共享内存备份文件中写零字节。 |
LockFileAddToDataDirRead |
在向数据 目录锁文件中增加一行时等待一个读操作。 |
LockFileAddToDataDirSync |
在向数据目录锁 文件中增加一行时等待数据到达稳定存储。 |
LockFileAddToDataDirWrite |
在向数据 目录锁文件中增加一行时等待一个写操作。 |
LockFileCreateRead |
在创建数据目录锁文件期间等待读取。 |
LockFileCreateSync |
在创建数 据目录锁文件期间等待数据到达稳定存储。 |
LockFileCreateWrite |
在 创建数据目录锁文件期间等待一个写操作。 |
LockFileReCheckDataDirRead |
在重新检查 数据目录锁文件的过程中等待一个读操作。 |
Lo gicalRewriteCheckpointSync |
在一个检 查点期间等待逻辑重写映射到达稳定存储。 |
LogicalRewriteMappingSync |
在一次 逻辑重写期间等待映射数据到达稳定存储。 |
LogicalRewriteMappingWrite |
在一 次逻辑重写期间等待对映射数据的写操作。 |
LogicalRewriteSync |
等待逻辑重写映射到达稳定存储。 |
LogicalRewriteWrite |
等待对逻辑重写映射的写操作。 |
RelationMapRead |
等待对关系映射文件的读操作。 |
RelationMapSync |
等待关系映射文件到达稳定存储。 |
RelationMapWrite |
等待对关系映射文件的写操作。 |
ReorderBufferRead |
在重排序缓冲区管理期间等待一个读操作。 |
ReorderBufferWrite |
在重排序缓冲区管理期间等待一个写操作。 |
ReorderLogicalMappingRead |
在重排序缓冲 区管理期间等待对一个逻辑映射的读操作。 |
ReplicationSlotRead |
等待对一个复制槽控制文件的读操作。 |
ReplicationSlotRestoreSync |
在把一个复制槽控制文件 恢复到内存的过程中等待它到达稳定存储。 |
ReplicationSlotSync |
等待一个复制槽控制文件到达稳定存储。 |
ReplicationSlotWrite |
等待对一个复制槽控制文件的写操作。 |
SLRUFlushSync |
在检查点或者数 据库关闭期间等待SLRU数据到达稳定存储。 |
SLRURead |
等待对一个SLRU页面的读操作。 |
SLRUSync |
等待 SLRU数据在一个页面写之后到达稳定存储。 |
SLRUWrite |
等待一个SLRU页面上的写操作。 |
SnapbuildRead |
等待一个序列化历史目录快照的读操作。 |
SnapbuildSync |
等 待一个序列化历史目录快照到达稳定存储。 |
SnapbuildWrite |
等待一个序列化历史目录快照的写操作。 |
TimelineHistoryFileSync |
等待一个通过流复 制接收到的时间线历史文件到达稳定存储。 |
TimelineHistoryFileWrite |
等待一个通过 流复制接收到的时间线历史文件的读操作。 |
TimelineHistoryRead |
等待一个时间线历史文件上的读操作。 |
TimelineHistorySync |
等待一 个新创建的时间线历史文件达到稳定存储。 |
TimelineHistoryWrite |
等待 一个新创建的时间线历史文件上的写操作。 |
TwophaseFileRead |
等待一个两阶段状态文件的读操作。 |
TwophaseFileSync |
等待一个两阶段状态文件到达稳定存储。 |
TwophaseFileWrite |
等待一个两阶段状态文件的写操作。 |
WALBootstrapSync |
在自举期间等待WAL到达稳定存储。 |
WALBootstrapWrite |
在自举期间等待一个WAL页面的写操作。 |
WALCopyRead |
在通过拷贝一个已有W AL段创建一个新的WAL段时等待一个读操作。 |
WALCopySync |
等待一个通过拷 贝已有WAL段创建的新WAL段到达稳定存储。 |
WALCopyWrite |
在通过拷贝一个已有W AL段创建一个新的WAL段时等待一个写操作。 |
WALInitSync |
等待一个新初始化的WAL文件到达稳定存储。 |
WALInitWrite |
在初 始化一个新的WAL文件期间等待一个写操作。 |
WALRead |
等待一次对一个WAL文件的读操作。 |
WA LSenderTimelineHistoryRead |
在walsender的时间线命令 期间等待对一个时间线历史文件的读操作。 |
WALSync |
等待WAL文件到达持久的存储空间。 |
WALSyncMethodAssign |
在 指派WAL同步方法时等待数据到达稳定存储。 |
WALWrite |
等待一次对一个WAL文件的写操作。 |