云服务器内容精选

  • PV_FILE_STAT PV_FILE_STAT视图通过对数据文件IO的统计,反映数据的IO性能,用以发现IO操作异常等性能问题。 表1 PV_FILE_STAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds bigint 读物理文件的数目。 phywrts bigint 写物理文件的数目。 phyblkrd bigint 读物理文件块的数目。 phyblkwrt bigint 写物理文件块的数目。 readtim bigint 读文件的总时长,单位为微秒。 writetim bigint 写文件的总时长,单位为微秒。 avgiotim bigint 读写文件的平均时长,单位为微秒。 lstiotim bigint 最后一次读文件时长,单位为微秒。 miniotim bigint 读写文件的最小时长,单位为微秒。 maxiowtm bigint 读写文件的最大时长,单位为微秒。 父主题: 系统视图
  • PG_THREAD_WAIT_STATUS 通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。具体字段信息如表1所示。 表1 PG_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 当前节点的名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询id,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint 当前会话id。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的id。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、I/O的信息。否则是空。 locktag text 当前线程正等待获取的锁的信息。 lockmode text 当前线程正等待获取的锁的模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话id。 wait_status列的等待状态如表2所示。 表2 等待状态列表 wait_status值 含义 none 没在等任意事件。 acquire lock 等待加锁,要么加锁成功,要么加锁等待超时。 acquire lwlock 等待获取轻量级锁。 wait io 等待I/O完成。 wait cmd 等待完成读取网络通信包。 wait pooler get conn 等待pooler完成获取连接。 wait pooler abort conn 等待pooler完成终止连接。 wait pooler clean conn 等待pooler完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 gtm connect 等待与GTM建连。 gtm get gxid 等待从GTM获取事务xid。 gtm get snapshot 等待从GTM获取事务快照snapshot。 gtm begin trans 等待GTM开始事务。 gtm commit trans 等待GTM提交事务。 gtm rollback trans 等待GTM执行事务回滚。 gtm start prepare trans 等待GTM开始两阶段事务的prepare阶段。 gtm prepare trans 等待GTM完成两阶段事务的prepare阶段。 gtm open sequence 等待GTM打开sequence。 gtm close sequence 等待GTM关闭sequence。 gtm create sequence 等待GTM创建sequence。 gtm alter sequence 等待GTM修改sequence。 gtm get sequence val 等待从GTM获取sequence的下一个值。 gtm set sequence val 等待GTM设置sequence的值。 gtm drop sequence 等待GTM删除sequence。 gtm rename sequence 等待GTM重命名sequence。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 prune table 等待堆表清理历史删除数据。 prune index 等待索引清理历史删除数据。 vacuum gpi 等待gpi索引清理历史删除数据。 gtm reset xmin 等待gtm重置xmin。 gtm get xmin 等待从gtm获取xmin。 gtm get csn 等待从gtm获取csn。 gtm start preprare trans 等待gtm启动二阶段事务。 gtm rename sequence 等待gtm重命名sequence。 wait reserve td 等待分配ustore事务槽。 wait td rollback 等待ustore事务槽回滚。 wait available td 等待ustore可用的事务槽。 wait transaction rollback 等待事务回滚。 gtm set disaster cluster 等待在gtm设置容灾集群信息。 gtm get disaster cluster 等待从gtm获取容灾集群信息。 gtm del disaster cluster 等待在gtm删除容灾集群信息。 gtm set consistency point 等待在gtm设置一致性点。 wait sync bgworkers 等待并行创建索引的子线程完成本地扫描和排序。 wait gs_sleep 等待服务器线程延迟时间。 wait vacuum delay 等待vacuum延迟时间。 wait seq scan seq scan执行时间。 wait index scan index scan执行时间。 wait checkpoint start checkpoint开始阶段时间。 wait checkpoint done checkpoint结束阶段时间。 wait xact start command xact开始时间。 wait xact commit command xact提交时间。 wait io control 等待作业执行,正在I/O管控中。 security audit write pipe 等待将审计日志写入管道。 当wait_status为acquire lwlock、acquire lock或wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁或者正在进行I/O操作。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如表3所示。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 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中还在使用的页面。 AlterPortLock 用于保护CN更改注册端口号的操作。 AutovacuumLock 用于串行化访问autovacuum worker数组。 AutovacuumScheduleLock 用于串行化分配需要vacuum的table。 AutoanalyzeLock 用于获取和释放允许执行Autoanalyze的任务资源。 SyncScanLock 用于确定heap扫描时某个relfilenode的起始位置。 NodeTableLock 用于保护存放CN和DN节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 Async Ctl 用于保护Async buffer。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 GTMHostInfoLock 用于避免并发访问或者修改GTM主机信息。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 JobShmemLock 用于MPP兼容ORACLE定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GAUSSHOME。 LLVMDumpIRLock 用于导出动态生成函数所对应的汇编语言。 LLVMParseIRLock 用于在查询开始处从IR文件中编译并解析已写好的IR函数。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 CacheSlotMappingLock 用于保护CU Cache全局信息。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。 GPCMappingLock 用于全局Plan Cache缓存管理。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 AddinShmemInitLock 保护共享内存对象的初始化。 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 PldebugLock 用于存储过程调试并发维护操作。 StartBlockMappingLock 用于globalstat从pgstat获取startblockarray等信息。 GlobalSeqLock 用于全局seqence序列管理。 MatviewSeqnoLock 用于物化视图缓存管理。 DataFileIdCacheLock 管理共享内存中存储数据文件描述符的哈希表的并发访存。 GTMHostInfoLock 保护共享GTM主机信息的并发访存。 TwoPhaseStatePartLock 保护(各个分区)两阶段事务状态信息。 WALBufMappingLock 保护共享内中各个wal缓存页面与lsn偏移的映射关系。 UndoZoneLock 保护undozone的并发访存。 RollbackReqHashLock 管理共享内存中存储回滚请求信息的哈希表的并发访存。 UHeapStatLock 保护ustore统计信息的并发访存。 WALWritePaxosLock 保护向paxos复制组件写wal日志的并发顺序。 SyncPaxosLock 保护paxos同步队列的并发访存。 BackgroundWorkerLock 保护background worker的并发顺序。 HadrSwitchoverLock 保护容灾切换的并发顺序。 HashUidLock 保护uid分配的并发顺序。 ParallelDecodeLock 保护并行解码的并发顺序。 XLogMax CS NLock 保护容灾模式下本地最大可恢复CSN信息。 DisasterCacheLock 保护共享内存中容灾信息缓存的并发访存。 MaxCSNArrayLock 保护共享内存中各个分片备机CSN恢复进度信息。 RepairBadBlockStatHashLock 保护共享内存中损坏页面哈希表的并发访存。 DropArchiveSlotLock 保护删除归档槽信息的并发顺序。 ProcXactMappingLock 保护事务号-线程信息映射哈希表的并发访存。 UndoPerZoneLock 保护每个undozone内信息的并发访存。 UndoSpaceLock 保护undospace的并发访存。 SnapshotBlockLock 控制快照备份与页面刷盘的并发顺序。 DWSingleFlushFirstLock 控制非段页式单页面双写文件的并发顺序。 DWSingleFlushSecondLock 控制段页式单页面双写文件的并发顺序 DWSingleFlushSecondBufTagLock 控制段页式单页面双写文件的元信息并发访存 RestartPointQueueLock 控制备机restart Point数组的并发访存。 UnlinkRelHashTblLock 保护共享内存中待删除文件哈希表的并发访存。 UnlinkRelForkHashTblLock 保护共享内存中待删除文件fork哈希表的并发访存。 WALFlushWait 保护日志刷盘的并发顺序。 WALConsensusWait 保护日志达成一致才进行事务提交或日志回放操作。 WALBufferInitWait 保护wal共享内存页面的初始化和刷盘顺序。 WALInitSegment 保护wal日志段文件的初始化顺序。 SegmentHeadPartitionLock 保护段页式segment头部元信息的分区锁。 PgwrSyncQueueLock 保护待刷盘文件队列的并发访存。 BarrierHashTblLock 保护共享内存中barrier列表信息的并发访存。 PageRepairHashTblLock 保护页面修复哈希表的并发访存。 FileRepairHashTblLock 保护文件修复哈希表的并发访存。 BadBlockStatHashLock 保护共享损坏页面统计哈希表的并发访存。 BufferIOLock 保护共享缓冲区单个页面加载或淘汰的IO并发。 BufferContentLock 保护共享缓冲区单个页面的读写并发。 CUSlotListLock 保护共享CU槽位链表的并发访存。 DataCacheLock 保护共享CU只读缓存的并发访存。 MetaCacheLock 保护共享cu meta缓存的并发访存。 CBMParseXlogLock 控制cbm文件的并发访存。 CLogBufMappingLock 控制共享clog页面映射的并发访存。 C LOG Ctl 控制各个clog分区信息的并发访存。 CSNBufMappingLock 控制共享csnlog页面映射的并发访存。 CSNLOG Ctl 控制各个csnlog分区信息的并发访存。 DelayDDLLock 控制删除类ddl和延迟备份功能的并发顺序。 DoubleWriteLock 控制双写模块的并发顺序。 DfsConnectorCacheLock 控制dfs连接缓存的并发访存。 DfsUserLoginLock 控制dfs用户登录的并发顺序。 DfsSpaceCacheLock 控制dfs空间管理缓存的并发顺序。 PGPROCLock 保护全局共享线程状态数组的并发访存。 RelfilenodeReuseLock 控制文件名复用的并发顺序。 ReplicationSlotLock 保护逻辑复制槽信息的并发访存。 LogicalReplicationSlotPersistentDataLock 控制逻辑复制槽持久化的并发顺序。 RowPageReplicationLock 控制行存页面复制的并发顺序。 MultiXactOffset Ctl 保护multixact offset文件信息的并发访存。 MultiXactMember Ctl 保护multixact member文件信息的并发访存。 OldSerXid SLRU Ctl 保护oldser事务号缓存信息的并发访存。 FullBuildXlogCopyStartPtrLock 控制全量build起点位置的并发访存。 RcvWriteLock 控制wal receiver writer的并发顺序。 XlogRemoveSegLock 控制最新删除wal文件信息的并发访存。 CsnMinLock 控制csn min信息的并发访存。 HypoIndexLock 虚拟索引创建、删除、重置等动作中使用的轻量级锁。 XGBoostLibLock DB4AI特性调用xgboost库时启用的锁。 InstrUserLockId 对保护用户登录或者退出登录哈希表并发修改加锁。 GsStackLock 控制gs_stack函数不被并发调用。 InstrStmtTrackCtlLock 在动态开启全量SQL时, 保护哈希表的并发访存。 CaptureViewFileHashLock 开启性能视图采集时,保护哈希表的并发访存。 UniqueSqlEvictLock 开启Unique SQL回收时,保护哈希表的并发访存。 ASPMappingLock 用于管理ASP的hash表的并发访存。 AuditIndexFileLock 控制审计日志index文件的并发读写。 SQLAdvisorLock 用于管理分布列推荐中hash表的并发访存。 LWTRANCHE_ACCOUNT_TABLE 控制账户锁定状态hash表的并发读写。 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如表4所示。 表4 I/O等待事件列表 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"。 NgroupDestoryLock 对于保护nodegroup哈希表并发修改加锁。 NGroupMappingLock 对于保护nodegroup哈希表的单个分桶并发修改加锁。 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文件。 DoubleWriteFileRead 等待读取双写文件。 DoubleWriteFileSync 等待刷盘双写文件。 DoubleWriteFileWrite 等待写入双写文件。 PredoProcessPending 等待并行回放处理剩余记录。 PredoApply 等待并行回放应用回放。 DisableConnectFileRead 等待读取锁分片文件。 DisableConnectFileSync 等待刷盘锁分片文件。 DisableConnectFileWrite 等待写入锁分片文件 BufHashTableSearch 共享缓冲区hash表搜索(可能会触发页面淘汰)。 buffer_strategy_get 策略化缓冲区页面获取(可能会触发页面淘汰)。 UndoFileExtend undo文件扩展。 UndoFilePrefetch undo文件预取。 UndoFileRead undo文件读取。 UndoFileWrite undo文件写。 UndoFileSync undo文件刷盘。 UndoFileUnlink undo文件删除。 UndoMetaSync undo元数据文件刷盘。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DWSingleFlushGetPos 单页面双写文件查找可用位置。 DWSingleFlushWrite 单页面双写文件刷盘。 CkptWaitPageWriterFlush 执行全量checkpoint时等待刷页。 CkptWaitPageWriterSync checkpoint打点前等待有修改的文件同步到磁盘。 CkptWaitCommitTransactionFinish checkpoint打点前等待所有已经提交的事务提交完毕。 MPFL_INIT 初始化max_page_flush_lsn。 MPFL_READ 读取max_page_flush_lsn。 MPFL_WRITE 写max_page_flush_lsn。 OBSList 遍历OBS目录。 OBSRead 读取OBS对象。 OBSWrite 写入OBS对象。 LOGCTRL_SLEEP 等待备机回放追赶。 ShareStorageWalRead 共享盘读取日志文件。 ShareStorageWalWrite 共享盘写入日志文件。 ShareStorageCtlInfoRead 共享盘读取控制信息。 ShareStorageCtlInfoWrite 共享盘写入控制信息。 SegFileExtend 段页式文件扩展。 SegReadDisk 段页式文件读取。 SegWriteDisk 段页式文件写入。 SegSync 段页式文件刷盘。 SegFileShrink 段页式文件收缩。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如表5所示。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务id加锁。 virtualxid 对虚拟事务id加锁。 object 加对象锁。 userlock 加用户锁。 advisory 加advisory锁。 filenode 对文件名加锁。 subtransactionid 对子事务号加锁。 tuple_uid 对元组头部的uid隐藏字段加锁。 父主题: 其他系统视图
  • PG_THREAD_WAIT_STATUS 通过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 当前线程的线程号。 sessionid bigint 当前会话ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。 locktag text 当前线程正等待获取的锁的信息。 lockmode text 当前线程正等待获取的锁的模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 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完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 quota即流控大小,表示网络通道可接收的数据大小。 wait quota具体表示发送端(数据生产者)等待接收端(数据消费者)发送当前连接的quota信息。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 gtm connect 等待与GTM建连。 gtm get gxid 等待从GTM获取事务xid。 gtm get snapshot 等待从GTM获取事务快照snapshot。 gtm begin trans 等待GTM开始事务。 gtm commit trans 等待GTM提交事务。 gtm rollback trans 等待GTM执行事务回滚。 gtm start prepare trans 等待GTM开始两阶段事务的prepare阶段。 gtm prepare trans 等待GTM完成两阶段事务的prepare阶段。 gtm open sequence 等待GTM打开sequence。 gtm close sequence 等待GTM关闭sequence。 gtm create sequence 等待GTM创建sequence。 gtm alter sequence 等待GTM修改sequence。 gtm get sequence val 等待从GTM获取sequence的下一个值。 gtm set sequence val 等待GTM设置sequence的值。 gtm drop sequence 等待GTM删除sequence。 gtm rename sequence 等待GTM重命名sequence。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 prune table 等待堆表清理历史删除数据。 prune index 等待索引清理历史删除数据。 vacuum gpi 等待gpi索引清理历史删除数据。 gtm reset xmin 等待gtm重置xmin。 gtm get xmin 等待从gtm获取xmin。 gtm get csn 等待从gtm获取csn。 gtm start preprare trans 等待gtm启动二阶段事务。 gtm rename sequence 等待gtm重命名sequence。 wait reserve td 等待分配ustore事务槽。 wait td rollback 等待ustore事务槽回滚。 wait available td 等待ustore可用的事务槽。 wait transaction rollback 等待事务回滚。 gtm set disaster cluster 等待在gtm设置容灾集群信息。 gtm get disaster cluster 等待从gtm获取容灾集群信息。 gtm del disaster cluster 等待在gtm删除容灾集群信息。 gtm set consistency point 等待在gtm设置一致性点。 wait sync bgworkers 等待并行创建索引的子线程完成本地扫描和排序。 security audit write pipe 等待将审计日志写入管道。 wait unpack stream plan DN上等待解析stream计划 wait fetch undo record 等待读取目标 undo 记录 wait heap hot search buffer 等待通过 hot 链读取满足快照的 astore 元组 wait exclusive lwlock 防饿死机制触发,新的轻量级锁加锁请求等待之前被阻塞的轻量级锁获取到 当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 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中还在使用的页面。 AlterPortLock 用于保护CN更改注册端口号的操作。 AutovacuumLock 用于串行化访问autovacuum worker数组。 AutovacuumScheduleLock 用于串行化分配需要vacuum的table。 AutoanalyzeLock 用于获取和释放允许执行Autoanalyze的任务资源。 SyncScanLock 用于确定heap扫描时某个relfilenode的起始位置。 NodeTableLock 用于保护存放CN和DN节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 Async Ctl 用于保护Async buffer。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 GTMHostInfoLock 用于避免并发访问或者修改GTM主机信息。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 JobShmemLock 用于MPP兼容ORACLE定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GAUSSHOME。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 CacheSlotMappingLock 用于保护CU Cache全局信息。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。 GPCMappingLock 用于全局Plan Cache缓存管理。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 AddinShmemInitLock 保护共享内存对象的初始化。 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 PldebugLock 用于存储过程调试并发维护操作。 StartBlockMappingLock 用于globalstat从pgstat获取startblockarray等信息。 GlobalSeqLock 用于全局seqence序列管理。 MatviewSeqnoLock 用于物化视图缓存管理。 DataFileIdCacheLock 管理共享内存中存储数据文件描述符的哈希表的并发访存。 GTMHostInfoLock 保护共享GTM主机信息的并发访存。 TwoPhaseStatePartLock 保护(各个分区)两阶段事务状态信息。 WALBufMappingLock 保护共享内中各个wal缓存页面与lsn偏移的映射关系。 UndoZoneLock 保护undozone的并发访存。 RollbackReqHashLock 管理共享内存中存储回滚请求信息的哈希表的并发访存。 UHeapStatLock 保护ustore统计信息的并发访存。 WALWritePaxosLock 保护向paxos复制组件写wal日志的并发顺序。 SyncPaxosLock 保护paxos同步队列的并发访存。 BackgroundWorkerLock 保护background worker的并发顺序。 HadrSwitchoverLock 保护容灾切换的并发顺序。 HashUidLock 保护uid分配的并发顺序。 ParallelDecodeLock 保护并行解码的并发顺序。 XLogMaxCSNLock 保护容灾模式下本地最大可恢复CSN信息。 DisasterCacheLock 保护共享内存中容灾信息缓存的并发访存。 MaxCSNArrayLock 保护共享内存中各个分片备机CSN恢复进度信息。 RepairBadBlockStatHashLock 保护共享内存中损坏页面哈希表的并发访存。 DropArchiveSlotLock 保护删除归档槽信息的并发顺序。 ProcXactMappingLock 保护事务号-线程信息映射哈希表的并发访存。 UndoPerZoneLock 保护每个undozone内信息的并发访存。 UndoSpaceLock 保护undospace的并发访存。 SnapshotBlockLock 控制快照备份与页面刷盘的并发顺序。 DWSingleFlushFirstLock 控制页式单页面双写文件的并发顺序。 RestartPointQueueLock 控制备机restart Point数组的并发访存。 UnlinkRelHashTblLock 保护共享内存中待删除文件哈希表的并发访存。 UnlinkRelForkHashTblLock 保护共享内存中待删除文件fork哈希表的并发访存。 WALFlushWait 保护日志刷盘的并发顺序。 WALConsensusWait 保护日志达成一致才进行事务提交或日志回放操作。 WALBufferInitWait 保护wal共享内存页面的初始化和刷盘顺序。 WALInitSegment 保护wal日志段文件的初始化顺序。 PgwrSyncQueueLock 保护待刷盘文件队列的并发访存。 BarrierHashTblLock 保护共享内存中barrier列表信息的并发访存。 PageRepairHashTblLock 保护页面修复哈希表的并发访存。 FileRepairHashTblLock 保护文件修复哈希表的并发访存。 BadBlockStatHashLock 保护共享损坏页面统计哈希表的并发访存。 BufferIOLock 保护共享缓冲区单个页面加载或淘汰的IO并发。 BufferContentLock 保护共享缓冲区单个页面的读写并发。 CUSlotListLock 保护共享CU槽位链表的并发访存。 DataCacheLock 保护共享CU只读缓存的并发访存。 MetaCacheLock 保护共享cu meta缓存的并发访存。 CBMParseXlogLock 控制cbm文件的并发访存。 CLogBufMappingLock 控制共享clog页面映射的并发访存。 CLOG Ctl 控制各个clog分区信息的并发访存。 CSNBufMappingLock 控制共享csnlog页面映射的并发访存。 CSNLOG Ctl 控制各个csnlog分区信息的并发访存。 DelayDDLLock 控制删除类ddl和延迟备份功能的并发顺序。 DoubleWriteLock 控制双写模块的并发顺序。 DfsConnectorCacheLock 控制dfs连接缓存的并发访存。 DfsUserLoginLock 控制dfs用户登录的并发顺序。 DfsSpaceCacheLock 控制dfs空间管理缓存的并发顺序。 PGPROCLock 保护全局共享线程状态数组的并发访存。 RelfilenodeReuseLock 控制文件名复用的并发顺序。 ReplicationSlotLock 保护逻辑复制槽信息的并发访存。 LogicalReplicationSlotPersistentDataLock 控制逻辑复制槽持久化的并发顺序。 RowPageReplicationLock 控制行存页面复制的并发顺序。 MultiXactOffset Ctl 保护multixact offset文件信息的并发访存。 MultiXactMember Ctl 保护multixact member文件信息的并发访存。 OldSerXid SLRU Ctl 保护oldser事务号缓存信息的并发访存。 FullBuildXlogCopyStartPtrLock 控制全量build起点位置的并发访存。 RcvWriteLock 控制wal receiver writer的并发顺序。 XlogRemoveSegLock 控制最新删除wal文件信息的并发访存。 CsnMinLock 控制csn min信息的并发访存。 HypoIndexLock 虚拟索引创建、删除、重置等动作中使用的轻量级锁。 XGBoostLibLock DB4AI特性调用xgboost库时启用的锁。 InstrUserLockId 对保护用户登入登出哈希表并发修改加锁。 GsStackLock 控制gs_stack函数不被并发调用。 InstrStmtTrackCtlLock 在动态开启全量SQL时, 保护哈希表的并发访存。 CaptureViewFileHashLock 开启性能视图采集时,保护哈希表的并发访存。 UniqueSqlEvictLock 开启Unique SQL回收时,保护哈希表的并发访存。 ASPMappingLock 用于管理ASP的hash表的并发访存。 AuditIndexFileLock 控制审计日志index文件的并发读写。 SQLAdvisorLock 用于管理分布列推荐中hash表的并发访存。 LWTRANCHE_ACCOUNT_TABLE 控制账户锁定状态hash表的并发读写。 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。 表4 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"。 NgroupDestoryLock 对于保护nodegroup哈希表并发修改加锁。 NGroupMappingLock 对于保护nodegroup哈希表的单个分桶并发修改加锁。 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文件。 DoubleWriteFileRead 等待读取双写文件。 DoubleWriteFileSync 等待刷盘双写文件。 DoubleWriteFileWrite 等待写入双写文件。 PredoProcessPending 等待并行回放处理剩余记录。 PredoApply 等待并行回放应用回放。 DisableConnectFileRead 等待读取锁分片文件。 DisableConnectFileSync 等待刷盘锁分片文件。 DisableConnectFileWrite 等待写入锁分片文件 BufHashTableSearch 共享缓冲区hash表搜索(可能会触发页面淘汰)。 buffer_strategy_get 策略化缓冲区页面获取(可能会触发页面淘汰)。 UndoFileExtend undo文件扩展。 UndoFilePrefetch undo文件预取。 UndoFileRead undo文件读取。 UndoFileWrite undo文件写。 UndoFileSync undo文件刷盘。 UndoFileUnlink undo文件删除。 UndoMetaSync undo元数据文件刷盘。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DWSingleFlushGetPos 单页面双写文件查找可用位置。 DWSingleFlushWrite 单页面双写文件刷盘。 MPFL_INIT 初始化max_page_flush_lsn。 MPFL_READ 读取max_page_flush_lsn。 MPFL_WRITE 写max_page_flush_lsn。 OBSList 遍历OBS目录。 OBSRead 读取OBS对象。 OBSWrite 写入OBS对象。 LOGCTRL_SLEEP 等待备机回放追赶。 ShareStorageWalRead 共享盘读取日志文件。 ShareStorageWalWrite 共享盘写入日志文件。 ShareStorageCtlInfoRead 共享盘读取控制信息。 ShareStorageCtlInfoWrite 共享盘写入控制信息。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务ID加锁。 virtualxid 对虚拟事务ID加锁。 object 加对象锁。 userlock 加用户锁。 advisory 加advisory锁。 filenode 对文件名加锁。 subtransactionid 对子事务号加锁。 tuple_uid 对元组头部的uid隐藏字段加锁。 父主题: 系统视图
  • PG_THREAD_WAIT_STATUS 通过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 当前线程的线程号。 sessionid bigint 当前会话ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。 locktag text 当前线程正等待获取的锁的信息。 lockmode text 当前线程正等待获取的锁的模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 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完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 quota即流控大小,表示网络通道可接收的数据大小。 wait quota具体表示发送端(数据生产者)等待接收端(数据消费者)发送当前连接的quota信息。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 wait stream nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 NestLoop 当前是NestLoop算子。 wait memory 等待内存获取。 wait sync consumer next step Stream算子等待消费者执行。 wait sync producer next step Stream算子等待生产者执行。 vacuum gpi vacuum或者autovacuum流程中global partition index清理。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 prune table 等待堆表清理历史删除数据。 prune index 等待索引清理历史删除数据。 wait reserve td 等待分配ustore事务槽。 wait td rollback 等待ustore事务槽回滚。 wait available td 等待ustore可用的事务槽。 wait transaction rollback 等待事务回滚。 wait sync bgworkers 等待并行创建索引的子线程完成本地扫描和排序。 security audit write pipe 等待将审计日志写入管道。 当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 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 用于保护存放数据库节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 Async Ctl 用于保护Async buffer。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 WorkloadStatHashLock 用于避免并发访问或者修改包含数据库主节点的SQL请求构成的哈希表。 WorkloadIoStatHashLock 用于避免并发访问或者修改用于统计当前数据库节点的IO信息的哈希表。 WorkloadCGroupHashLock 用于避免并发访问或者修改Cgroup信息构成的哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 WorkloadRecordLock 用于避免并发访问或修改在内存自适应管理时对数据库主节点收到请求构成的哈希表。 WorkloadIOUtilLock 用于保护记录iostat,CPU等负载信息的结构。 WorkloadNodeGroupLock 用于避免并发访问或者修改内存中的nodegroup信息构成的哈希表。 JobShmemLock 用于定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GAUSSHOME。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 dummyServerInfoCacheLock 用于保护缓存加速数据库连接信息的全局哈希表。 RPNumberLock 用于加速 GaussDB 的数据库节点对正在执行计划的任务线程的计数。 CBMParseXlogLock Cbm解析xlog时的保护锁 RelfilenodeReuseLock 避免错误地取消已重用的列属性文件的链接。 RcvWriteLock 防止并发调用WalDataRcvWrite。 PercentileLock 用于保护全局PercentileBuffer CSNBufMappingLock 保护csn页面 UniqueSQLMappingLock 用于保护uniquesql hash table DelayDDLLock 防止并发ddl。 CLOG Ctl 用于避免并发访问或者修改Clog控制数据结构 Async Ctl 保护Async buffer MultiXactOffset Ctl 保护MultiXact offet的slru buffer MultiXactMember Ctl 保护MultiXact member的slrubuffer OldSerXid SLRU Ctl 保护old xids的slru buffer ReplicationSlotLock 用于保护ReplicationSlot PGPROCLock 用于保护pgproc MetaCacheLock 用于保护MetaCache DataCacheLock 用于保护datacache InstrUserLock 用于保护InstrUserHTAB。 BadBlockStatHashLock 用于保护global_bad_block_stat hash表。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 AddinShmemInitLock 保护共享内存对象的初始化。 AlterPortLock 保护协调节点更改注册端口号的操作。 FdwPartitionCaheLock HDFS分区表缓冲区的管理锁。 DfsConnectorCacheLock DFSConnector缓冲区的管理锁。 DfsSpaceCacheLock HDFS表空间管理缓冲区的管理锁。 FullBuildXlogCopyStartPtrLock 用于保护全量Build中Xlog拷贝的操作。 DfsUserLoginLock 用于HDFS用户登录以及认证。 LogicalReplicationSlotPersistentDataLock 用于保护逻辑复制过程中复制槽位的数据。 PgfdwLock 用于管理实例向Foreign server建立连接。 InstanceTimeLock 用于获取实例中会话的时间信息。 XlogRemoveSegLock 保护Xlog段文件的回收操作。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 CsnMinLock 用于计算CSNmin。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 CLogBufMappingLock 用于提交日志缓存管理。 GPCMappingLock 用于全局Plan Cache缓存管理。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。 BufferIOLock 保护共享缓冲区页面的IO操作。 BufferContentLock 保护共享缓冲区页面内容的读取、修改。 CSNLOG Ctl 用于CSN日志管理。 DoubleWriteLock 用于双写的管理操作。 RowPageReplicationLock 用于管理行存储的数据页复制。 MatviewSeqnoLock 用于物化视图缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 extension 其他轻量锁。 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 StartBlockMappingLock 用于globalstat从pgstat获取startblockarray等信息 PldebugLock 用于存储过程调试并发维护操作 DataFileIdCacheLock 管理共享内存中存储数据文件描述符的哈希表的并发访存。 GTMHostInfoLock 保护共享GTM主机信息的并发访存。 TwoPhaseStatePartLock 保护(各个分区)两阶段事务状态信息。 WALBufMappingLock 保护共享内中各个wal缓存页面与lsn偏移的映射关系。 UndoZoneLock 保护undozone的并发访存。 RollbackReqHashLock 管理共享内存中存储回滚请求信息的哈希表的并发访存。 UHeapStatLock 保护ustore统计信息的并发访存。 WALWritePaxosLock 保护向paxos复制组件写wal日志的并发顺序。 SyncPaxosLock 保护paxos同步队列的并发访存。 BackgroundWorkerLock 保护background worker的并发顺序。 HadrSwitchoverLock 保护容灾切换的并发顺序。 HashUidLock 保护uid分配的并发顺序。 ParallelDecodeLock 保护并行解码的并发顺序。 XLogMaxCSNLock 保护容灾模式下本地最大可恢复CSN信息。 DisasterCacheLock 保护共享内存中容灾信息缓存的并发访存。 MaxCSNArrayLock 保护共享内存中各个分片备机CSN恢复进度信息。 RepairBadBlockStatHashLock 保护共享内存中损坏页面哈希表的并发访存。 HypoIndexLock 虚拟索引创建、删除、重置等动作中使用的轻量级锁。 XGBoostLibLock DB4AI特性调用xgboost库时启用的锁。 DropArchiveSlotLock 保护删除归档槽信息的并发顺序 ProcXactMappingLock 保护事务号到线程信息映射哈希表的并发访存。 UndoPerZoneLock 保护每个undozone内信息的并发访存。 UndoSpaceLock 保护undospace的并发访存。 SnapshotBlockLock 控制快照备份与页面刷盘的并发顺序。 DWSingleFlushFirstLock 控制页式单页面双写文件的并发顺序。 RestartPointQueueLock 控制备机restart Point数组的并发访存。 UnlinkRelHashTblLock 保护共享内存中待删除文件哈希表的并发访存。 UnlinkRelForkHashTblLock 保护共享内存中待删除文件fork哈希表的并发访存。 WALFlushWait 保护日志刷盘的并发顺序。 WALConsensusWait 保护日志达成一致才进行事务提交或日志回放操作。 WALBufferInitWait 保护wal共享内存页面的初始化和刷盘顺序。 WALInitSegment 保护wal日志段文件的初始化顺序。 PgwrSyncQueueLock 保护待刷盘文件队列的并发访存。 BarrierHashTblLock 保护共享内存中barrier列表信息的并发访存。 PageRepairHashTblLock 保护页面修复哈希表的并发访存。 FileRepairHashTblLock 保护文件修复哈希表的并发访存。 InstrUserLockId 对保护用户登入登出哈希表并发修改加锁。 GsStackLock 控制gs_tack函数不会被并发调用。 InstrStmtTrackCtlLock 在动态开启全量SQL时,保护哈希表的并发访存。 CaptureViewFileHashLock 开启性能视图采集时,保护哈希表的并发访存。 UniqueSqlEvictLock 开启Unique SQL回收时,保护哈希表的并发访存。 gtt_shared_ctl 用于保护全局临时表共享哈希表并发读写。 AuditIndexFileLock 控制审计日志index文件的并发读写。 TDEKeyCacheLock 控制透明加密数据密钥缓存的并发读写。 LWTRANCHE_ACCOUNT_TABLE 控制账户锁定状态hash表的并发读写。 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。 表4 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文件。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DoubleWriteFileRead 双写 文件读取。 DoubleWriteFileSync 双写 文件强制刷盘。 DoubleWriteFileWrite 双写 文件写入。 PredoProcessPending 并行日志回放中当前记录回放等待其它记录回放完成。 PredoApply 并行日志回放中等待当前工作线程等待其他线程回放至本线程LSN。 DisableConnectFileRead HA锁分片逻辑文件读取。 DisableConnectFileSync HA锁分片逻辑文件强制刷盘。 DisableConnectFileWrite HA锁分片逻辑文件写入。 BufHashTableSearch 共享缓冲区hash表搜索(可能会触发页面淘汰)。 buffer_strategy_get 策略化缓冲区页面获取(可能会触发页面淘汰)。 UndoFileExtend undo文件扩展。 UndoFilePrefetch undo文件预取。 UndoFileRead undo文件读取。 UndoFileWrite undo文件写。 UndoFileSync undo文件刷盘。 UndoFileUnlink undo文件删除。 UndoMetaSync undo元数据文件刷盘。 DWSingleFlushGetPos 单页面双写文件查找可用位置。 DWSingleFlushWrite 单页面双写文件刷盘。 MPFL_INIT 初始化max_page_flush_lsn。 MPFL_READ 读取max_page_flush_lsn。 MPFL_WRITE 写max_page_flush_lsn。 OBSList 遍历OBS目录。 OBSRead 读取OBS对象。 OBSWrite 写入OBS对象。 LOGCTRL_SLEEP 等待备机回放追赶。 ShareStorageWalRead 共享盘读取日志文件。 ShareStorageWalWrite 共享盘写入日志文件。 ShareStorageCtlInfoRead 共享盘读取控制信息。 ShareStorageCtlInfoWrite 共享盘写入控制信息。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务ID加锁。 virtualxid 对虚拟事务ID加锁。 object 加对象锁。 userlock 加用户锁。 advisory 加advisory锁。 filenode 对文件名加锁,控制文件级操作的并发顺序。 subtransactionid 对子事务号加锁。 tuple_uid 对元组uid隐藏字段加锁。 父主题: 系统视图
  • PG_THREAD_WAIT_STATUS 通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 PG_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 当前节点的名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint 当前会话ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。 locktag text 当前线程正等待获取的锁的信息。 lockmode text 当前线程正等待获取的锁的模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 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完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 wait stream nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 NestLoop 当前是NestLoop算子。 wait memory 等待内存获取。 wait sync consumer next step Stream算子等待消费者执行。 wait sync producer next step Stream算子等待生产者执行。 vacuum gpi vacuum或者autovacuum流程中global partition index清理。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 prune table 等待堆表清理历史删除数据。 prune index 等待索引清理历史删除数据。 wait reserve td 等待分配ustore事务槽。 wait td rollback 等待ustore事务槽回滚。 wait available td 等待ustore可用的事务槽。 wait transaction rollback 等待事务回滚。 wait sync bgworkers 等待并行创建索引的子线程完成本地扫描和排序。 wait io control 等待作业执行,正在I/O管控中。 wait gs_sleep 等待服务器线程延迟时间。 wait vacuum delay 等待vacuum延迟时间。 wait seq scan seq scan执行时间。 wait index scan index scan执行时间。 wait checkpoint start checkpoint开始阶段时间。 wait checkpoint done checkpoint结束阶段时间。 wait xact start command xact开始时间。 wait xact commit command xact提交时间。 wait for autoextend partition 等待分区表自动扩展创建分区。 Accept client conn - Total Time GaussDB数据库 接受客户端的连接请求时,从建立连接开始到连接成功过程的整体耗时。 Accept client conn - ThrdPool - add epoll GaussDB数据库接受客户端的连接请求时,线程池模式下,从建立连接开始,到线程池将session的句柄加入到epoll的耗时。 Accept client conn - ThrdPool - wait worker GaussDB数据库接受客户端的连接请求时,线程池模式下,从线程池将session的句柄加入到epoll开始,到线程池中工作线程开始工作的耗时。 Accept client conn - ThrdPool - init session GaussDB数据库接受客户端的连接请求时,线程池模式下,从线程池中工作线程开始工作,到session初始化结束的耗时。 Accept client conn - Worker - init proc GaussDB数据库接受客户端的连接请求时,非线程池模式下,从建立连接开始,到线程初始化结束的耗时。 Accept client conn - Worker - init session GaussDB数据库接受客户端的连接请求时,非线程池模式下,从线程初始化结束,到session初始化结束的耗时。 security audit write pipe 等待将审计日志写入管道。 当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 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 用于保护存放数据库节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 Async Ctl 用于保护Async buffer。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 WorkloadStatHashLock 用于避免并发访问或者修改包含数据库主节点的SQL请求构成的哈希表。 WorkloadIoStatHashLock 用于避免并发访问或者修改用于统计当前数据库节点的IO信息的哈希表。 WorkloadCGroupHashLock 用于避免并发访问或者修改Cgroup信息构成的哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 WorkloadUserInfoLock 用于避免并发访问或修改负载管理的用户信息哈希表。 WorkloadRecordLock 用于避免并发访问或修改在内存自适应管理时对数据库主节点收到请求构成的哈希表。 WorkloadIOUtilLock 用于保护记录iostat,CPU等负载信息的结构。 WorkloadNodeGroupLock 用于避免并发访问或者修改内存中的nodegroup信息构成的哈希表。 JobShmemLock 用于定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GAUSSHOME。 LLVMDumpIRLock 用于导出动态生成函数所对应的汇编语言。 LLVMParseIRLock 用于在查询开始处从IR文件中编译并解析已写好的IR函数。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 dummyServerInfoCacheLock 用于保护缓存加速数据库连接信息的全局哈希表。 RPNumberLock 用于加速GaussDB的数据库节点对正在执行计划的任务线程的计数。 CBMParseXlogLock Cbm解析xlog时的保护锁 RelfilenodeReuseLock 避免错误地取消已重用的列属性文件的链接。 RcvWriteLock 防止并发调用WalDataRcvWrite。 PercentileLock 用于保护全局PercentileBuffer CSNBufMappingLock 保护csn页面 UniqueSQLMappingLock 用于保护uniquesql hash table DelayDDLLock 防止并发ddl。 CLOG Ctl 用于避免并发访问或者修改Clog控制数据结构 Async Ctl 保护Async buffer MultiXactOffset Ctl 保护MultiXact offset的slru buffer MultiXactMember Ctl 保护MultiXact member的slrubuffer OldSerXid SLRU Ctl 保护old xids的slru buffer ReplicationSlotLock 用于保护ReplicationSlot PGPROCLock 用于保护pgproc MetaCacheLock 用于保护MetaCache DataCacheLock 用于保护datacache InstrUserLock 用于保护InstrUserHTAB。 BadBlockStatHashLock 用于保护global_bad_block_stat hash表。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 AddinShmemInitLock 保护共享内存对象的初始化。 AlterPortLock 保护协调节点更改注册端口号的操作。 FdwPartitionCaheLock HDFS分区表缓冲区的管理锁。 DfsConnectorCacheLock DFSConnector缓冲区的管理锁。 DfsSpaceCacheLock HDFS表空间管理缓冲区的管理锁。 FullBuildXlogCopyStartPtrLock 用于保护全量Build中Xlog复制的操作。 DfsUserLoginLock 用于HDFS用户登录以及认证。 LogicalReplicationSlotPersistentDataLock 用于保护逻辑复制过程中复制槽位的数据。 PgfdwLock 用于管理实例向Foreign server建立连接。 InstanceTimeLock 用于获取实例中会话的时间信息。 XlogRemoveSegLock 保护Xlog段文件的回收操作。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 CsnMinLock 用于计算CSNmin。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 CLogBufMappingLock 用于提交日志缓存管理。 GPCMappingLock 用于全局Plan Cache缓存管理。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。 BufferIOLock 保护共享缓冲区页面的IO操作。 BufferContentLock 保护共享缓冲区页面内容的读取、修改。 CSNLOG Ctl 用于CSN日志管理。 DoubleWriteLock 用于双写的管理操作。 RowPageReplicationLock 用于管理行存储的数据页复制。 MatviewSeqnoLock 用于物化视图缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 extension 其他轻量锁。 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 StartBlockMappingLock 用于globalstat从pgstat获取startblockarray等信息 PldebugLock 用于存储过程调试并发维护操作 DataFileIdCacheLock 管理共享内存中存储数据文件描述符的哈希表的并发访存。 GTMHostInfoLock 保护共享GTM主机信息的并发访存。 TwoPhaseStatePartLock 保护(各个分区)两阶段事务状态信息。 WALBufMappingLock 保护共享内中各个wal缓存页面与lsn偏移的映射关系。 UndoZoneLock 保护undozone的并发访存。 RollbackReqHashLock 管理共享内存中存储回滚请求信息的哈希表的并发访存。 UHeapStatLock 保护ustore统计信息的并发访存。 WALWritePaxosLock 保护向paxos复制组件写wal日志的并发顺序。 SyncPaxosLock 保护paxos同步队列的并发访存。 BackgroundWorkerLock 保护background worker的并发顺序。 HadrSwitchoverLock 保护容灾切换的并发顺序。 HashUidLock 保护uid分配的并发顺序。 ParallelDecodeLock 保护并行解码的并发顺序。 XLogMaxCSNLock 保护容灾模式下本地最大可恢复CSN信息。 DisasterCacheLock 保护共享内存中容灾信息缓存的并发访存。 MaxCSNArrayLock 保护共享内存中各个分片备机CSN恢复进度信息。 RepairBadBlockStatHashLock 保护共享内存中损坏页面哈希表的并发访存。 HypoIndexLock 虚拟索引创建、删除、重置等动作中使用的轻量级锁。 XGBoostLibLock DB4AI特性调用xgboost库时启用的锁。 DropArchiveSlotLock 保护删除归档槽信息的并发顺序 ProcXactMappingLock 保护事务号到线程信息映射哈希表的并发访存。 UndoPerZoneLock 保护每个undozone内信息的并发访存。 UndoSpaceLock 保护undospace的并发访存。 SnapshotBlockLock 控制快照备份与页面刷盘的并发顺序。 DWSingleFlushFirstLock 控制非段页式单页面双写文件的并发顺序。 DWSingleFlushSecondLock 控制段页式单页面双写文件的并发顺序。 DWSingleFlushSecondBufTagLock 控制段页式单页面双写文件的元信息并发访存。 RestartPointQueueLock 控制备机restart Point数组的并发访存。 UnlinkRelHashTblLock 保护共享内存中待删除文件哈希表的并发访存。 UnlinkRelForkHashTblLock 保护共享内存中待删除文件fork哈希表的并发访存。 WALFlushWait 保护日志刷盘的并发顺序。 WALConsensusWait 保护日志达成一致才进行事务提交或日志回放操作。 WALBufferInitWait 保护wal共享内存页面的初始化和刷盘顺序。 WALInitSegment 保护wal日志段文件的初始化顺序。 SegmentHeadPartitionLock 保护段页式segment头部元信息的分区锁。 PgwrSyncQueueLock 保护待刷盘文件队列的并发访存。 BarrierHashTblLock 保护共享内存中barrier列表信息的并发访存。 PageRepairHashTblLock 保护页面修复哈希表的并发访存。 FileRepairHashTblLock 保护文件修复哈希表的并发访存。 InstrUserLockId 对保护用户登录登出哈希表并发修改加锁。 GsStackLock 控制gs_tack函数不会被并发调用。 InstrStmtTrackCtlLock 在动态开启全量SQL时,保护哈希表的并发访存。 CaptureViewFileHashLock 开启性能视图采集时,保护哈希表的并发访存。 UniqueSqlEvictLock 开启Unique SQL回收时,保护哈希表的并发访存。 gtt_shared_ctl 用于保护全局临时表共享哈希表并发读写。 AuditIndexFileLock 控制审计日志index文件的并发读写。 LWTRANCHE_ACCOUNT_TABLE 控制账户锁定状态hash表的并发读写。 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。 表4 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文件。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DoubleWriteFileRead 双写 文件读取。 DoubleWriteFileSync 双写 文件强制刷盘。 DoubleWriteFileWrite 双写 文件写入。 PredoProcessPending 并行日志回放中当前记录回放等待其它记录回放完成。 PredoApply 并行日志回放中等待当前工作线程等待其他线程回放至本线程LSN。 DisableConnectFileRead HA锁分片逻辑文件读取。 DisableConnectFileSync HA锁分片逻辑文件强制刷盘。 DisableConnectFileWrite HA锁分片逻辑文件写入。 BufHashTableSearch 共享缓冲区hash表搜索(可能会触发页面淘汰)。 buffer_strategy_get 策略化缓冲区页面获取(可能会触发页面淘汰)。 UndoFileExtend undo文件扩展。 UndoFilePrefetch undo文件预取。 UndoFileRead undo文件读取。 UndoFileWrite undo文件写。 UndoFileSync undo文件刷盘。 UndoFileUnlink undo文件删除。 UndoMetaSync undo元数据文件刷盘。 DWSingleFlushGetPos 单页面双写文件查找可用位置。 DWSingleFlushWrite 单页面双写文件刷盘。 CkptWaitPageWriterFlush 执行全量checkpoint时等待刷页。 CkptWaitPageWriterSync checkpoint打点前等待有修改的文件同步进磁盘。 CkptWaitCommitTransactionFinish checkpoint打点前等待所有已经提交的事务提交完毕。 MPFL_INIT 初始化max_page_flush_lsn。 MPFL_READ 读取max_page_flush_lsn。 MPFL_WRITE 写max_page_flush_lsn。 OBSList 遍历OBS目录。 OBSRead 读取OBS对象。 OBSWrite 写入OBS对象。 LOGCTRL_SLEEP 等待备机回放追赶。 ShareStorageWalRead 共享盘读取日志文件。 ShareStorageWalWrite 共享盘写入日志文件。 ShareStorageCtlInfoRead 共享盘读取控制信息。 ShareStorageCtlInfoWrite 共享盘写入控制信息。 SegFileExtend 段页式文件扩展。 SegReadDisk 段页式文件读取。 SegWriteDisk 段页式文件写入。 SegSync 段页式文件刷盘。 SegFileShrink 段页式文件收缩。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务ID加锁。 virtualxid 对虚拟事务ID加锁。 object 加对象锁。 userlock 加用户锁。 advisory 加advisory锁。 filenode 对文件名加锁,控制文件级操作的并发顺序。 subtransactionid 对子事务号加锁。 tuple_uid 对元组uid隐藏字段加锁。 父主题: 其他系统视图
  • ALL_CONSTRAINTS ALL_CONSTRAINTS视图存储当前用户可访问的约束的信息。 表1 ALL_CONSTRAINTS字段 名称 类型 描述 constraint_name vcharacter varying(64) 约束名。 constraint_type text 约束类型。 c表示检查约束。 f表示外键约束。 p表示主键约束。 u表示唯一约束。 table_name character varying(64) 约束相关的表名。 index_owner character varying(64) 约束相关的索引的所有者(只针对唯一约束和主键约束)。 index_name character varying(64) 约束相关的索引名(只针对唯一约束和主键约束)。 父主题: 系统视图
  • 系统表和系统视图概述 系统表是GaussDB(DWS)存放结构元数据,是GaussDB(DWS)数据库系统运行控制信息的来源,也是数据库系统的核心组成部分。系统表包含集群安装信息以及GaussDB(DWS)上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。 系统视图提供了查询系统表和访问数据库内部状态的方法。当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图来解决这个问题。视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。 三权分立下,非管理员无权查看系统表和视图。非三权分立下,系统表和系统视图要么只对管理员可见,要么对所有用户可见。下面的系统表和视图有些标识了需要管理员权限,这些系统表和视图只有管理员可以查询。 禁止对系统表或系统视图进行增删改等操作,手动对系统表或系统视图的修改或破坏可能会导致系统信息不一致,造成系统控制异常甚至出现集群不可用的情况。 系统表不支持toast,无法跨页存储,一个页面大小为8K,系统表各个字段长度需小于8K。 父主题: GaussDB(DWS)系统表和系统视图
  • MY_TAB_COLUMNS MY_TAB_COLUMNS视图显示当前用户拥有的表和视图的字段信息。该视图同时存在于PG_CATALOG和SYS Schema下。该视图所有用户可访问,仅显示该用户所属的信息。 表1 MY_TAB_COLUMNS字段 名称 类型 描述 owner character varying(64) 表的所有者。 table_name character varying(64) 表名称。 column_name character varying(64) 列名。 data_type character varying(128) 列的数据类型。 data_type_mod character varying(3) 暂不支持,值为NULL。 data_type_owner character varying(128) 列的数据类型的所有者。 data_length integer 列的字节长度。 data_precision integer 数据类型的精度,对于numeric数据类型有效,其他类型为NULL。 data_scale integer 小数点右边的位数,对于numeric数据类型有效,其他类型为0。 nullable bpchar 该列是否允许为空,对于主键约束和非空约束,该值为n。取值范围: y:允许。 n:不允许。 column_id integer 创建表时列的序号。 default_length numeric 列的默认值字节长度。 data_default text 列的默认值。 num_distinct numeric 列中不同值的数量。 low_value raw 列中的最小值。 high_value raw 列中的最大值。 density numeric 列密度。 num_nulls numeric 列中空值数。 num_buckets numeric 列的直方图的桶数。 last_analyzed timestamp(0) without time zone 上次分析的日期。 sample_size numeric 用于分析此列的样本量。 character_set_name character varying(44) 暂不支持,值为NULL。 char_col_decl_length numeric 字符类型列的声明长度。 global_stats character varying(3) 暂不支持,值为NO。 user_stats character varying(3) 暂不支持,值为NO。 avg_col_len numeric 列的平均长度(单位字节)。 char_length numeric 列的长度(单位字符),只对varchar,nvarchar2,bpchar,char类型有效。 char_used character varying(1) 暂不支持,varchar,bpchar,char类型值为B,nvarchar2类型置C,其余值为NULL。 v80_fmt_image character varying(3) 暂不支持,值为NULL。 data_upgraded character varying(3) 暂不支持,值为YES。 histogram character varying(15) 表示直方图是否存在,如果存在的话是什么类型: NONE:表示不存在直方图。 FREQUENCY:表示频率直方图。 EQUI_W IDT H:表示等宽直方图。 default_on_null character varying(3) 暂不支持,值为NULL。 identity_column character varying(3) 暂不支持,值为NULL。 sensitive_column character varying(3) 暂不支持,值为NULL。 evaluation_edition character varying(128) 暂不支持,值为NULL。 unusable_before character varying(128) 暂不支持,值为NULL。 unusable_beginning character varying(128) 暂不支持,值为NULL。 collation character varying(100) 列的排序规则。因该字段与保留关键字冲突,调用该字段需加视图名。 comments text 列的注释。 schema character varying(64) 列所属的名称空间的名称。 父主题: 其他系统视图
  • ALL_CONSTRAINTS ALL_CONSTRAINTS视图存储当前用户可访问的约束的信息。 表1 ALL_CONSTRAINTS字段 名称 类型 描述 constraint_name vcharacter varying(64) 约束名。 constraint_type text 约束类型。 c表示检查约束。 f表示外键约束。 p表示主键约束。 u表示唯一约束。 table_name character varying(64) 约束相关的表名。 index_owner character varying(64) 约束相关的索引的所有者(只针对唯一约束和主键约束)。 index_name character varying(64) 约束相关的索引名(只针对唯一约束和主键约束)。 父主题: 系统视图
  • 系统表和系统视图概述 系统表是GaussDB(DWS)存放结构元数据,是GaussDB(DWS)数据库系统运行控制信息的来源,也是数据库系统的核心组成部分。系统表包含集群安装信息以及GaussDB(DWS)上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。 系统视图提供了查询系统表和访问数据库内部状态的方法。当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图来解决这个问题。视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。 三权分立下,非管理员无权查看系统表和视图。非三权分立下,系统表和系统视图要么只对管理员可见,要么对所有用户可见。下面的系统表和视图有些标识了需要管理员权限,这些系统表和视图只有管理员可以查询。 禁止对系统表或系统视图进行增删改等操作,手动对系统表或系统视图的修改或破坏可能会导致系统信息不一致,造成系统控制异常甚至出现集群不可用的情况。 系统表不支持toast,无法跨页存储,一个页面大小为8K,系统表各个字段长度需小于8K。 父主题: GaussDB(DWS)系统表和系统视图
  • PG_STAT_ACTIVITY PG_STAT_ACTIVITY视图显示和当前用户查询相关的信息,字段保存的是上一次执行的信息。 表1 PG_STAT_ACTIVITY字段 名称 类型 描述 datid oid 用户会话在后台连接到的数据库OID。 datname name 用户会话在后台连接到的数据库名称。 pid bigint 后台线程ID。 sessionid bigint 会话ID。 usesysid oid 登录该后台的用户OID。 usename name 登录该后台的用户名。 application_name text 连接到该后台的应用名。 client_addr inet 连接到该后台的客户端的IP地址。 如果该字段取值是null,表明是通过服务器机器上UNIX套接字连接客户端或者这是内部线程,如autovacuum。 client_hostname text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 client_port integer 客户端用于与后台通讯的TCP端口号,如果使用UNIX套接字,则为-1。 backend_start timestamp with time zone 该会话开始的时间,即客户端连接服务器的时间。 xact_start timestamp with time zone 当前活跃事务开始的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。 query_start timestamp with time zone 当前活跃查询开始的时间,如果state的值不是active,则这个值是上一个查询的开始时间。如果是存储过程、函数、PACKAGE,则显示的是第一个查询时间,不会随着存储过程内语句运行而改变。 state_change timestamp with time zone 上次状态改变的时间。 waiting boolean 如果后台当前正等待锁则为true。否则为false。 enqueue text 语句当前排队状态。可能值是: waiting in queue:表示语句在排队中。 空:表示语句正在运行。 state text 该后台当前总体状态。可能值是: active:后台正在执行一个查询。 idle:后台正在等待一个新的客户端命令。 idle in transaction:后台在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 fastpath function call:后台正在执行一个fast-path函数。 disabled:如果后台禁用track_activities,则报告这个状态。 说明: 普通用户只能查看到自己账户所对应的会话状态。即其他账户的state信息为空。例如以judy用户连接数据库后,在pg_stat_activity中查看到的普通用户joe及初始用户omm的state信息为空: SELECT datname, usename, usesysid, state,pid FROM pg_stat_activity; datname | usename | usesysid | state | pid ----------+---------+----------+--------+----------------- testdb | omm | 10 | | 139968752121616 testdb | omm | 10 | | 139968903116560 db_tpcds | judy | 16398 | active | 139968391403280 testdb | omm | 10 | | 139968643069712 testdb | omm | 10 | | 139968680818448 testdb | joe | 16390 | | 139968563377936 (6 rows) resource_pool name 用户使用的资源池。 query_id bigint 查询语句的ID。 query text 该后台的最新查询。如果state状态是active(活跃的),此字段显示当前正在执行的查询。所有其他情况表示上一个查询。 connection_info text json格式字符串,记录当前连接数据库的驱动类型、驱动版本号、当前驱动的部署路径、进程属主用户等信息。 global_sessionid text 全局的会话ID。 unique_sql_id bigint 语句的unique sql id。 trace_id text 驱动传入的trace id,与应用的一次请求相关联。 父主题: 系统视图
  • 系统表和系统视图概述 系统表是GaussDB(DWS)存放结构元数据,是GaussDB(DWS)数据库系统运行控制信息的来源,也是数据库系统的核心组成部分。系统表包含集群安装信息以及GaussDB(DWS)上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。 系统视图提供了查询系统表和访问数据库内部状态的方法。当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图来解决这个问题。视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。 三权分立下,非管理员无权查看系统表和视图。非三权分立下,系统表和系统视图要么只对管理员可见,要么对所有用户可见。若标识了需要系统管理员权限的系统表和视图,只有系统管理员可以查询。 禁止对系统表或系统视图进行增删改等操作,手动对系统表或系统视图的修改或破坏可能会导致系统信息不一致,造成系统控制异常甚至出现集群不可用。 系统表不支持toast,无法跨页存储,一个页面大小为8K,系统表各个字段长度需小于8K。 表1 常见系统表举例 系统表名 描述 PG_AM 存储有关索引访问方法的信息。系统支持的每种索引访问方法都有一行。 PG_ATTRIBUTE 存储关于表字段的信息。 PG_AUTHID 存储有关数据库认证标识符(角色)的信息。角色把“用户”的概念包含在内。一个用户实际上就是一个rolcanlogin标志被设置的角色。任何角色(不管rolcanlogin设置与否)都能够把其他角色作为成员。 在一个集群中只有一份pg_authid,不是每个数据库有一份。需要有系统管理员权限才可以访问此系统表。 PG_CONSTRAINT 存储表上的检查约束、主键、唯一约束和外键约束。 PG_CLASS 存储数据库对象信息及其之间的关系。 PG_DATABASE 存储关于可用数据库的信息。 PG_DEPEND 记录数据库对象之间的依赖关系。这些信息允许DROP命令找出哪些其它对象必须由DROP CASCADE删除,或者是在DROP RESTRICT的情况下避免删除。 PG_PARTITION 存储数据库内所有分区表(partitioned table)、分区(table partition)、分区上toast表和分区索引(index partition)四类对象的信息。分区表索引(partitioned index)的信息不在PG_PARTITION系统表中保存。 PG_FOREIGN_TABLE 存储外部表的辅助信息。 PG_INDEX 存储索引的一部分信息,其他的信息大多数在PG_CLASS中。 PG_JOBS 存储用户创建的定时任务的任务详细信息,定时任务线程定时轮询pg_jobs系统表中的时间,当任务到期会触发任务的执行。该系统表属于Shared Relation,所有创建的job记录对所有数据库可见。 PG_LARGEOBJECT 保存那些标记着“大对象”的数据。一个大对象是使用其创建时分配的OID标识的。每个大对象都分解成足够小的小段或者“页面”以便以行的形式存储在PG_LARGEOBJECT里。每页的数据定义为LOBLKSIZE。需要有系统管理员权限才可以访问此系统表。 PG_NAMESPACE 存储命名空间,即存储schema相关的信息。 PG_PROC 存储函数或过程的信息。 表2 常见系统视图举例 系统视图名 描述 GS_CLUSTER_RESOURCE_INFO 显示所有DN资源的汇总信息。 GS_SQL_COUNT 显示数据库当前节点当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)统计信息,包括执行次数和响应时间(除MERGE INTO语句外,统计其他四类语句的最大、最小、平均和总响应时间,单位为微秒),以及DDL、DML、DCL类型语句的执行次数。 PG_LOCKS 存储各打开事务所持有的锁信息。 PG_ROLES 提供访问数据库角色的相关信息。 PG_RULES 提供对查询重写规则的有用信息访问的接口。 PG_TOTAL_USER_RESOURCE_INFO 显示所有用户资源使用情况,需要使用管理员用户进行查询。此视图在参数se_workload_manager为on时才有效。 PG_USER 提供了访问数据库用户的信息。 PG_VIEWS 提供访问数据库中每个视图的有用信息。 PG_STAT_ACTIVITY 显示和当前用户查询相关的信息。若有管理员权限或预置角色权限可以显示和所有用户查询相关的信息。 PG_TABLES 提供了对数据库中每个表访问的有用信息。 PLAN_TABLE 显示用户通过执行EXPLAIN PLAN收集到的计划信息。计划信息的生命周期是session级别,session退出后相应的数据将被清除。同时不同session和不同user间的数据是相互隔离的。 父主题: GaussDB(DWS)系统表和系统视图
  • ALL_CONSTRAINTS ALL_CONSTRAINTS视图存储当前用户可访问的约束的信息。 表1 ALL_CONSTRAINTS字段 名称 类型 描述 constraint_name vcharacter varying(64) 约束名。 constraint_type text 约束类型。 c表示检查约束。 f表示外键约束。 p表示主键约束。 u表示唯一约束。 table_name character varying(64) 约束相关的表名。 index_owner character varying(64) 约束相关的索引的所有者(只针对唯一约束和主键约束)。 index_name character varying(64) 约束相关的索引名(只针对唯一约束和主键约束)。 父主题: 系统视图
  • PG_AVAILABLE_EXTENSIONS PG_AVAILABLE_EXTENSIONS视图显示数据库中某些特性的扩展信息。该视图为内部使用,不建议用户使用。 表1 PG_AVAILABLE_EXTENSIONS字段 名称 类型 描述 name name 扩展名。 default_version text 缺省版本的名称,如果没有指定则为NULL。 installed_version text 扩展当前安装版本,如果没有安装任何版本则为NULL。 comment text 扩展的控制文件中的评论。 父主题: 其他系统视图
  • ADM_CONS_COLUMNS ADM_CONS_COLUMNS视图显示数据库表中约束的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_CONS_COLUMNS字段 名称 类型 描述 owner character varying(64) 约束的创建者。 constraint_name character varying(64) 约束名。 table_name character varying(64) 约束相关的表名。 column_name character varying(64) 约束相关的列名。 position smallint 表中列的位置。 父主题: 其他系统视图