受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

27.2. 累计统计系统 #

PostgreSQL累积统计系统支持收集和报告有关服务器活动的信息。 目前,对表和索引的访问以磁盘块和单个行的术语进行计数。每个表中的总行数, 以及每个表的清理和分析操作的信息也被计数。如果启用,对用户定义函数的调用 和每个函数中花费的总时间也会被计数。

PostgreSQL也支持报告关于系统当前正在发生的情况的动态信息, 例如其他服务器进程当前正在执行的确切命令,以及系统中存在哪些其他连接。此功能独立于累积统计系统。

27.2.1. 统计收集配置 #

由于收集统计信息会增加查询执行的开销,因此可以配置系统是否收集信息。这由通常在postgresql.conf中设置的配置参数控制(有关设置配置参数的详细信息,请参阅Chapter 19)。

参数track_activities启用对任意服务器进程当前执行命令的监控。

参数track_counts控制是否收集关于表和索引访问的累积统计信息。

参数track_functions启用对用户定义函数使用的跟踪。

参数track_io_timing启用对块读取、写入、扩展和 fsync 时间的监控。

参数track_wal_io_timing启用对 WAL 读取、写入和 fsync 时间的监控。

通常,这些参数会设置在postgresql.conf中,以便它们适用于所有服务器进程,但也可以在单个会话中使用SET命令打开或关闭它们。(为防止普通用户隐藏其活动不被管理员发现,只有超级用户才能使用SET更改这些参数。)

累积统计信息收集在共享内存中。每个PostgreSQL进程在本地收集统计信息,然后在适当的间隔更新共享数据。当服务器(包括物理副本)正常关闭时,统计信息数据的永久副本会存储在pg_stat子目录中,以便在服务器重启后保留这些统计信息。相反,当从非正常关闭开始启动(例如立即关闭后、服务器崩溃后、从基础备份启动以及进行时间点恢复)时,所有统计计数器都会被重置。

27.2.2. 查看统计信息 #

有几个预定义视图列在Table 27.1中,可用于显示系统的当前状态。另有几个视图列在Table 27.2中,可用于显示累积统计信息。或者,也可以像Section 27.2.26中所述那样,使用底层的累积统计函数构建自定义视图。

当使用累积统计视图和函数来监视收集的数据时,重要的是要意识到信息不会立即更新。每个单独的服务器进程在空闲之前将累积的统计信息刷新到共享内存中,但不会频繁于每PGSTAT_MIN_INTERVAL毫秒(1秒,除非在构建服务器时更改)一次;因此,仍在进行中的查询或事务不会影响显示的总计,显示的信息滞后于实际活动。然而,由track_activities收集的当前查询信息始终是最新的。

另一个重要点是,当服务器进程被要求显示任何累积统计信息时,在默认配置中,访问到的值会被缓存直到当前事务结束。因此,只要当前事务继续存在,统计信息就会保持静态。类似地,当在事务中首次请求任何当前会话的查询信息时,会收集关于所有会话当前查询的信息,并且相同的信息会在整个事务期间显示。这是一个特性,而不是错误,因为它允许在统计信息上执行多个查询并关联其结果,而不必担心数字在查询过程中发生变化。 在交互式分析统计信息或使用昂贵的查询时,访问各个统计信息之间的时间差可能导致缓存统计信息中出现显著的偏差。为了最小化偏差,可以将stats_fetch_consistency设置为snapshot,但这会增加用于缓存不需要的统计数据的内存使用量。相反,如果已知统计信息只被访问一次,那么缓存访问的统计信息是不必要的,可以通过将stats_fetch_consistency设置为none来避免。 可以调用 pg_stat_clear_snapshot() 丢弃当前事务的统计快照或缓存值(如果有)。下一次使用统计信息时,(在快照模式下)将创建一个新的快照,或者(在缓存模式下)缓存所访问的统计信息。

事务还可以在视图pg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_stat_xact_user_functions中看到自己的统计信息 (尚未刷新到共享内存统计信息)。这些数字不像上面所述那样起作用; 相反,它们在事务期间持续更新。

动态统计视图中显示的一些信息在Table 27.1中受到安全限制。 普通用户只能查看关于他们自己会话的所有信息(属于他们是成员的角色的会话)。在关于其他会话的行中,许多列将为空。 但是,请注意,所有用户都可以看到会话的存在以及其一般属性,例如会话用户和数据库。 超级用户以及具有内置角色pg_read_all_stats权限的角色 (另请参阅Section 21.5)可以查看所有会话的全部信息。

Table 27.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_recovery_prefetch 只有一行,显示了恢复过程中预取的块的统计信息。 详细信息请参见 pg_stat_recovery_prefetch
pg_stat_subscription 每个订阅至少一行,显示有关订阅工作进程的信息。有关详细信息,请参阅pg_stat_subscription
pg_stat_ssl 每个连接(常规连接和复制连接)一行,显示有关该连接上使用的 SSL 的信息。有关详细信息,请参阅pg_stat_ssl
pg_stat_gssapi 每个连接(常规连接和复制连接)一行,显示有关该连接上使用的 GSSAPI 认证和加密的信息。有关详细信息,请参阅pg_stat_gssapi
pg_stat_progress_analyze 每个正在运行ANALYZE的后端(包括自动清理工作进程)一行,显示当前进度。请参阅Section 27.4.1
pg_stat_progress_create_index 每个正在运行CREATE INDEXREINDEX的后端一行,显示当前进度。请参阅Section 27.4.2
pg_stat_progress_vacuum 每个正在运行VACUUM的后端(包括自动清理工作进程)一行,显示当前进度。请参阅Section 27.4.3
pg_stat_progress_cluster 每个正在运行CLUSTERVACUUM FULL的后端一行,显示当前进度。请参阅Section 27.4.4
pg_stat_progress_basebackup 每个正在流式传输基础备份的 WAL 发送进程一行,显示当前进度。请参阅Section 27.4.5
pg_stat_progress_copy 每个正在运行COPY的后端一行,显示当前进度。请参阅Section 27.4.6

Table 27.2. 已收集统计信息的视图

视图名称 描述
pg_stat_archiver 只有一行,显示有关 WAL 归档进程活动的信息。有关详细信息,请参阅pg_stat_archiver
pg_stat_bgwriter 只有一行,显示有关后台写入器活动的信息。有关详细信息,请参阅pg_stat_bgwriter
pg_stat_checkpointer 只有一行,显示有关检查点进程活动的信息。有关详细信息,请参阅pg_stat_checkpointer
pg_stat_database 每个数据库一行,显示数据库范围的统计信息。有关详细信息,请参阅pg_stat_database
pg_stat_database_conflicts 每个数据库一行,显示数据库范围内因备库上的恢复冲突而导致查询被取消的统计信息。有关详细信息,请参阅pg_stat_database_conflicts
pg_stat_io 对于每种后端类型、上下文和目标对象的组合各有一行,包含集簇范围的 I/O 统计信息。有关详细信息,请参阅pg_stat_io
pg_stat_replication_slots 每个复制槽一行,显示有关复制槽使用情况的统计信息。有关详细信息,请参阅pg_stat_replication_slots
pg_stat_slru 每个 SLRU 一行,显示操作统计信息。有关详细信息,请参阅pg_stat_slru
pg_stat_subscription_stats 每个订阅一行,显示有关错误的统计信息。有关详细信息,请参阅pg_stat_subscription_stats
pg_stat_wal 只有一行,显示有关 WAL 活动的统计信息。有关详细信息,请参阅pg_stat_wal
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 当前数据库中的每个索引一行,显示有关访问该特定索引的统计信息。有关详细信息,请参阅pg_stat_all_indexes
pg_stat_sys_indexes pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中的每个表一行,显示有关访问该特定表的 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 当前数据库中的每个索引一行,显示有关访问该特定索引的 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 当前数据库中的每个序列一行,显示有关访问该特定序列的 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 每个被跟踪的函数一行,显示有关该函数执行的统计信息。有关详细信息,请参阅pg_stat_user_functions
pg_stat_xact_user_functions pg_stat_user_functions相似,但是只统计在当前事务期间的调用(还没有被包括在pg_stat_user_functions中)。

每个索引的统计信息对于判断哪些索引正在被使用以及它们有多有效尤其有用。

pg_stat_iopg_statio_ 系列视图对于确定缓冲区缓存的有效性很有用,它们可用于计算缓存命中率。请注意,尽管PostgreSQL 的 I/O 统计信息捕获了内核被调用以执行 I/O 的大多数情况,但它们并不区分必须从磁盘读取的数据和已经存在于内核页面缓存中的数据。建议将PostgreSQL统计视图与操作系统工具结合使用,以更全面地了解数据库的 I/O 性能。

27.2.3. pg_stat_activity #

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

Table 27.3. pg_stat_activity 视图

列类型

描述

datid oid

这个后端连接到的数据库的OID

datname name

这个后端连接到的数据库的名称

pid integer

这个后端的进程 ID

leader_pid integer

如果该进程是并行查询工作进程,则为并行组领导者的进程 ID;如果该进程是并行应用工作进程,则为领导应用工作进程的进程 ID。NULL 表示该进程是并行组领导者或领导应用工作进程,或者不参与任何并行操作。

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。请参阅Table 27.4

wait_event text

如果此后端当前正在等待,则返回等待事件名称,否则为NULL。请参阅Table 27.5Table 27.13

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_id bigint

这个后端的最近查询的标识符。 如果stateactive,这个字段显示当前正在执行的查询的标识符。 在所有其他状态,它显示执行的最后一个查询的标识符。 默认不计算查询标识符,因此该字段将为空,除非启用compute_query_id参数或配置了计算查询标识符的第三方模块。

query text

这个后端最近查询的文本。如果stateactive,这个字段显示当前正在执行的查询。 在所有其他状态下,它显示上一个被执行的查询。默认情况下,查询文本会被截断至1024个字节,这个值可以通过参数track_activity_query_size更改。

backend_type text

当前后端的类型。可能的类型为 autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, archiver, standalone backend, startup, walreceiver, walsender, walwriter 以及 walsummarizer。 此外,由扩展注册的后台工作进程还可能有额外的类型。


Note

wait_eventstate列彼此独立。 如果某个后端处于active状态,它可能正在等待某个事件,也可能没有等待。 如果状态为activewait_event非空, 就表示某个查询正在执行,但在系统中的某处被阻塞了。

Table 27.4. 等待事件类型

等待事件类型 描述
Activity 服务器进程空闲。此事件类型表示在其主处理循环中等待活动的进程。 wait_event将标识具体的等待点;参见Table 27.5
BufferPin 服务器进程正在等待对数据缓冲的独占访问。 如果另一个进程持有一个打开的游标,该游标最后一次从相关缓冲区读取数据,则缓冲区销等待可能是漫长的。 参见Table 27.6
Client 服务器进程正在等待连接到用户应用程序的套接字上的活动。 因此,服务器预计发生一些独立于其内部进程的事情。wait_event将识别特定的等待点;参见Table 27.7
Extension 服务器进程正在等待扩展模块定义的某个条件。参见Table 27.8
InjectionPoint 服务器进程正在等待某个注入点在测试中达到预定义结果。更多细节请参见Section 36.10.13。该类型没有预定义的等待点。
IO 服务器进程正在等待一个I/O操作完成。wait_event将识别特定的等待点;参见Table 27.9
IPC 服务器进程正在等待与另一个服务器进程进行交互。wait_event将标识具体的等待点;参见Table 27.10
Lock 服务器进程正在等待一个重量级锁。重量级锁,也称为锁管理器锁或简单锁,主要保护表等SQL可见对象。 然而,它们也用于确保某些内部操作的互斥,例如关系扩展。wait_event将识别等待的锁的类型;参见Table 27.11
LWLock 服务器进程正在等待一个轻量级锁。大多数这样的锁保护共享内存中的特定数据结构。 wait_event将包含标识轻量级锁用途的名称。 (有些锁有特定的名称;其他锁是一组锁的一部分,每个锁具有类似的目的。)参见Table 27.12
Timeout 服务器进程正在等待超时过期。wait_event将识别特定的等待点;参见Table 27.13

Table 27.5. Activity类型的等待事件

Activity 等待事件 描述
ArchiverMain 在归档进程的主循环中等待。
AutoVacuumMain 在自动清理启动过程的主循环中等待。
BgWriterHibernate 在后台写进程中等待,休眠状态。
BgWriterMain 在后台写进程主循环中等待。
CheckpointerMain 在检查点进程的主循环中等待。
LogicalApplyMain 在逻辑复制应用进程的主循环中等待。
LogicalLauncherMain 在逻辑复制启动器进程的主循环中等待。
RecoveryWalStream 流恢复期间,在启动进程主循环等待WAL到达。
SysLoggerMain 在 syslogger 进程的主循环中等待。
WalReceiverMain 在WAL接收器进程的主循环中等待。
WalSenderMain 在 WAL 发送进程的主循环中等待。
WalWriterMain 在WAL写入进程的主循环中等待。

Table 27.6. BufferPin类型的等待事件

BufferPin 等待事件 描述
BufferPin 等待获得缓冲区上的独占销。

Table 27.7. Client类型的等待事件

Client 等待事件 描述
ClientRead 等待从客户端读取数据。
ClientWrite 等待写入数据到客户端。
GSSOpenServer 在建立GSSAPI会话时等待从客户端读取数据。
LibPQWalReceiverConnect 在WAL接收器等待与远程服务器建立连接。
LibPQWalReceiverReceive 在WAL接收器中等待从远程服务器接收数据。
SSLOpenServer 在尝试连接时等待SSL。
WalSenderWaitForWAL 在 WAL 发送进程中等待 WAL 被刷新。
WalSenderWriteData 在 WAL 发送进程中处理 WAL 接收器的回复时,等待任何活动。

Table 27.8. Extension类型的等待事件

Extension 等待事件 描述
Extension 在扩展中等待。

Table 27.9. IO类型的等待事件

IO 等待事件 描述
BaseBackupRead 等待基础备份从文件中读取。
BaseBackupSync 等待由基础备份写入的数据达到持久存储。
BaseBackupWrite 等待基础备份写入文件。
BufFileRead 等待从缓冲文件中读取。
BufFileWrite 等待对缓冲文件的写入。
BufFileTruncate 等待一个缓冲文件被截断。
ControlFileRead 等待读取pg_control文件。
ControlFileSync 等待pg_control文件到达持久存储。
ControlFileSyncUpdate 等待更新pg_control文件以达到持久存储。
ControlFileWrite 等待写入pg_control文件。
ControlFileWriteUpdate 等待写入更新pg_control文件。
CopyFileRead 在文件复制操作期间等待读取。
CopyFileWrite 在文件拷贝操作期间等待写入。
DSMFillZeroWrite 等待用零填充动态共享内存备份(backing)文件。
DataFileExtend 等待关系数据文件被扩展。
DataFileFlush 等待关系数据文件达到持久存储。
DataFileImmediateSync 等待关系数据文件到持久存储的立即同步。
DataFilePrefetch 等待关系数据文件的异步预取。
DataFileRead 等待对关系数据文件的读取。
DataFileSync 等待对关系数据文件的更改达到持久存储。
DataFileTruncate 等待关系数据文件被截断。
DataFileWrite 等待对关系数据文件的写入。
LockFileAddToDataDirRead 在向数据目录锁文件中添加一行时等待读取。
LockFileAddToDataDirSync 等待数据到达持久存储,同时向数据目录锁文件添加一行。
LockFileAddToDataDirWrite 在向数据目录锁文件中添加一行时等待写操作。
LockFileCreateRead 创建数据目录锁文件时等待读取。
LockFileCreateSync 在创建数据目录锁文件时等待数据到达持久存储。
LockFileCreateWrite 在创建数据目录锁文件时等待写操作。
LockFileReCheckDataDirRead 在重新检查数据目录锁文件期间等待读取。
LogicalRewriteCheckpointSync 等待逻辑重写映射到在检查点到达持久存储。
LogicalRewriteMappingSync 在逻辑重写期间等待映射数据到达持久存储
LogicalRewriteMappingWrite 在逻辑重写期间等待映射数据的写入。
LogicalRewriteSync 等待逻辑重写映射到达持久存储。
LogicalRewriteTruncate 等待在逻辑重写期间截断映射数据。
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 等待对两阶段状态文件的写入。
VersionFileSync 等待版本文件达到持久存储,同时创建数据库。
VersionFileWrite 在创建数据库时等待版本文件被写入。
WALBootstrapSync 在引导过程中等待WAL达到持久存储。
WALBootstrapWrite 在引导过程中等待WAL页面的写入。
WALCopyRead 通过复制一个已有WAL段来创建一个新的WAL段时等待读取。
WALCopySync 等待通过复制一个已有WAL段到持久存储来创建一个新的WAL段。
WALCopyWrite 通过复制一个已有WAL段来创建一个新的WAL段时等待写入。
WALInitSync 等待一个新初始化的WAL文件到持久存储。
WALInitWrite 在初始化一个新的WAL文件时等待写入。
WALRead 等待WAL文件的读取。
WALSenderTimelineHistoryRead 在walsender时间线命令期间等待从时间线历史文件读取。
WALSync 等待WAL文件到达持久存储。
WALSyncMethodAssign 等待数据到达持久存储,同时分配一个新的WAL同步方法。
WALWrite 等待写入WAL文件。

Table 27.10. IPC类型的等待事件

IPC 等待事件 描述
AppendReady 等待 Append 计划节点的子计划节点准备好。
ArchiveCleanupCommand 等待archive_cleanup_command完成。
ArchiveCommand 等待archive_command完成。
BackendTermination 等待另一个后端终止。
BackupWaitWalArchive 等待备份所需的WAL文件成功归档。
BgWorkerShutdown 等待后台工作进程关闭。
BgWorkerStartup 等待后台工作进程启动。
BtreePage 正等待继续并行B-树扫描所需的页号变得可用。
BufferIO 等待缓冲I/O结束。
CheckpointDone 等待检查点完成。
CheckpointStart 等待检查点开始。
ExecuteGather 在执行Gather 计划节点时,等待子进程的活动。
HashBatchAllocate 等待一个选定的并行哈希参与者分配哈希表。
HashBatchElect 等待选择一个并行哈希参与者来分配哈希表。
HashBatchLoad 等待其他并行哈希参与者完成哈希表的加载。
HashBuildAllocate 等待一个选定的并行哈希参与者分配初始哈希表。
HashBuildElect 等待选择一个并行哈希参与者来分配初始哈希表。
HashBuildHashInner 等待其他并行哈希参与者完成内部关系的散列。
HashBuildHashOuter 等待其他Parallel 哈希参与者完成对外部关系的分区。
HashGrowBatchesAllocate 等待选定的并行哈希参与者分配更多批处理。
HashGrowBatchesDecide 等待选择一个并行哈希参与者来决定未来的批处理增长。
HashGrowBatchesElect 等待选择一个Parallel 哈希参与者来分配更多批处理。
HashGrowBatchesFinish 等待当选的平行散列参与者决定未来的批量增长。
HashGrowBatchesRepartition 等待一个选定的并行哈希参与者决定未来的批处理增长。
HashGrowBucketsAllocate 等待选定的并行哈希参与者完成更多bucket的分配。
HashGrowBucketsElect 等待选择一个并行哈希参与者来分配更多的buckets。
HashGrowBucketsReinsert 等待其他Parallel 哈希参与者完成将元组插入到新buckets中。
LogicalSyncData 等待逻辑复制远程服务器发送用于初始表同步的数据。
LogicalSyncStateChange 等待逻辑复制远程服务器更改状态。
MessageQueueInternal 等待另一个进程附加到共享消息队列。
MessageQueuePutMessage 等待将协议消息写入共享消息队列。
MessageQueueReceive 等待从共享消息队列接收字节。
MessageQueueSend 等待将字节发送到共享消息队列。
ParallelBitmapScan 等待并行位图扫描被初始化。
ParallelCreateIndexScan 等待并行CREATE INDEX 工作进程完成堆扫描。
ParallelFinish 等待并行工作人员完成计算。
ProcArrayGroupUpdate 等待组领导在并行操作结束时清除事务ID。
ProcSignalBarrier 等待屏障事件被所有后端处理。
Promote 等待备库提升。
RecoveryConflictSnapshot 等待vacuum清理的恢复冲突解决。
RecoveryConflictTablespace 等待恢复冲突解决删除表空间。
RecoveryEndCommand 等待recovery_end_command完成。
RecoveryPause 等待恢复继续进行。
ReplicationOriginDrop 等待复制源变为非活动状态,以便可以删除它。
ReplicationSlotDrop 等待复制槽变为非活动状态,以便可以删除它。
RestoreCommand 等待restore_command完成。
SafeSnapshot 等待获取READ ONLY DEFERRABLE事务的有效快照。
SyncRep 在同步复制期间等待远程服务器的确认。
WalReceiverExit 等待WAL接收器退出。
WalReceiverWaitStart 等待启动进程为流复制发送初始数据。
XactGroupUpdate 等待分组组长在并行操作结束时更新事务状态。

Table 27.11. Lock类型的等待事件

Lock 等待事件 描述
advisory 等待获得一个建议用户锁。
extend 等待扩展一个关系。
frozenid 等待升级 pg_database.datfrozenxidpg_database.datminmxid.
object 等待获取非关系数据库对象上的锁。
page 等待获取一个关系页面上的锁。
relation 等待获得一个关系的锁。
spectoken 等待获取推测的插入锁。
transactionid 等待事务完成。
tuple 等待获取元组上的锁。
userlock 等待获取用户锁。
virtualxid 等待获取虚拟事务ID锁。

Table 27.12. LWLock类型的等待事件

LWLock 等待事件 描述
AddinShmemInit 等待管理共享内存中的扩展空间分配。
AutoFile 等待更新postgresql.auto.conf文件。
Autovacuum 等待读取或更新自动清理工作进程的当前状态。
AutovacuumSchedule 等待确保选择为自动清理的表仍然需要清理。
BackgroundWorker 等待读取或更新后台工作进程状态。
BtreeVacuum 等待读取或更新b-树索引的清理相关信息。
BufferContent 等待访问内存中的数据页。
BufferMapping 等待将数据块与缓冲池中的缓冲区关联。
CheckpointerComm 等待管理fsync请求。
CommitTs 等待读取或更新事务提交时间戳的最后一个值集。
CommitTsBuffer 在提交时间戳SLRU缓冲区上等待I/O。
CommitTsSLRU 等待访问提交时间戳SLRU缓存。
ControlFile 等待读取或更新pg_control文件或创建一个新的WAL文件。
DynamicSharedMemoryControl 等待读取或更新动态共享内存分配信息。
LockFastPath 等待读取或更新进程的快速路径锁信息。
LockManager 等待读取或更新关于heavyweight锁。
LogicalRepWorker 等待读取或更新逻辑复制工作器的状态。
MultiXactGen 等待读取或更新共享的multixact状态。
MultiXactMemberBuffer 在multixact成员SLRU缓冲区上等待I/O。
MultiXactMemberSLRU 等待访问multixact成员SLRU缓存。
MultiXactOffsetBuffer 在multixact 偏移 SLRU缓冲区上等待I/O。
MultiXactOffsetSLRU 等待访问multixact 偏移 SLRU缓存。
MultiXactTruncation 等待读取或截断multixact信息。
NotifyBuffer NOTIFY 消息 SLRU缓冲区上等待I/O。
NotifyQueue 等待读取或更新NOTIFY 消息。
NotifyQueueTail 等待NOTIFY消息存储上的更新限制。
NotifySLRU 等待访问NOTIFY消息SLRU缓存。
OidGen 等待分配一个新的OID。
OldSnapshotTimeMap 等待读取或更新旧的快照控制信息。
ParallelAppend 在并行附加计划执行期间等待选择下一个子计划。
ParallelHashJoin 在并行哈希连接计划执行期间等待同步工作器。
ParallelQueryDSA 等待并行查询动态共享内存分配。
PerSessionDSA 等待并行查询动态共享内存分配。
PerSessionRecordType 等待访问有关复合类型的并行查询信息。
PerSessionRecordTypmod 等待访问有关标识匿名记录类型的类型修饰符的并行查询信息。
PerXactPredicateList 在并行查询期间等待访问当前可序列化事务持有的谓词锁列表。
PredicateLockManager 等待访问可序列化事务使用的谓词锁信息。
ProcArray 等待访问每个进程共享的数据结构(通常情况,是获取快照或报告会话的事务ID)。
RelationMapping 等待读取或更新pg_filenode.map文件(用于跟踪某些系统目录的文件节点分配)。
RelCacheInit 等待读取或更新pg_internal.init关系缓存初始化文件。
ReplicationOrigin 等待创建、删除或使用复制源。
ReplicationOriginState 等待读取或更新一个复制源的进度。
ReplicationSlotAllocation 等待分配或释放复制槽。
ReplicationSlotControl 等待读取或更新复制槽状态。
ReplicationSlotIO 在复制槽位上等待I/O。
SerialBuffer 在可串行事务冲突的SLRU缓冲区上等待I/O。
SerializableFinishedList 等待访问已完成的可序列化事务列表。
SerializablePredicateList 等待访问可序列化事务持有的谓词锁列表。
PgStatsDSA 等待统计动态共享内存分配器访问
PgStatsHash 等待统计共享内存哈希表访问
PgStatsData 等待共享内存统计数据访问
SerializableXactHash 等待读取或更新关于可序列化事务的信息。
SerialSLRU 等待访问可序列化事务冲突SLRU缓存。
SharedTidBitmap 在并行位图索引扫描期间等待访问共享的TID位图。
SharedTupleStore 在并行查询期间等待访问共享元组存储。
ShmemIndex 等待在共享内存中找到或分配空间。
SInvalRead 等待从共享目录失效队列中检索消息。
SInvalWrite 等待向共享编目失效队列添加消息。
SubtransBuffer 在子事务SLRU缓冲区上等待I/O。
SubtransSLRU 等待访问子事务SLRU缓存。
SyncRep 等待读取或更新有关同步复制状态的信息。
SyncScan 等待选择同步表扫描的起始位置。
TablespaceCreate 等待创建或删除表空间。
TwoPhaseState 等待读取或更新已准备事务的状态。
WALBufMapping 等待在WAL缓冲区中替换一个页面。
WALInsert 等待将WAL数据插入内存缓冲区。
WALWrite 等待WAL缓冲区写入磁盘。
WrapLimitsVacuum 等待更新事务id和multixact消费的限制。
XactBuffer 在事务状态的SLRU缓冲区上等待I/O。
XactSLRU 等待访问事务状态的SLRU缓存。
XactTruncation 等待执行pg_xact_status或更新它可用的最早的事务ID。
XidGen 等待分配新的事务ID。

Note

扩展可以将ExtensionInjectionPointLWLock 类型添加到Table 27.8Table 27.12所示的列表中。 在某些情况下,扩展分配的 LWLock 名称无法在所有服务器进程中使用;因此,LWLock 等待事件可能只会被报告为extension,而不是扩展分配的名称。

Table 27.13.  Timeout类型的等待事件

Timeout 等待事件 描述
BaseBackupThrottle 当有限流活动时在基础备份期间等待。
CheckpointWriteDelay 在执行检查点时写入之间的等待时间。
PgSleep 由于调用pg_sleep或同类函数而等待。
RecoveryApplyDelay 由于延迟设置,在恢复期间等待应用WAL。
RecoveryRetrieveRetryInterval 当WAL数据无法从任何来源(pg_wal、归档或流复制)获得时,在恢复期间等待。
RegisterSyncRequest 在发送同步请求到检查点程序时等待,因为请求队列已满。
VacuumDelay 在一个基于代价的清理延迟点。
VacuumTruncate 等待获取独占锁以截断被清理的表末尾的空页面。

这里是一个查看等待事件的示例:

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          | ProcArray
(2 rows)
SELECT a.pid, a.wait_event, w.description
  FROM pg_stat_activity a JOIN
       pg_wait_events w ON (a.wait_event_type = w.type AND
                            a.wait_event = w.name)
  WHERE a.wait_event is NOT NULL and a.state = 'active';
-[ RECORD 1 ]------------------------------------------------------​------------
pid         | 686674
wait_event  | WALInitSync
description | Waiting for a newly initialized WAL file to reach durable storage

27.2.4. pg_stat_replication #

pg_stat_replication视图为每个 WAL 发送进程包含一行,显示有关复制到该发送进程所连接备库的统计信息。 这里只列出直接连接的备库;不包含下游备库的信息。

Table 27.14. 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 发送进程正在流发送更改。

  • backup: 此 WAL 发送进程正在发送一个备份。

  • stopping: 此 WAL 发送进程正在停止。

sent_lsn pg_lsn

在这个连接上发送的最后一个预写式日志的位置

write_lsn pg_lsn

该备库已写入磁盘的最后一个预写式日志位置

flush_lsn pg_lsn

该备库已刷入磁盘的最后一个预写式日志位置

replay_lsn pg_lsn

已在该备库数据库中重放的最后一个预写式日志位置

write_lag interval

从本地刷写最近的 WAL,到收到该备库已写入该 WAL(但尚未刷盘或应用)的通知之间经过的时间。 如果该服务器被配置为同步备库,可用此值衡量在提交时 synchronous_commit 级别 remote_write 所导致的延迟。

flush_lag interval

从本地刷写最近的 WAL,到收到该备库已写入并刷写该 WAL(但尚未应用)的通知之间经过的时间。 如果该服务器被配置为同步备库,可用此值衡量在提交时 synchronous_commit 级别 on 所导致的延迟。

replay_lag interval

从本地刷写最近的 WAL,到收到该备库已写入、刷写并应用该 WAL 的通知之间经过的时间。 如果该服务器被配置为同步备库,可用此值衡量在提交时 synchronous_commit 级别 remote_apply 所导致的延迟。

sync_priority integer

在基于优先级的同步复制中,该备库被选为同步备库的优先级。在基于法定人数的同步复制中,此值不起作用。

sync_state text

该备库的同步状态。 可能的值是:

  • async: 该备库是异步的。

  • potential: 该备库当前是异步的,但在当前同步备库失效时可能变为同步的。

  • sync: 该备库是同步的。

  • quorum: 该备库被作为法定人数同步复制候选备库。

reply_time 带时区的时间戳

从备库收到的最后一条回复消息的发送时间


pg_stat_replication视图中报告的滞后时间,是最近的 WAL 被写入、刷写和重放,以及发送端获知这些操作完成所花费时间的度量。如果远程服务器被配置为同步备库,这些时间表示各个同步提交级别带来或可能带来的提交延迟。对于异步备库,replay_lag列是最近事务对查询变得可见所需延迟时间的近似值。如果备库已经完全追上发送服务器且没有新的 WAL 活动,系统会在短时间内继续显示最近测得的滞后时间,随后显示为 NULL

对于物理复制,滞后时间会自动测量。逻辑解码插件可以选择发出跟踪消息;如果没有这样做,跟踪机制会将滞后显示为 NULL

Note

报告出的滞后时间并不是根据当前重放速率预测该备库还需多久才能追上发送服务器。在持续生成新 WAL 时,那样的系统可能会显示相近的时间;但当发送端空闲时,就会显示不同的值。特别是当备库已经完全追上时,pg_stat_replication显示的是写入、刷写和重放最近报告的 WAL 位置所花费的时间,而不是某些用户可能预期的零。这样做符合为最近写事务测量同步提交和事务可见性延迟的目的。为减少用户因预期另一种滞后模型而产生的混淆,在一个已完全重放且处于空闲状态的系统上,lag 列会在较短时间后恢复为 NULL。监控系统应自行决定将这种情况表示为缺失数据、零,还是继续显示最近一次已知值。

27.2.5. pg_stat_replication_slots #

pg_stat_replication_slots视图将包含每个逻辑复制槽的一行,显示关于其使用情况的统计信息。

Table 27.15. pg_stat_replication_slots 视图

列类型

描述

slot_name text

唯一的,复制槽的集簇范围标识符

spill_txns bigint

当逻辑解码在解码来自WAL的更改时所使用的内存超过logical_decoding_work_mem,溢出到磁盘的事务数。 顶级事务和子事务的计数器都是递增的。

spill_count bigint

在为该槽位解码来自WAL的更改时,事务溢出到磁盘的次数。 此计数器在每次事务被溢出时递增,并且同一事务可能被溢出多次。

spill_bytes bigint

在对来自WAL的更改执行解码时,已解码的事务数据溢出到磁盘的数量。 这个和其他溢出计数器可用于测量逻辑解码期间发生的I/O,并且允许调优logical_decoding_work_mem

stream_txns bigint

在逻辑解码在解码来自该槽位的WAL更改的时候,所使用的内存超过logical_decoding_work_mem之后,流到解码输出插件的正在进行的事务数。 流仅对顶级事务有效(子事务不能独立流),因此子事务的计数器不会增加。

stream_countbigint

在为该槽位解码来自WAL的更改时,将正在进行的事务流到解码输出插件的次数。 此计数器在每次事务流化时递增,并且同一事务可能被流化多次。

stream_bytesbigint

在为该槽位解码来自WAL的更改时,为将正在进行的事务流到解码输出插件而解码的事务数据的数量。 这个和针对此槽位的其他流计数器可用于调优logical_decoding_work_mem

total_txns bigint

针对此槽的,发送到解码输出插件的已解码事务数。 这只计算顶级事务,对子事务不会增加。 注意,这包括流化和/或溢出的事务。

total_bytesbigint

在对此槽位的WAL进行解码时,为将事务发送到解码输出插件而解码的事务数据量。 注意这包括流和/或溢出的数据。

stats_reset timestamp with time zone

这些统计最后重置的时间


27.2.6. pg_stat_wal_receiver #

pg_stat_wal_receiver事务只包含一行,它显示了从 WAL 接收器所连接的服务器得到的有关该接收器的统计信息。

Table 27.16. pg_stat_wal_receiver 视图

列类型

描述

pid integer

WAL接收器进程的进程ID

status text

WAL接收进程的活动状态

receive_start_lsn pg_lsn

WAL接收器启动时使用的第一个写前日志位置

receive_start_tli integer

WAL接收器启动时使用的第一个时间线数字

written_lsn pg_lsn

已经接收并写入磁盘的最后一个预写式日志位置,但没有刷入。这不能用于数据完整性检查。

flushed_lsn pg_lsn

已经接收并刷入到磁盘的最后一个预写式日志位置,该字段的初始值是启动WAL接收器时使用的第一个日志位置

received_tli integer

接收并刷入到磁盘的最后一个预写式日志位置的时间线数字,该字段的初始值为启动WAL接收器时使用的第一个日志位置的时间线数字

last_msg_send_time timestamp with time zone

从源 WAL 发送进程收到的最后一条消息的发送时间

last_msg_receipt_time timestamp with time zone

从源 WAL 发送进程收到的最后一条消息的接收时间

latest_end_lsn pg_lsn

向源 WAL 发送进程报告的最后一个预写式日志位置

latest_end_time timestamp with time zone

向源 WAL 发送进程报告最后一个预写式日志位置的时间

slot_name text

这个WAL接收器使用的复制槽的名称

sender_host text

这个WAL接收器连接到的PostgreSQL实例的主机。 这可以是主机名、IP地址,或者目录路径,如果连接是通过Unix套接字进行的。(路径的情况可以区分,因为它总是以/开头的绝对路径。)

sender_port integer

这个WAL接收器连接的PostgreSQL实例的端口号。

conninfo text

这个WAL接收器使用的连接字符串,对安全敏感的字段进行了模糊处理。


27.2.7. pg_stat_recovery_prefetch #

pg_stat_recovery_prefetch视图将只包含一行。 wal_distanceblock_distanceio_depth列显示当前值,其他列显示可以使用 pg_stat_reset_shared函数重置的累积计数器。

Table 27.17. pg_stat_recovery_prefetch 视图

列类型

描述

stats_reset timestamp with time zone

这些统计数据上次重置的时间

prefetch bigint

因为不在缓冲池中,所以预取的块数

hit bigint

因为它们已经在缓冲池中,所以未预取的块数

skip_init bigint

未预取的块数,因为它们将被初始化为零

skip_new bigint

未预取的块数,因为它们尚不存在

skip_fpw bigint

由于WAL中包含完整页图像而未预取的块数

skip_rep bigint

由于最近已经预取过而未预取的块数

wal_distance int

预取器向前查看多少字节

block_distance int

预取器正在查看多少个块之前

io_depth int

已启动但尚未完成的预取数量


27.2.8. pg_stat_subscription #

Table 27.18. pg_stat_subscription 视图

列类型

描述

subid oid

订阅的OID

subname name

订阅的名称

worker_type text

订阅工作进程的类型。可能的类型有 applyparallel applytable synchronization

pid integer

订阅工作进程的进程 ID

relid oid

该工作进程正在同步的关系的 OID;主应用工作进程则为 NULL

received_lsn pg_lsn

接收到的最后一个预写式日志位置,该字段的初始值为0

last_msg_send_time timestamp with time zone

从源 WAL 发送进程收到的最后一条消息的发送时间

last_msg_receipt_time timestamp with time zone

从源 WAL 发送进程收到的最后一条消息的接收时间

latest_end_lsn pg_lsn

向源 WAL 发送进程报告的最后一个预写式日志位置

latest_end_time timestamp with time zone

向 WAL 发送进程报告最后一个预写式日志位置的时间


27.2.9. pg_stat_subscription_stats #

pg_stat_subscription_stats视图将包含每个订阅的一行。

Table 27.19. pg_stat_subscription_stats 视图

列类型

描述

subid oid

订阅的OID

subname name

订阅的名称

apply_error_count bigint

应用更改时发生错误的次数

sync_error_count bigint

在初始表同步期间发生错误的次数

stats_reset timestamp with time zone

这些统计数据最后一次重置的时间


27.2.10. pg_stat_ssl #

pg_stat_ssl视图将为每一个后端或者 WAL 发送进程包含一行,用来显示这个连接上的 SSL 使用情况。 可以把它与pg_stat_activity或者pg_stat_replication通过pid列连接来得到更多有关该连接的细节。

Table 27.20. pg_stat_ssl 视图

列类型

描述

pid integer

后端或 WAL 发送进程的进程 ID

ssl boolean

如果在此连接上使用SSL,则为真

version text

使用SSL的版本,如果此连接上没有使用SSL则为NULL

cipher text

正在使用的SSL密码的名称,如果此连接上没有使用SSL则为NULL

bits integer

使用的加密算法中的位数,如果此连接上没有使用SSL则为NULL

client_dn text

区别名称(DN,Distinguished Name)字段与使用的客户端证书,如果没有提供客户端证书或在此连接上没有使用SSL,则为NULL。 如果DN字段长于NAMEDATALEN(标准构建中为64个字符),则该字段将被截断。

client_serial numeric

客户端证书的序列号,如果没有提供客户端证书或在此连接上没有使用SSL,则为NULL。 证书序列号和证书颁发者的组合唯一标识一个证书(除非颁发者错误地重用序列号)。

issuer_dn text

客户端证书颁发者的区别名称(DN,Distinguished Name),如果没有提供客户端证书或在此连接上没有使用SSL,则为NULL。该字段像client_dn一样被截断。


27.2.11. pg_stat_gssapi #

pg_stat_gssapi视图将包含每一个后端一个行,显示该连接上的GSSAPI使用情况。 它可以加入到pg_stat_activitypg_stat_replication上的pid列,获取更多关于连接的详细信息。

Table 27.21. pg_stat_gssapi 视图

列类型

描述

pid integer

后端进程ID

gss_authenticated boolean

如果此连接使用了 GSSAPI 认证,则为真

principal text

用于验证此连接的主体,如果未使用GSSAPI对此连接进行认证,则为NULL。 如果主体长度超过NAMEDATALEN(标准构建中为64个字符),则该字段被截断。

encrypted boolean

如果在此连接上使用了GSSAPI加密,则为真

credentials_delegated boolean

如果此连接上已委派 GSSAPI 凭据,则为真


27.2.12. pg_stat_archiver #

pg_stat_archiver视图总是有一行,其中包含关于集簇的归档进程的数据。

Table 27.22. pg_stat_archiver 视图

列类型

描述

archived_count bigint

已成功归档的WAL文件数

last_archived_wal text

最近成功归档的WAL文件的名称

last_archived_time timestamp with time zone

最近成功归档操作的时间

failed_count bigint

记录WAL文件归档失败次数

last_failed_wal text

最近一次归档操作失败的WAL文件的名称

last_failed_time timestamp with time zone

最近一次归档操作失败的时间

stats_reset timestamp with time zone

这些统计数据最后一次重置的时间


通常,WAL 文件会按从最旧到最新的顺序归档,但这并无保证,也不适用于某些特殊情况,例如备库提升或崩溃恢复之后。因此,不能安全地假设所有早于 last_archived_wal的文件也已成功归档。

27.2.13. pg_stat_io #

pg_stat_io 视图对每种后端类型、目标 I/O 对象和 I/O 上下文的组合各提供一行,显示整个集簇范围内的 I/O 统计信息。没有意义的组合会被省略。

Currently, I/O on relations (e.g. tables, indexes) is tracked. However, relation I/O which bypasses shared buffers (e.g. when moving a table from one tablespace to another) is currently not tracked.

Table 27.23. pg_stat_io 视图

列类型

描述

backend_type text

后端类型(例如后台工作进程、autovacuum 工作进程)。有关 backend_type 的更多信息,请参阅pg_stat_activity。某些 backend_type 不会累计 I/O 操作统计信息,因此不会出现在该视图中。

object text

I/O 操作的目标对象。可能的值有:

  • relation:永久关系。

  • temp relation:临时关系。

context text

I/O 操作的上下文。可能的值有:

  • normal:某类 I/O 操作的默认或标准 context。例如,默认情况下关系数据会读入共享缓冲区并从共享缓冲区写出,因此关系数据与共享缓冲区之间的读写会在 contextnormal 时跟踪。

  • vacuum:对永久关系执行 vacuum 和 analyze 时,在共享缓冲区之外执行的 I/O 操作。临时表 vacuum 与其他临时表 I/O 操作共用同一本地缓冲池,因此会在 contextnormal 时跟踪。

  • bulkread:某些在共享缓冲区之外执行的大型读取 I/O 操作,例如对大表的顺序扫描。

  • bulkwrite:某些在共享缓冲区之外执行的大型写入 I/O 操作,例如 COPY

reads bigint

读取操作的次数,每次操作的大小由op_bytes指定。

read_time double precision

在读取操作中花费的时间,以毫秒计(如果启用了 track_io_timing,否则为零)。

writes bigint

写入操作的次数,每次操作的大小由op_bytes指定。

write_time double precision

在写入操作中花费的时间,以毫秒计(如果启用了 track_io_timing,否则为零)。

writebacks bigint

进程请求内核写出到永久存储的、大小为op_bytes的单元数。

writeback_time double precision

在写回操作中花费的时间,以毫秒计(如果启用了 track_io_timing,否则为零)。这包括排队写出请求 所花费的时间,以及可能实际写出脏数据所花费的时间。

extends bigint

关系扩展操作的次数,每次操作的大小由op_bytes指定。

extend_time double precision

在扩展操作中花费的时间,以毫秒计(如果启用了 track_io_timing,否则为零)。

op_bytes bigint

每个 I/O 读取、写入或扩展单位的字节数。

关系数据的读取、写入和扩展以block_size为单位进行,该值 来自构建时参数BLCKSZ,默认值为8192

hits bigint

在共享缓冲区中找到所需块的次数。

evictions bigint

为了腾出空间供其他用途而将块从共享或本地缓冲区写出的次数。

contextnormal 时,这会统计块从缓冲区中被驱逐并由另一个块替换的次数。在 contextbulkwritebulkreadvacuum 时,这会统计块从共享缓冲区中被驱逐,从而把该共享缓冲区加入到单独的、大小受限的环形缓冲区中以供批量 I/O 操作使用的次数。

reuses bigint

bulkreadbulkwritevacuum 这些 context 中,作为 I/O 操作一部分,位于共享缓冲区之外的大小受限环形缓冲区中已有缓冲区被重用的次数。

fsyncs bigint

fsync 调用次数。这些只会在 contextnormal 时被跟踪。

fsync_time double precision

在 fsync 操作中花费的时间,以毫秒计(如果启用了 track_io_timing,否则为零)。

stats_reset timestamp with time zone

这些统计信息上次被重置的时间。


某些后端类型永远不会对某些 I/O 对象和/或在某些 I/O 上下文中执行 I/O 操作,这些行会从视图中省略。例如,检查点进程不会对临时表执行检查点,因此不会出现 backend_typecheckpointerobjecttemp relation 的行。

此外,某些 I/O 操作永远不会由某些后端类型执行,或者永远不会针对某些 I/O 对象和/或在某些 I/O 上下文中执行。这些单元格会是 NULL。例如,临时表不会执行 fsync,因此当 objecttemp relation 时,fsyncs 将为 NULL。又如,后台写入器不会执行读取,因此当 backend_typebackground writer 时,reads 将为 NULL。

pg_stat_io 可用于指导数据库调优。例如:

  • 较高的 evictions 计数可能表明应增大共享缓冲区。

  • 客户端后端依赖检查点进程确保数据持久化到永久存储。客户端后端出现大量 fsyncs 可能表明共享缓冲区或检查点进程配置不当。有关配置检查点进程的更多信息,请参阅Section 28.5

  • 通常,客户端后端应尽可能依赖检查点进程和后台写入器等辅助进程去写出脏数据。客户端后端出现大量写入可能表明共享缓冲区或检查点进程配置不当。有关配置检查点进程的更多信息,请参阅Section 28.5

Note

只有在启用track_io_timing时,跟踪 I/O 时间的列才会 非零。若自上次统计信息重置以来的整个期间并未始终启用 track_io_timing,则在将这些列与相应的 I/O 操作结合引用时 应格外小心。

27.2.14. pg_stat_bgwriter #

pg_stat_bgwriter 视图始终只有一行,包含有关集簇后台写入器的数据。

Table 27.24. pg_stat_bgwriter 视图

列类型

描述

buffers_clean bigint

后台写入器写入的缓冲区数量

maxwritten_clean bigint

后台写入器因写入了过多缓冲区而停止清理扫描的次数

buffers_alloc bigint

分配的缓冲区数量

stats_reset timestamp with time zone

这些统计信息上次被重置的时间


27.2.15. pg_stat_checkpointer #

pg_stat_checkpointer 视图始终只有一行,包含有关集簇检查点进程的数据。

Table 27.25. pg_stat_checkpointer 视图

列类型

描述

num_timed bigint

因超时而安排的检查点数量。请注意,如果服务器自上次检查点以来一直处于 空闲状态,则检查点可能会被跳过,而该值同时统计已完成和已跳过的检查点。

num_requested bigint

已执行的请求检查点数量

restartpoints_timed bigint

因超时或上次尝试执行失败后而安排的重启点数量

restartpoints_req bigint

被请求执行的重启点数量

restartpoints_done bigint

已执行的重启点数量

write_time double precision

处理检查点和重启点时,将文件写入磁盘阶段所花费的总时间,以毫秒计

sync_time double precision

处理检查点和重启点时,将文件同步到磁盘阶段所花费的总时间,以毫秒计

buffers_written bigint

在检查点和重启点期间写入的缓冲区数量

stats_reset timestamp with time zone

这些统计信息上次被重置的时间


27.2.16. pg_stat_wal #

pg_stat_wal 视图一直有一行,包含关于集簇的WAL活动的数据。

Table 27.26. pg_stat_wal 视图

列类型

描述

wal_records bigint

生成的WAL记录的总数

wal_fpi bigint

生成的WAL全页映像的总数

wal_bytes numeric

生成的WAL总数,以字节计

wal_buffers_full bigint

因为缓冲区已满,WAL数据被写入磁盘的次数

wal_write bigint

通过XLogWrite请求,WAL缓冲区被写入到磁盘的次数。 有关内部WAL函数XLogWrite的更多信息,请参见Section 28.5

wal_sync bigint

通过issue_xlog_fsync 请求将WAL文件同步到磁盘的次数(如果fsynconwal_sync_methodfdatasync, fsyncfsync_writethrough,否则为零)。 有关内部WAL函数issue_xlog_fsync的更多信息,参见Section 28.5

wal_write_time double precision

通过XLogWrite请求将WAL缓冲区写入磁盘所消耗的总时间,以毫秒计(如果track_wal_io_timing是启用的,否则为零)。 这包括当wal_sync_methodopen_datasyncopen_sync时的同步时间。

wal_sync_time double precision

通过issue_xlog_fsync请求将 WAL 文件同步到磁盘所花费的 总时间,以毫秒计(如果启用了track_wal_io_timingfsyncon,且 wal_sync_methodfdatasyncfsyncfsync_writethrough,否则为零)。

stats_reset timestamp with time zone

这些统计数据最后一次重置的时间


27.2.17. pg_stat_database #

pg_stat_database视图将包含一行用于集簇中的每个数据库,加一行用于共享对象,显示数据库范围的统计信息。

Table 27.27. pg_stat_database 视图

列类型

描述

datid oid

该数据库的OID,属于共享关系的对象为0

datname name

这个数据库的名称,或者共享对象为NULL

numbackends integer

当前连接到此数据库的后端数,对于共享对象则为NULL。 这是该视图中唯一返回反映当前状态的值的列;所有其他列返回自上次重置以来累积的值。

xact_commit bigint

此数据库中已提交的事务数

xact_rollback bigint

该数据库中已回滚的事务数

blks_read bigint

在该数据库中读取的磁盘块数

blks_hit bigint

在缓冲区缓存中发现磁盘块、因而无需读取的次数(这里只统计 PostgreSQL 缓冲区缓存中的命中,不包括操作系统文件系统缓存中的命中)

tup_returned bigint

由顺序扫描获取的活动行数和由索引扫描返回的索引条目数

tup_fetched bigint

该数据库中由索引扫描检索的活动行数

tup_inserted bigint

查询在该数据库中插入的行数

tup_updated bigint

这个数据库中查询更新的行数

tup_deleted bigint

这个数据库中被查询删除的行数

conflicts bigint

由于与此数据库中的恢复冲突而被取消的查询数。(冲突只会发生在备库上;请参阅pg_stat_database_conflicts。)

temp_files bigint

这个数据库中查询创建的临时文件的数量。所有临时文件都将被计数,而不顾及临时文件为什么被创建(例如,排序或散列),也不考虑log_temp_files设置。

temp_bytes bigint

这个数据库中的查询写入临时文件的数据总量。所有临时文件都将被计数,而不考虑临时文件为什么被创建,也不考虑log_temp_files设置。

deadlocks bigint

在此数据库中检测到的死锁数

checksum_failures bigint

在此数据库(或共享对象)中检测到的数据页校验和失败次数,如果未启用 数据校验和则为 NULL。

checksum_last_failure timestamp with time zone

在此数据库(或共享对象)中最后一次检测到数据页校验和失败的时间, 如果未启用数据校验和则为 NULL。

blk_read_time double precision

在这个数据库中通过后端读取数据文件块所花费的时间,以毫秒为单位(如果启用了track_io_timing,否则为零)

blk_write_time double precision

在这个数据库中通过后端写数据文件块所花费的时间,以毫秒为单位(如果启用了track_io_timing,否则为零)

parallel_workers_to_launch bigint

计划由该数据库上的查询启动的并行工作进程数

parallel_workers_launched bigint

由该数据库上的查询启动的并行工作进程数

session_time double precision

此数据库中数据库会话所消耗的时间,以毫秒计(注意统计信息仅在会话状态发生变化时更新,因此如果会话空闲很长时间,则不包括此空闲时间)

active_time double precision

此数据库中执行SQL语句所消耗的时间,以毫秒计(这对应于 pg_stat_activity中的 activefastpath function call 状态)

idle_in_transaction_time double precision

此数据库中事务空闲所消耗的时间,以毫秒计(这对应于 pg_stat_activity中的 idle in transactionidle in transaction (aborted) 状态)

sessions bigint

此数据库建立的会话总数

sessions_abandoned bigint

此数据库因为到客户端的连接丢失而被终止的数据库会话数

sessions_fatal bigint

此数据库因为致命错误而被终止的数据库会话数

sessions_killed bigint

因操作者干预而被终止的、连接到此数据库的数据库会话数量

stats_reset timestamp with time zone

这些统计数据最后一次重置的时间


27.2.18. pg_stat_database_conflicts #

pg_stat_database_conflicts视图为每个数据库包含一行,用来显示数据库范围内因与备库上的恢复过程冲突而被取消的查询统计信息。 该视图只包含备库上的信息,因为这类冲突不会发生在主库上。

Table 27.28. pg_stat_database_conflicts 视图

列类型

描述

datid oid

数据库的OID

datname name

数据库的名称

confl_tablespace bigint

这个数据库中由于删除表空间而取消的查询的数量

confl_lock bigint

此数据库中由于锁定超时而被取消的查询数

confl_snapshot bigint

此数据库中由于旧快照而取消的查询数

confl_bufferpin bigint

此数据库中由于固定缓冲区而被取消的查询数

confl_deadlock bigint

此数据库中由于死锁而被取消的查询数

confl_active_logicalslot bigint

此数据库中因旧快照或主库上的 wal_level 太低而被取消的逻辑槽使用次数


27.2.19. pg_stat_all_tables #

pg_stat_all_tables视图将为当前数据库中的每一个表(包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。 pg_stat_user_tablespg_stat_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户和系统表。

Table 27.29. pg_stat_all_tables 视图

列类型

描述

relid oid

表的OID

schemaname name

该表所在的模式的名称

relname name

这个表的名称

seq_scan bigint

在此表上启动的顺序扫描数

last_seq_scan timestamp with time zone

此表上最后一次顺序扫描的时间,基于最近的事务停止时间

seq_tup_read bigint

连续扫描获取的实时行数

idx_scan bigint

对这个表发起的索引扫描数

last_idx_scan timestamp with time zone

此表上最后一次索引扫描的时间,基于最近的事务停止时间

idx_tup_fetch bigint

索引扫描获取的实时行数

n_tup_ins bigint

插入的行数

n_tup_upd bigint

更新的行数(包括HOT更新的行

n_tup_del bigint

删除的行数

n_tup_hot_upd bigint

HOT更新的行数(即,不需要单独的索引更新)

n_tup_newpage_upd bigint

更新的行数,其中后继版本转到新的堆页,留下一个原始版本,其t_ctid字段指向不同的堆页。这些始终是非 HOT 更新。

n_live_tup bigint

活的行的估计数量

n_dead_tup bigint

死行的估计数量

n_mod_since_analyze bigint

自上次分析此表以来修改的行的估计数量

n_ins_since_vacuum bigint

自上次清理此表以来插入的行的估计数量

last_vacuum timestamp with time zone

最后一次手动清理这个表(不包括VACUUM FULL)

last_autovacuum timestamp with time zone

这个表最后一次被自动清理守护进程清理的时间

last_analyze timestamp with time zone

上一次手动分析这个表

last_autoanalyze timestamp with time zone

自动清理守护进程最后一次分析这个表

vacuum_count bigint

这个表被手动清理的次数(VACUUM FULL不计数)

autovacuum_count bigint

这个表被自动清理守护进程清理的次数

analyze_count bigint

手动分析这个表的次数

autoanalyze_count bigint

这个表被自动清理守护进程分析的次数


27.2.20. pg_stat_all_indexes #

pg_stat_all_indexes视图将为当前数据库中的每个索引包含一行,该行显示关于对该索引访问的统计信息。pg_stat_user_indexespg_stat_sys_indexes视图包含相同的信息,但是被过滤得只分别显示用户和系统索引。

Table 27.30. pg_stat_all_indexes 视图

列类型

描述

relid oid

对于此索引的表的OID

indexrelid oid

这个索引的OID

schemaname name

这个索引所在的模式名称

relname name

这个索引的表的名称

indexrelname name

这个索引的名称

idx_scan bigint

在这个索引上开启的索引扫描的数量

last_idx_scan timestamp with time zone

此索引上最后一次扫描的时间,基于最近的事务停止时间

idx_tup_read bigint

扫描此索引返回的索引项数

idx_tup_fetch bigint

使用此索引进行简单索引扫描获取的活动表行数


索引可以被简单索引扫描、位图索引扫描以及优化器使用。在一次位图扫描中,多个索引的输出可以被通过 AND 或 OR 规则组合,因此当使用一次位图扫描时难以将取得的个体堆行与特定的索引关联起来。因此,一次位图扫描会增加它使用的索引的pg_stat_all_indexes.idx_tup_read计数,并且为每个表增加pg_stat_all_tables.idx_tup_fetch计数,但是它不影响pg_stat_all_indexes.idx_tup_fetch。如果所提供的常量值不在优化器统计信息记录的范围之内,优化器也会访问索引来检查,因为优化器统计信息可能已经“不新鲜”了。

Note

即使不用位图扫描,idx_tup_readidx_tup_fetch计数也可能不同,因为idx_tup_read统计从该索引取得的索引项而idx_tup_fetch统计从表取得的活着的行。如果使用该索引取得了任何死亡行或还未提交的行,或者如果通过一次只用索引扫描的方式避免了任何堆获取,后者将较小。

Note

使用某些SQL构造来搜索与一个列表或数组中的多个标量值里 任意一个匹配的行的查询(见Section 9.25),会在 查询执行期间执行多个原始索引扫描(每个标量值最多一个原始 扫描)。每个内部原始索引扫描都会递增 pg_stat_all_indexes.idx_scan, 因此索引扫描计数有可能显著超过索引扫描执行器节点的总执行次数。

27.2.21. pg_statio_all_tables #

pg_statio_all_tables视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,该行显示指定表上有关 I/O 的统计信息。pg_statio_user_tablespg_statio_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户表和系统表。

Table 27.31. pg_statio_all_tables 视图

列类型

描述

relid oid

表的OID

schemaname name

该表所在的模式的名称

relname name

这个表的名称

heap_blks_read bigint

从该表中读取的磁盘块的数量

heap_blks_hit bigint

该表中的缓冲区命中数

idx_blks_read bigint

从这个表上所有索引读取的磁盘块数

idx_blks_hit bigint

这个表上所有索引中的缓冲区命中数

toast_blks_read bigint

从这个表的TOAST表中读取的磁盘块的数量(如果有的话)

toast_blks_hit bigint

这个表的TOAST表中的缓冲区命中数(如果有的话)

tidx_blks_read bigint

从这个表的TOAST表索引中读取的磁盘块的数量(如果有的话)

tidx_blks_hit bigint

这个表的TOAST表索引中的缓冲区命中数(如果有的话)


27.2.22. pg_statio_all_indexes #

pg_statio_all_indexes视图将为当前数据库中的每个索引包含一行,该行显示指定索引上有关 I/O 的统计信息。 pg_statio_user_indexespg_statio_sys_indexes视图包含相同的信息,但是被过滤得分别只显示用户索引和系统索引。

Table 27.32. pg_statio_all_indexes 视图

列类型

描述

relid oid

对于此索引的表的OID

indexrelid oid

这个索引的OID

schemaname name

这个索引所在的模式名称

relname name

这个索引的表的名称

indexrelname name

这个索引的名称

idx_blks_read bigint

从此索引中读取的磁盘块的数量

idx_blks_hit bigint

此索引中的缓冲区命中数


27.2.23. pg_statio_all_sequences #

pg_statio_all_sequences视图将为当前数据库中的每个序列包含一行,该行显示在指定序列上有关 I/O 的统计信息。

Table 27.33. pg_statio_all_sequences 视图

列类型

描述

relid oid

序列的OID

schemaname name

此序列所在的模式的名称

relname name

此序列的名称

blks_read bigint

从这个序列中读取的磁盘块的数量

blks_hit bigint

在此序列中的缓冲区命中数


27.2.24. pg_stat_user_functions #

pg_stat_user_functions视图将为每一个被追踪的函数包含一行,该行显示有关该函数执行的统计信息。 track_functions参数控制到底哪些函数被跟踪。

Table 27.34. pg_stat_user_functions 视图

列类型

描述

funcid oid

函数的OID

schemaname name

这个函数所在的模式的名称

funcname name

这个函数的名称

calls bigint

这个函数已经被调用的次数

total_time double precision

在这个函数以及它所调用的其他函数中花费的总时间,以毫秒计

self_time double precision

在这个函数本身花费的总时间,不包括被它调用的其他函数,以毫秒计


27.2.25. pg_stat_slru #

PostgreSQL通过SLRU(simple least-recently-used,简单的最近-最少-使用)缓存访问某些磁盘上的信息。 pg_stat_slru视图将为每个被跟踪的SLRU缓存包含一行,显示关于访问缓存页面的统计信息。

Table 27.35. pg_stat_slru 视图

列类型

描述

name text

SLRU的名称

blks_zeroed bigint

初始化期间被置零的块数

blks_hit bigint

已经在SLRU中的磁盘块被发现的次数,因此不需要读取(这只包括SLRU中的命中,而不是操作系统的文件系统缓存)

blks_read bigint

为这个SLRU读取的磁盘块数

blks_written bigint

为这个SLRU写入的磁盘块数

blks_exists bigint

为这个SLRU检查是否存在的块数

flushes bigint

此SLRU的脏数据刷新数

truncates bigint

这个SLRU的截断数

stats_reset timestamp with time zone

这些统计数据最后一次重置的时间


27.2.26. 统计函数 #

其他查看统计信息的方法是直接使用查询,这些查询使用上述标准视图用到的底层统计信息访问函数。 如要了解如函数名等细节,可参考标准视图的定义(例如,在psql中你可以发出\d+ pg_stat_activity)。 针对每一个数据库统计信息的访问函数把一个数据库 OID 作为参数来标识要报告哪个数据库。而针对每个表和每个索引的函数要求表或索引 OID。 针对每个函数统计信息的函数用一个函数 OID。注意只有在当前数据库中的表、索引和函数才能被这些函数看到。

与累积统计系统相关的其他功能在Table 27.36中列出。

Table 27.36. 附加统计函数

函数

描述

pg_backend_pid () → integer

返回附加到当前会话的服务器进程的进程ID。

pg_stat_get_activity ( integer ) → setof record

使用指定的进程ID返回有关后端信息的记录,如果指定了NULL,则返回系统中每个活动后端的一条记录。 返回的字段是pg_stat_activity视图中字段的子集。

pg_stat_get_snapshot_timestamp () → timestamp with time zone

返回当前统计快照的时间戳,如果没有统计快照则返回NULL。如果在事务中第一次访问累积统计信息时将快照设置为stats_fetch_consistencysnapshot

pg_stat_get_xact_blocks_fetched ( oid ) → bigint

返回当前事务中表或索引的块读取请求次数。这个数字减去 pg_stat_get_xact_blocks_hit给出了内核read()调用的次数; 实际的物理读取次数通常较低,这是由于内核级别的缓冲。

pg_stat_get_xact_blocks_hit ( oid ) → bigint

返回在当前事务中在缓存中找到的表或索引的块读取请求次数(不触发内核read()调用)。

pg_stat_clear_snapshot () → void

丢弃当前的统计快照或缓存信息。

pg_stat_reset () → void

将当前数据库的所有统计计数器重置为零。

默认情况下该函数仅限于超级用户,但是其他用户可以被授予EXECUTE来运行此函数。

pg_stat_reset_shared ( text ) → void

根据参数将一些集簇范围的统计计数器重置为零。参数可以是bgwriter, 用于重置在pg_stat_bgwriter视图中显示的所有计数器, archiver,用于重置在pg_stat_archiver视图中显示的所有计数器, wal,用于重置在pg_stat_wal视图中显示的所有计数器, 或recovery_prefetch,用于重置在pg_stat_recovery_prefetch视图中显示的所有计数器。

默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限来运行该函数。

pg_stat_reset_backend_stats ( integer ) → void

将指定进程 ID 的单个后端进程的统计信息重置为零。

默认情况下,此函数仅限超级用户使用,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_stat_reset_single_table_counters ( oid ) → void

重置当前数据库中的单个表或索引的统计信息,或者在集簇中跨所有数据库共享的统计信息为零。 默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限来运行该函数。

pg_stat_reset_single_function_counters ( oid ) → void

将当前数据库中单个函数的统计信息重置为零。

默认情况下该函数仅限于超级用户,但是其他用户可以被授予EXECUTE来运行此函数。

pg_stat_reset_slru ( text ) → void

将单个SLRU缓存或集簇中所有SLRU的统计信息重置为零。 如果该参数为NULL,则所有SLRU缓存的pg_stat_slru视图中显示的计数器将被重置。 参数可以是CommitTsMultiXactMemberMultiXactOffsetNotifySerialSubtrans、 或Xact中的一个,以便只重置该条目的计数器。 如果参数是other(或实际上,任何无法识别的名称),那么所有其他SLRU缓存的计数器,如扩展定义的缓存,将被重置。

默认情况下该函数仅限于超级用户,但是其他用户可以被授予EXECUTE来运行此函数。

pg_stat_reset_replication_slot ( text ) → void

重置由参数定义的复制槽的统计信息。 如果参数为NULL,则重置所有复制槽的统计信息。

该函数默认仅限于超级用户,但可以授予其他用户EXECUTE权限来运行该函数。

pg_stat_reset_subscription_stats ( oid ) → void

重置pg_stat_subscription_stats视图中显示的单个订阅的统计信息为零。 如果参数是NULL,则重置所有订阅的统计信息。

默认情况下,此函数仅限超级用户使用,但其他用户可以被授予EXECUTE权限来运行该函数。


Warning

使用pg_stat_reset()还会重置自动清理使用的计数器, 以确定何时触发清理或分析。重置这些计数器可能导致自动清理不执行必要的工作, 这可能会导致问题,如表膨胀或过时的表统计信息。建议在统计信息重置后进行全库ANALYZE

pg_stat_get_activitypg_stat_activity视图的底层函数, 它返回一个行集合,其中包含有关每个后端进程所有可用的信息。有时只获得该信息的一个子集可能会更方便。 在那些情况中,可以使用一组更老的针对每个后端的统计访问函数,这些显示在Table 27.37中。 这些访问函数使用一个后端 ID 号,范围从 1 到当前活动后端数目。 函数pg_stat_get_backend_idset提供了一种方便的方法为每个活动后端产生一行来调用这些函数。 例如,要显示PID以及所有后端当前的查询:

SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
       pg_stat_get_backend_activity(s.backendid) AS query
    FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

Table 27.37. 按后端统计函数

函数

描述

pg_stat_get_backend_idset () → setof integer

返回当前活动后端ID号的集合(从1到活动后端数)。

pg_stat_get_backend_activity ( integer ) → text

返回此后端最近查询的文本。

pg_stat_get_backend_activity_start ( integer ) → 有时区的时间戳

返回后端最近一次查询开始的时间。

pg_stat_get_backend_client_addr ( integer ) → inet

返回连接到此后端的客户端的IP地址。

pg_stat_get_backend_client_port ( integer ) → integer

返回客户端用于通信的TCP端口号。

pg_stat_get_backend_dbid ( integer ) → oid

返回此后端连接的数据库的OID。

pg_stat_get_backend_pid ( integer ) → integer

返回此后端进程ID。

pg_stat_get_backend_start ( integer ) → 有时区的时间戳

返回该进程开始的时间。

pg_stat_get_backend_subxact ( integer ) → record

返回指定 ID 的后端进程的子事务信息记录。返回的字段包括 subxact_count(该后端进程子事务缓存中的子事务数量)以及 subxact_overflow(指示该后端进程的子事务缓存是否已溢出)。

pg_stat_get_backend_userid ( integer ) → oid

返回登录到此后端的用户的OID。

pg_stat_get_backend_wait_event_type ( integer ) → text

如果后端当前正在等待,则返回等待事件类型名称,否则返回NULL。 请参阅Table 27.4

pg_stat_get_backend_wait_event ( integer ) → text

如果后端当前正在等待,则返回等待事件名称,否则为NULL。 请参阅Table 27.5Table 27.13

pg_stat_get_backend_xact_start ( integer ) → 有时区的时间戳

返回后端当前事务开始的时间。


提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。