欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

28.2 统计收集员

最编程 2024-03-05 17:53:11
...

28.2.2. 查看统计信息

表 28.1中列出了一些预定义视图 可以用来显示系统的当前状态。 表 28.2中列出了另一些视图可以 显示统计收集的结果。你也可以使用底层统计函数(在 第 28.2.3 节中讨论)来建立自定义的视图。

在使用统计信息监控收集到的数据时,你必须了解这些信息并非是实时更新的。每个独立的服务器进程只在进入闲置状态之前才向收集器传送新的统计计数;因此正在进行的查询或事务并不影响显示出来的总数。同样,收集器本身也最多每PGSTAT_STAT_INTERVAL毫秒(缺省为 500ms,除非在编译服务器的时候修改过)发送一 次新的报告。因此显示的信息总是落后于实际活动。但是由track_activities收集的当前查询信息总是最新的。

另一个重点是当一个服务器进程被要求显示任何这些统计信息时,它首先取得收集器进程最近发出的报告并且接着为所有统计视图和函数使用这个快照,直到它的当前事务的结尾。因此只要你继续当前事务,统计数据将会一直显示静态信息。相似地,当任何关于所有会话的当前查询的信息在一个事务中第一次被请求时,这样的信息将被收集。并且在整个事务期间将显示相同的信息。这是一种特性而非缺陷,因为它允许你在该统计信息上执行多个查询并且关联结果而不用担心那些数字会在你不知情的情况下改变。但是如果你希望用每个查询都看到新结果,要确保在任何事务块之外做那些查询。或者,你可以调用pg_stat_clear_snapshot(),那将丢弃当前事务的统计快照(如果有)。下一次对统计性信息的使用将导致获取一个新的快照。

一个事务也可以在视图pg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_stat_xact_user_functions中看到它自己的统计信息(还没有被传送给收集器)。这些数字并不像上面所述的那样行动,相反它们在事务期间持续被更新。

表 28.1. 动态统计视图

视图名称 描述
pg_stat_activity 每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。详见pg_stat_activity
pg_stat_replication 每一个 WAL 发送进程一行,显示有关到该发送进程 连接的后备服务器的复制的统计信息。详见 pg_stat_replication
pg_stat_wal_receiver 只有一行,显示来自 WAL 接收器所连接服务器的有关该接收器的统计信息。详见pg_stat_wal_receiver
pg_stat_subscription 每个订阅至少一行,显示订阅工作者的相关信息。详细信息,请参阅 pg_stat_subscription
pg_stat_ssl 每个连接(常规连接和复制连接)一行, 显示有关在此连接上使用的 SSL 的信息。 详见pg_stat_ssl
pg_stat_progress_vacuum 每个运行VACUUM的后端(包括 autovacuum 工作者进程)一行, 显示当前的进度。参阅第 28.4.1 节

表 28.2. 已收集统计信息的视图

视图名称 描述
pg_stat_archiver 只有一行,显示有关 WAL 归档进程活动的统计信息。详见pg_stat_archiver
pg_stat_bgwriter 只有一行,显示有关后台写进程的活动的统计信息。详见pg_stat_bgwriter
pg_stat_database 每个数据库一行,显示数据库范围的统计信息。详见pg_stat_database
pg_stat_database_conflicts 每个数据库一行,显示数据库范围的统计信息, 这些信息的内容是关于由于与后备服务器的恢复过程 发生冲突而被取消的查询。详见 pg_stat_database_conflicts
pg_stat_all_tables 当前数据库中每个表一行,显示有关访问指定表的统计信息。详见pg_stat_all_tables
pg_stat_sys_tables pg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tables pg_stat_all_tables一样,但只显示用户表。
pg_stat_xact_all_tables pg_stat_all_tables相似,但计数动作只在当前事务内发生(还没有被包括在pg_stat_all_tables和相关视图中)。用于生存和死亡行数量的列以及清理和分析动作在此视图中不出现。
pg_stat_xact_sys_tables pg_stat_xact_all_tables一样,但只显示系统表。
pg_stat_xact_user_tables pg_stat_xact_all_tables一样,但只显示用户表。
pg_stat_all_indexes 当前数据库中的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。详见pg_stat_all_indexes
pg_stat_sys_indexes pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。 当前数据库中的每个表一行,显示有关在指定表上 I/O 的统计信息。详见pg_statio_all_tables
pg_statio_sys_tables pg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tables pg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。 当前数据库中的每个索引一行,显示与指定索引上的 I/O 有关的统计信息。详见pg_statio_all_indexes
pg_statio_sys_indexes pg_statio_all_indexes一样,但只显示系统表上的索引。
pg_statio_user_indexes pg_statio_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_sequences 当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。 当前数据库中的每个序列一行,显示与指定序列上的 I/O 有关的统计信息。详见pg_statio_all_sequences
pg_statio_sys_sequences pg_statio_all_sequences一样,但只显示系统序列(目前没有定义系统序列,因此这个视图总是为空)。
pg_statio_user_sequences pg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。详见pg_stat_user_functions
pg_stat_xact_user_functions pg_stat_user_functions相似,但是只统计在当前事务期间的调用(还没有被包括在pg_stat_user_functions中)。

针对每个索引的统计信息对于判断哪个索引正被使用以及它们的效果特别有用。

pg_statio_系列视图主要用于判断缓冲区的效果。当实际磁盘读取数远小于缓冲区命中时,这个缓冲能满足大部分读请求而无需进行内核调用。但是,这些统计信息并没有给出所有的事情:由于PostgreSQL处理磁盘 I/O 的方式,不在PostgreSQL缓冲区中的数据库仍然驻留在内核的 I/O 缓存中,并且因此可以被再次读取而不需要物理磁盘读取。我们建议希望了解PostgreSQL I/O 行为更多细节的用户将PostgreSQL统计收集器和操作系统中允许观察内核处理 I/O 的工具一起使用。

表 28.3. pg_stat_activity 视图

类型 描述
datid oid 这个后端连接到的数据库的OID
datname name 这个后端连接到的数据库的名称
pid integer 这个后端的进程 ID
usesysid oid 登录到这个后端的用户的 OID
usename name 登录到这个后端的用户的名称
application_name text 连接到这个后端的应用的名称
client_addr inet 连接到这个后端的客户端的 IP 地址。如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)。
client_hostname text 已连接的客户端的主机名,由client_addr的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有log_hostname被启用时才会非空。
client_port integer 客户端用以和这个后端通信的 TCP 端口号,如果使用 Unix 套接字则为-1
backend_start timestamp with time zone 这个进程被启动的时间,对于客户端后端,这是客户端连接到服务器的时间。
xact_start timestamp with time zone 这个进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于query_start
query_start timestamp with time zone 当前活动查询被开始的时间,如果state不是active,这个域为上一个查询被开始的时间
state_change timestamp with time zone state上一次被改变的时间
wait_event_type text 后端正在等待的事件类型,如果不存在则为 NULL。可能的值有:
  • LWLock:后端正在等待一个轻量级锁。 每一个这样的锁保护共享内存中的一个特定数据结构。 wait_event将包含一个名称,标识轻量级锁的用途。 (一些锁具有特定的名称;另一些锁则是一组锁的一部分,每个都有类似的用途。)

  • Lock:后端正在等待一个重量级锁。重量级锁,也称为锁管理器锁或者简单锁,主要保护 SQL 可见的对象,例如表。不过,它们也被用于确保特定内部操作的互斥,例如关系扩展。wait_event将标识等待的锁的类型。

  • BufferPin:服务器进程正在等待访问一个数据缓冲区,而此时没有其他进程正在检查该缓冲区。如果另一个进程持有一个最终从要访问的缓冲区中读取数据的打开的游标,缓冲区 pin 等待可能会被拖延。

  • Activity:服务器进程空闲。这由系统进程在其主要处理循环中等待活动使用。 wait_event将识别特定的等待点。

  • Extension: 服务器进程正在等待扩展模块中的活动。此类别对于跟踪自定义等待点的模块很有用。

  • Client:服务器进程正在等待来自用户应用程序的套接字上的某些活动, 并且服务器期望发生与其内部进程无关的事情。 wait_event将识别特定的等待点。

  • IPC: 服务器进程正在等待来自服务器中另一个进程的某些活动。 wait_event将识别特定的等待点。

  • Timeout: 服务器进程正在等待超时到期。wait_event将识别特定的等待点。

  • IO: 服务器进程正在等待IO完成。wait_event将识别特定的等待点。

wait_event text 如果后端当前正在等待,则是等待事件的名称,否则为 NULL。详见表 28.4
state text 这个后端的当前总体状态。可能的值是:
  • active:后端正在执行一个查询。

  • idle:后端正在等待一个新的客户端命令。

  • idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。

  • idle in transaction (aborted):这个状态与idle in transaction相似,不过在该事务中的一个语句导致了一个错误。

  • fastpath function call:后端正在执行一个 fast-path 函数。

  • disabled:如果在这个后端中track_activities被禁用,则报告这个状态。

backend_xid xid 这个后端的顶层事务标识符(如果存在)。
backend_xmin xid 当前后端的xmin范围。
query text 这个后端最近查询的文本。如果stateactive,这个域显示当前正在执行的查询。在所有其他状态下,它显示上一个被执行的查询。 默认情况下,查询文本被截断为1024个字符;可以通过参数 track_activity_query_size更改此值。
backend_type text 当前后端的类型。可能的类型有 autovacuum launcherautovacuum workerbackground workerbackground writerclient backendcheckpointerstartupwalreceiverwalsenderwalwriter

pg_stat_activity视图将为每一个服务器进程有一行,显示与该进程的当前活动相关的信息。

注意

wait_eventstate列是独立的。如果一个后端处于active状态,它可能是也可能不是某个事件上的waiting。如果状态是active并且wait_event为非空,它意味着一个查询正在被执行,但是它被阻塞在系统中某处。

表 28.4. wait_event 描述

等待事件类型 等待事件名称 描述
LWLock 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 正等待更新postgresql.auto.conf文件。
ReplicationSlotAllocationLock 正等待分配或者释放一个复制槽。
ReplicationSlotControlLock 正等待读取或者更新复制槽状态。
CommitTsControlLock 正等待读取或者更新事务提交时间戳。
CommitTsLock 正等待读取或者更新事务时间戳的最新设置值。
ReplicationOriginLock 正等待设置、删除或者使用复制源头。
MultiXactTruncationLock 正等待读取或者阶段多事务信息。
OldSnapshotTimeMapLock 正等待读取或者更新旧的快照控制信息。
BackendRandomLock 等待生成一个随机数。
LogicalRepWorkerLock 等待逻辑复制工作者完成操作。
CLogTruncationLock 等待截断预写日志或等待预写日志截断完成。
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 正等待增加或者检查谓词锁信息。
parallel_query_dsa 等待并行查询动态共享内存分配锁定。
tbm 等待TBM共享迭代器锁定。
Lock relation 正等待获得一个关系上的锁。
extend 正等待扩展一个关系。
page 正等待获得一个关系上的页面的锁。
tuple 正等待获得一个元组上的锁。
transactionid 正等待一个事务结束。
virtualxid 正等待获得一个虚拟 xid 锁。
speculative token 正等待获取一个 speculative insertion lock。
object 正等待获得一个非关系数据库对象上的锁。
userlock 正等待获得一个用户锁。
advisory 正等待获得一个咨询用户锁。
BufferPin BufferPin 正等待在一个缓冲区上加 pin。
Activity ArchiverMain 在归档进程的主循环中等待。
AutoVacuumMain 在自动清理加载进程的主循环中等待。
BgWriterHibernate 在后台写入进程中等待,蛰伏。
BgWriterMain 在后台写入进程后台工作的主循环中等待。
CheckpointerMain 在检查点进程的主循环中等待。
LogicalLauncherMain 在逻辑启动进程的主循环中等待。
LogicalApplyMain 在逻辑应用程序的主循环中等待。
PgStatMain 在统计收集器进程的主循环中等待。
RecoveryWalAll 在恢复期间从任何类型的源(本地,归档或流)等待WAL。
RecoveryWalStream 在恢复期间从流中等待WAL。
SysLoggerMain 在syslogger进程的主循环中等待。
WalReceiverMain 在WAL接收器进程的主循环中等待。
WalSenderMain 在WAL发送器进程的主循环中等待。
WalWriterMain 在WAL编写器进程的主循环中等待。
Client ClientRead 等待从客户端读取数据。
ClientWrite 等待从客户端写入数据。
LibPQWalReceiverConnect 等待WAL接收器建立与远程服务器的连接。
LibPQWalReceiverReceive 等待WAL接收器接收来自远程服务器的数据。
SSLOpenServer 尝试连接时等待SSL。
WalReceiverWaitStart 等待启动进程发送流式复制的初始数据。
WalSenderWaitForWAL 等待WAL在WAL发送者进程中刷新。
WalSenderWriteData 在WAL发送者进程中处理来自WAL接收者的回复时等待任何活动。
Extension Extension 在一个扩展中等待。
IPC BgWorkerShutdown 等待后台工作者关闭。
BgWorkerStartup 等待后台工作者启动。
BtreePage 等待继续并行B-tree扫描变得可用所需的页码
ExecuteGather 在执行Gather节点时等待子进程的活动。
LogicalSyncData 等待逻辑复制远程服务器为初始表同步发送数据。
LogicalSyncStateChange 等待逻辑复制远程服务器更改状态。
MessageQueueInternal 等待其他进程被附加到共享消息队列中。
MessageQueuePutMessage 等待将协议消息写入共享消息队列。
MessageQueueReceive 等待接收来自共享消息队列的字节。
MessageQueueSend 等待将字节发送到共享消息队列。
ParallelFinish 等待并行工作者完成计算。
ParallelBitmapScan 等待并行位图扫描初始化。
ProcArrayGroupUpdate 等待小组负责人在事务结束时清除事务ID。
ReplicationOriginDrop 等待复制起点变为非活动状态以便删除。
ReplicationSlotDrop 等待复制槽变为非活动状态以便删除。
SafeSnapshot 等待READ ONLY DEFERRABLE事务的快照。
SyncRep 在同步复制期间等待来自远程服务器的确认。
Timeout BaseBackupThrottle 节流活动时在基准备份期间等待。
PgSleep 在名为pg_sleep的进程中等待。
RecoveryApplyDelay 等待恢复时使用WAL,因为它被延迟。
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 在重新检查数据目录锁定文件期间等待读取。
LogicalRewriteCheckpointSync 等待逻辑重写映射在检查点期间达到稳定存储。
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 通过复制现有的WAL段创建新的WAL段时等待读取。
WALCopySync 等待通过复制现有WAL段来创建新的WAL段达到稳定的存储。
WALCopyWrite 通过复制现有的WAL段来创建新的WAL段时,等待写入。
WALInitSync 等待新初始化的WAL文件达到稳定存储。
WALInitWrite 在初始化新的WAL文件时等待写入。
WALRead 等待从WAL文件读取。
WALSenderTimelineHistoryRead 在walsender时间轴命令期间等待时间线历史文件的读取。
WALSyncMethodAssign 在分配WAL同步方法时等待数据达到稳定存储。
WALWrite 等待写入WAL文件。

注意

对于扩展安装的切片(tranche),这个名称由扩展指定并且会被wait_event显示出来。很有可能在其他后端不知道的情况下,用户在其中一个后端中注册了切片(通过在动态共享内存中分配),那么我们对这种情况会显示extension

下面的例子展示了如何查看等待事件

SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
 pid  | wait_event_type |  wait_event
------+-----------------+---------------
 2540 | Lock            | relation
 6644 | LWLock          | ProcArrayLock
(2 rows)

表 28.5. pg_stat_replication 视图

类型 描述
pid integer 一个 WAL 发送进程的进程 ID
usesysid oid 登录到这个 WAL 发送进程的用户的 OID
usename name 登录到这个 WAL 发送进程的用户的名称
application_name text 连接到这个 WAL 发送进程的应用的名称
client_addr inet 连接到这个 WAL 发送进程的客户端的 IP 地址。 如果这个域为空,它表示该客户端通过服务器机器上的一个 Unix 套接字连接。
client_hostname text 连接上的客户端的主机名,由一次对client_addr 的逆向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有在 log_hostname被启用时非空
client_port integer 客户端用来与这个 WAL 发送进程通讯的 TCP 端口号, 如果使用 Unix 套接字则为-1
backend_start timestamp with time zone 这个进程开始的时间,即客户端是何时连接到这个 WAL 发送进程的
backend_xmin xid hot_standby_feedback报告 的这个后备机的xmin水平线。
state text 当前的 WAL 发送进程状态 可能的值是:
  • startup: 这个 WAL 发送进程正在启动。

  • catchup: 这个 WAL 发送进程连接的备用服务器正在追赶主服务器。

  • streaming: 这个 WAL 发送进程在其连接的备用服务器追赶上主服务器之后传输更改。