文档首页 > > 开发指南> 系统表和系统视图> 系统视图> PG_THREAD_WAIT_STATUS

PG_THREAD_WAIT_STATUS

分享
更新时间: 2019/07/22 GMT+08:00

通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。

表1 PG_THREAD_WAIT_STATUS字段

名称

类型

描述

node_name

text

当前节点的名称。

db_name

text

数据库名称。

thread_name

text

线程名称。

query_id

bigint

查询ID,对应debug_query_id。

tid

bigint

当前线程的线程号。

lwtid

integer

当前线程的轻量级线程号。

ptid

integer

streaming线程的父线程。

tlevel

integer

streaming线程的层级。

smpid

integer

并行线程的ID。

wait_status

text

当前线程的等待状态。等待状态的详细信息请参见表2

wait_event

text

如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。

wait_status列的等待状态有以下状态。

表2 等待状态列表

wait_status值

含义

none

没在等任意事件。

acquire lock

等待加锁,要么加锁成功,要么加锁等待超时。

acquire lwlock

等待获取轻量级锁。

wait io

等待IO完成。

wait cmd

等待完成读取网络通信包。

wait pooler get conn

等待pooler完成获取连接。

wait pooler abort conn

等待pooler完成终止连接。

wait pooler clean conn

等待pooler完成清理连接。

get conn

获取到其他节点的连接。

set cmd

在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET。

cancel query

取消某连接上正在执行的SQL语句。

stop query

停止某连接上正在执行的查询。

wait node

等待接收与某节点的连接上的数据。

wait transaction sync

等待事务同步。

wait wal sync

等待特定LSN的wal log完成到备机的同步。

wait data sync

等待完成数据页到备机的同步。

wait data sync queue

等待把行存的数据页或列存的CU放入同步队列。

net flush data

等待向网络中的其他节点发送数据。

stream get conn

初始化stream flow时,等待建立到consumer nodes的连接。

wait producer ready

初始化stream flow时,等待每个producer都准备好。

synchronize quit

steam plan结束时,等待stream线程组内的线程统一退出。

nodegroup destroy

steam plan结束时,等待销毁stream node group。

wait active statement

等待作业执行,正在资源负载管控中。

当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。

其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。)

轻量级锁等待事件列表

wait_event类型

类型描述

ShmemIndexLock

用于保护共享内存中的主索引哈希表。

OidGenLock

用于避免不同线程产生相同的OID。

XidGenLock

用于避免两个事务获得相同的xid。

ProcArrayLock

用于避免并发访问或修改ProcArray共享数组。

SInvalReadLock

用于避免与清理失效消息并发执行。

SInvalWriteLock

用于避免与其它写失效消息、清理失效消息并发执行。

WALInsertLock

用于避免与其它WAL插入操作并发执行。

WALWriteLock

用于避免并发WAL写盘。

ControlFileLock

用于避免pg_control文件的读写并发、写写并发。

CheckpointLock

用于避免多个checkpoint并发执行。

CLogControlLock

用于避免并发访问或者修改Clog控制数据结构。

SubtransControlLock

用于避免并发访问或者修改子事务控制数据结构。

MultiXactGenLock

用于串行分配唯一MultiXact id。

MultiXactOffsetControlLock

用于避免对pg_multixact/offset的写写并发和读写并发。

MultiXactMemberControlLock

用于避免对pg_multixact/members的写写并发和读写并发。

RelCacheInitLock

用于失效消息场景对init文件进行操作时加锁。

CheckpointerCommLock

用于向checkpointer发起文件刷盘请求场景,需要串行的向请求队列插入请求结构。

TwoPhaseStateLock

用于避免并发访问或者修改两阶段信息共享数组。

TablespaceCreateLock

用于确定tablespace是否已经存在。

BtreeVacuumLock

用于防止vacuum清理B-tree中还在使用的页面。

AutovacuumLock

用于串行化访问autovacuum worker数组。

AutovacuumScheduleLock

用于串行化分配需要vacuum的table。

AutoanalyzeLock

用于获取和释放允许执行Autoanalyze的任务资源。

SyncScanLock

用于确定heap扫描时某个relfilenode的起始位置。

NodeTableLock

用于保护存放CN和DN节点信息的共享结构。

PoolerLock

用于保证两个线程不会同时从连接池里取到相同的连接。

RelationMappingLock

用于等待更新系统表到存储位置之间映射的文件。

AsyncCtlLock

用于避免并发访问或者修改共享通知状态。

AsyncQueueLock

用于避免并发访问或者修改共享通知信息队列。

SerializableXactHashLock

用于避免对于可串行事务共享结构的写写并发和读写并发。

SerializableFinishedListLock

用于避免对于已完成可串行事务共享链表的写写并发和读写并发。

SerializablePredicateLockListLock

用于保护对于可串行事务持有的锁链表。

OldSerXidLock

用于保护记录冲突可串行事务的结构。

FileStatLock

用于保护存储统计文件信息的数据结构。

SyncRepLock

用于在主备复制时保护xlog同步信息。

DataSyncRepLock

用于在主备复制时保护数据页同步信息。

CStoreColspaceCacheLock

用于保护列存表的CU空间分配。

CStoreCUCacheSweepLock

用于列存CU Cache循环淘汰。

MetaCacheSweepLock

用于元数据循环淘汰。

DfsConnectorCacheLock

用于保护缓存HDFS连接的句柄的全局哈希表。

dummyServerInfoCacheLock

用于保护缓存加速集群连接信息的全局哈希表。

ExtensionConnectorLibLock

用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。

SearchServerLibLock

用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。

DfsUserLoginLock

用于保护HDFS用户信息的全局链表。

DfsSpaceCacheLock

用于控制HDFS表导入时文件ID单调递增。

LsnXlogChkFileLock

用于串行更新特定结构中记录的主备机的xlog flush位置点。

GTMHostInfoLock

用于避免并发访问或者修改GTM主机信息。

ReplicationSlotAllocationLock

用于主备复制时保护主机端的流复制槽的分配。

ReplicationSlotControlLock

用于主备复制时避免并发更新流复制槽状态。

ResourcePoolHashLock

用于避免并发访问或者修改资源池哈希表。

WorkloadStatHashLock

用于避免并发访问或者修改包含CN侧的SQL请求构成的哈希表。

WorkloadIoStatHashLock

用于避免并发访问或者修改用于统计当前DN的IO信息的哈希表。

WorkloadCGroupHashLock

用于避免并发访问或者修改Cgroup信息构成的哈希表。

OBSGetPathLock

用于避免对obs路径的写写并发和读写并发。

WorkloadUserInfoLock

用于避免并发访问或修改负载管理的用户信息哈希表。

WorkloadRecordLock

用于避免并发访问或修改在内存自适应管理时对CN收到请求构成的哈希表。

WorkloadIOUtilLock

用于保护记录iostat,CPU等负载信息的结构。

WorkloadNodeGroupLock

用于避免并发访问或者修改内存中的nodegroup信息构成的哈希表。

JobShmemLock

用于MPP兼容ORACLE定时任务功能中保护定时读取的全局变量。

OBSRuntimeLock

用于获取环境变量,如GAUSSHOME。

LLVMDumpIRLock

用于导出动态生成函数所对应的汇编语言。该类型仅适用于x86平台。

LLVMParseIRLock

用于在查询开始处从IR文件中编译并解析已写好的IR函数。该类型仅适用于x86平台。

RPNumberLock

用于加速集群的DN对正在执行计划的任务线程的计数。

ClusterRPLock

用于加速集群的CCN中维护的集群负载数据的并发存取控制。

CriticalCacheBuildLock

用于从共享或者本地缓存初始化文件中加载cache的场景。

WaitCountHashLock

用于保护用户语句计数功能场景中的共享结构。

BufMappingLock

用于保护对共享缓冲映射表的操作。

LockMgrLock

用于保护常规锁结构信息。

PredicateLockMgrLock

用于保护可串行事务锁结构信息。

OperatorRealTLock

用于避免并发访问或者修改记录算子级实时数据的全局结构。

OperatorHistLock

用于避免并发访问或者修改记录算子级历史数据的全局结构。

SessionRealTLock

用于避免并发访问或者修改记录query级实时数据的全局结构。

SessionHistLock

用于避免并发访问或者修改记录query级历史数据的全局结构。

CacheSlotMappingLock

用于保护CU Cache全局信息。

BarrierLock

用于保证当前只有一个线程在创建Barrier。

当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。

IO等待事件列表

wait_event类型

类型描述

BufFileRead

从临时文件中读取数据到指定buffer。

BufFileWrite

向临时文件中写入指定buffer中的内容。

ControlFileRead

读取pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。

ControlFileSync

将pg_control文件持久化到磁盘。数据库初始化时发生。

ControlFileSyncUpdate

将pg_control文件持久化到磁盘。主要在数据库启动、执行checkpoint和主备校验过程中发生。

ControlFileWrite

写入pg_control文件。数据库初始化时发生。

ControlFileWriteUpdate

更新pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。

CopyFileRead

copy文件时读取文件内容。

CopyFileWrite

copy文件时写入文件内容。

DataFileExtend

扩展文件时向文件写入内容。

DataFileFlush

将表数据文件持久化到磁盘

DataFileImmediateSync

将表数据文件立即持久化到磁盘。

DataFilePrefetch

异步读取表数据文件。

DataFileRead

同步读取表数据文件。

DataFileSync

将表数据文件的修改持久化到磁盘。

DataFileTruncate

表数据文件truncate。

DataFileWrite

向表数据文件写入内容。

LockFileAddToDataDirRead

读取"postmaster.pid"文件。

LockFileAddToDataDirSync

将"postmaster.pid"内容持久化到磁盘。

LockFileAddToDataDirWrite

将pid信息写到"postmaster.pid"文件。

LockFileCreateRead

读取LockFile文件"%s.lock"。

LockFileCreateSync

将LockFile文件"%s.lock"内容持久化到磁盘。

LockFileCreateWRITE

将pid信息写到LockFile文件"%s.lock"。

RelationMapRead

读取系统表到存储位置之间的映射文件

RelationMapSync

将系统表到存储位置之间的映射文件持久化到磁盘。

RelationMapWrite

写入系统表到存储位置之间的映射文件。

ReplicationSlotRead

读取流复制槽文件。重新启动时发生。

ReplicationSlotRestoreSync

将流复制槽文件持久化到磁盘。重新启动时发生。

ReplicationSlotSync

checkpoint时将流复制槽临时文件持久化到磁盘。

ReplicationSlotWrite

checkpoint时写流复制槽临时文件。

SLRUFlushSync

将pg_clog、pg_subtrans和pg_multixact文件持久化到磁盘。主要在执行checkpoint和数据库停机时发生。

SLRURead

读取pg_clog、pg_subtrans和pg_multixact文件。

SLRUSync

将脏页写入文件pg_clog、pg_subtrans和pg_multixact并持久化到磁盘。主要在执行checkpoint和数据库停机时发生。

SLRUWrite

写入pg_clog、pg_subtrans和pg_multixact文件。

TimelineHistoryRead

读取timeline history文件。在数据库启动时发生。

TimelineHistorySync

将timeline history文件持久化到磁盘。在数据库启动时发生。

TimelineHistoryWrite

写入timeline history文件。在数据库启动时发生。

TwophaseFileRead

读取pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。

TwophaseFileSync

将pg_twophase文件持久化到磁盘。在两阶段事务提交、两阶段事务恢复时发生。

TwophaseFileWrite

写入pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。

WALBootstrapSync

将初始化的WAL文件持久化到磁盘。在数据库初始化发生。

WALBootstrapWrite

写入初始化的WAL文件。在数据库初始化发生。

WALCopyRead

读取已存在的WAL文件并进行复制时产生的读操作。在执行归档恢复完后发生。

WALCopySync

将复制的WAL文件持久化到磁盘。在执行归档恢复完后发生。

WALCopyWrite

读取已存在WAL文件并进行复制时产生的写操作。在执行归档恢复完后发生。

WALInitSync

将新初始化的WAL文件持久化磁盘。在日志回收或写日志时发生。

WALInitWrite

将新创建的WAL文件初始化为0。在日志回收或写日志时发生。

WALRead

从xlog日志读取数据。两阶段文件redo相关的操作产生。

WALSyncMethodAssign

将当前打开的所有WAL文件持久化到磁盘。

WALWrite

写入WAL文件。

当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。

事务锁等待事件列表

wait_event类型

类型描述

relation

对表加锁

extend

对表扩展空间时加锁

partition

对分区表加锁

partition_seq

对分区表的分区加锁

page

对表页面加锁

tuple

对页面上的tuple加锁

transactionid

对事务ID加锁

virtualxid

对虚拟事务ID加锁

object

加对象锁

cstore_freespace

对列存空闲空间加锁

userlock

加用户锁

advisory

加advisory锁

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区