Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

28.2. 累积统计系统 #

28.2.1. 统计信息收集配置
28.2.2. 查看统计信息
28.2.3. pg_stat_activity
28.2.4. pg_stat_replication
28.2.5. pg_stat_replication_slots
28.2.6. pg_stat_wal_receiver
28.2.7. pg_stat_recovery_prefetch
28.2.8. pg_stat_subscription
28.2.9. pg_stat_subscription_stats
28.2.10. pg_stat_ssl
28.2.11. pg_stat_gssapi
28.2.12. pg_stat_archiver
28.2.13. pg_stat_io
28.2.14. pg_stat_bgwriter
28.2.15. pg_stat_wal
28.2.16. pg_stat_database
28.2.17. pg_stat_database_conflicts
28.2.18. pg_stat_all_tables
28.2.19. pg_stat_all_indexes
28.2.20. pg_statio_all_tables
28.2.21. pg_statio_all_indexes
28.2.22. pg_statio_all_sequences
28.2.23. pg_stat_user_functions
28.2.24. pg_stat_slru
28.2.25. 统计函数

PostgreSQL累积统计系统支持收集和报告有关服务器活动的信息。目前,以磁盘块和单行项来计算对表和索引的访问次数。还会计算每个表中的总行数,以及有关每个表的 vacuum 和 analyze 操作的信息。如果启用,还会计算对用户定义函数的调用以及在每个函数中花费的总时间。

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

28.2.1. 统计信息收集配置 #

由于收集统计信息会给查询执行增加一些开销,因此可以将系统配置为收集或不收集信息。这由通常在 postgresql.conf 中设置的配置参数控制。(有关设置配置参数的详细信息,请参见第 20 章。)

参数 track_activities 启用对任何服务器进程正在执行的当前命令的监视。

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

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

参数 track_io_timing 启用对块读取和写入时间的监视。

参数 track_wal_io_timing 启用对 WAL 写入时间的监视。

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

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

28.2.2. 查看统计信息 #

表 28.1 中列出的几个预定义视图可用于显示系统的当前状态。还有几个其他视图,在 表 28.2 中列出,可用于显示累积统计信息。或者,可以使用基础累积统计信息函数构建自定义视图,如 第 28.2.25 节 中所述。

在使用累积统计信息视图和函数监视收集的数据时,重要的是要认识到信息不会立即更新。每个单独的服务器进程在进入空闲状态之前将累积的统计信息刷新到共享内存中,但不会比每 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 中看到自己的统计信息(尚未刷新到共享内存统计信息)。这些数字不会像上面所说的那样起作用;相反,它们会在整个事务中持续更新。

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

表 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_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 的每个后端(包括自动清理工作进程)提供一行,显示当前进度。请参阅 第 28.4.1 节
pg_stat_progress_create_index 为运行 CREATE INDEXREINDEX 的每个后端提供一行,显示当前进度。请参阅 第 28.4.4 节
pg_stat_progress_vacuum 为运行 VACUUM 的每个后端(包括自动清理工作进程)提供一行,显示当前进度。请参阅 第 28.4.5 节
pg_stat_progress_cluster 为运行 CLUSTERVACUUM FULL 的每个后端提供一行,显示当前进度。请参阅 第 28.4.2 节
pg_stat_progress_basebackup 为每个流式传输基础备份的 WAL 发送器进程提供一行,显示当前进度。请参阅 第 28.4.6 节
pg_stat_progress_copy 为运行 COPY 的每个后端提供一行,显示当前进度。请参阅 第 28.4.3 节

表 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_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 和相关视图中)。此视图中不存在活动行和死行数以及 vacuum 和分析操作的列。
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_stat_user_functions 每个跟踪函数的一行,显示有关该函数执行的统计信息。有关详细信息,请参见 pg_stat_user_functions
pg_stat_xact_user_functions 类似于 pg_stat_user_functions,但仅统计当前事务期间的调用(尚未 包含在 pg_stat_user_functions 中)。
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_iopg_statio_ 视图集对于确定缓冲区高速缓存的有效性很有用。它们可用于计算高速缓存命中率。请注意,虽然 PostgreSQL 的 I/O 统计信息会捕获内核被调用以执行 I/O 的大多数实例,但它们不会区分必须从磁盘获取的数据和已经驻留在内核页面高速缓存中的数据。建议用户将 PostgreSQL 统计信息视图与操作系统实用程序结合使用,以更全面地了解其数据库的 I/O 性能。

28.2.3. pg_stat_activity #

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

表 28.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 地址。如果此字段为 null,则表示客户端通过服务器机器上的 Unix 套接字连接,或者这是一个内部进程,例如自动清理。

client_hostname text

client_addr 的反向 DNS 查找报告的已连接客户端的主机名。此字段仅对 IP 连接为非 null,并且仅在启用 log_hostname 时为非 null。

client_port integer

客户端用于与此后端通信的 TCP 端口号,或者如果使用 Unix 套接字,则为 -1。如果此字段为 null,则表示这是一个内部服务器进程。

backend_start timestamp with time zone

此进程启动的时间。对于客户端后端,这是客户端连接到服务器的时间。

xact_start timestamp with time zone

此进程当前事务启动的时间,或者如果没有任何活动的事务,则为 null。如果当前查询是其事务的第一个查询,则此列等于 query_start 列。

query_start timestamp with time zone

当前活动查询启动的时间,或者如果 state 不是 active,则为上次查询启动的时间

state_change timestamp with time zone

state 上次更改的时间

wait_event_type text

后端正在等待的事件类型(如果有);否则为 NULL。请参阅 表 28.4

wait_event text

如果后端当前正在等待,则等待事件名称,否则为 NULL。请参阅 表 28.5表 28.13

状态 文本

此后端的当前总体状态。可能的值为

  • 活动:后端正在执行查询。

  • 空闲:后端正在等待新的客户端命令。

  • 事务中空闲:后端处于事务中,但当前未执行查询。

  • 事务中空闲(已中止):此状态类似于 事务中空闲,但事务中的其中一条语句导致错误。

  • 快速路径函数调用:后端正在执行快速路径函数。

  • 已禁用:如果在此后端中禁用了 track_activities,则会报告此状态。

后端 XID XID

此后端的顶级事务标识符(如果存在);请参阅 第 74.1 节

后端 xmin XID

当前后端的 xmin 范围。

查询 ID bigint

此后端最近查询的标识符。如果 状态活动,则此字段显示当前正在执行的查询的标识符。在所有其他状态中,它显示上次执行的查询的标识符。默认情况下不计算查询标识符,因此除非启用了 compute_query_id 参数或配置了计算查询标识符的第三方模块,否则此字段将为 null。

查询 文本

此后端最近查询的文本。如果 状态活动,则此字段显示当前正在执行的查询。在所有其他状态中,它显示上次执行的查询。默认情况下,查询文本在 1024 字节处被截断;可以通过参数 track_activity_query_size 更改此值。

后端类型 文本

当前后端的类型。可能类型为 autovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel workerbackground writerclient backendcheckpointerarchiverstandalone backendstartupwalreceiverwalsenderwalwriter。此外,扩展注册的后台工作进程可能具有其他类型。


注意

wait_eventstate 列是独立的。如果后端处于 active 状态,则它可能或可能不会在某个事件上 waiting。如果状态为 activewait_event 为非空,则表示正在执行查询,但该查询在系统中的某个位置被阻止。

表 28.4 等待事件类型

等待事件类型 说明
活动 服务器进程处于空闲状态。此事件类型表示进程在其主处理循环中等待活动。wait_event 将标识特定的等待点;请参阅 表 28.5
BufferPin 服务器进程正在等待对数据缓冲区的独占访问。如果另一个进程持有上一次从所讨论缓冲区读取数据的打开游标,则缓冲区 pin 等待可能会延长。请参阅 表 28.6
Client 服务器进程正在等待与用户应用程序连接的套接字上的活动。因此,服务器期望发生与其内部进程无关的事情。wait_event 将标识特定的等待点;请参阅 表 28.7
Extension 服务器进程正在等待扩展模块定义的某个条件。请参阅 表 28.8
IO 服务器进程正在等待 I/O 操作完成。wait_event 将标识特定的等待点;请参阅 表 28.9
IPC 服务器进程正在等待与另一个服务器进程进行一些交互。wait_event 将标识特定的等待点;请参阅 表 28.10
服务器进程正在等待一个重量级锁。重量级锁,又称为锁管理器锁或简称锁,主要保护 SQL 可见对象,例如表。但是,它们还用于确保某些内部操作的互斥,例如关系扩展。wait_event 将识别等待的锁类型;请参见 表 28.11
LWLock 服务器进程正在等待一个轻量级锁。大多数此类锁保护共享内存中的特定数据结构。wait_event 将包含一个标识轻量级锁用途的名称。(某些锁具有特定名称;其他锁属于一组锁,每个锁具有类似用途。)请参见 表 28.12
超时 服务器进程正在等待超时到期。wait_event 将识别特定的等待点;请参见 表 28.13

表 28.5. Activity 类型等待事件

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

表 28.6. 类型为 BufferPin 的等待事件

BufferPin 等待事件 说明
BufferPin 等待获取缓冲区的独占固定。

表 28.7. 类型为 Client 的等待事件

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

表 28.8. 类型为 Extension 的等待事件

Extension 等待事件 说明
Extension 在扩展中等待。

表 28.9. 类型为 IO 的等待事件

IO 等待事件 说明
BaseBackupRead 等待基本备份从文件中读取。
BaseBackupSync 等待基本备份写入的数据到达持久性存储。
BaseBackupWrite 等待基本备份写入文件。
BufFileRead 等待从缓冲文件中读取。
BufFileTruncate 等待缓冲文件被截断。
BufFileWrite 等待写入缓冲文件。
ControlFileRead 等待从 pg_control 文件读取。
ControlFileSync 等待 pg_control 文件到达持久性存储。
ControlFileSyncUpdate 等待对 pg_control 文件的更新到达持久性存储。
ControlFileWrite 等待写入 pg_control 文件。
ControlFileWriteUpdate 等待写入更新 pg_control 文件。
CopyFileRead 在文件复制操作期间等待读取。
CopyFileWrite 在文件复制操作期间等待写入。
DSMAllocate 等待分配动态共享内存段。
DSMFillZeroWrite 等待用零填充动态共享内存后备文件。
DataFileExtend 等待关系数据文件扩展。
DataFileFlush 等待关系数据文件到达持久存储。
DataFileImmediateSync 等待关系数据文件立即同步到持久存储。
DataFilePrefetch 等待从关系数据文件异步预取。
DataFileRead 等待从关系数据文件读取。
DataFileSync 等待关系数据文件中的更改到达持久存储。
DataFileTruncate 等待关系数据文件被截断。
DataFileWrite 等待写入关系数据文件。
LockFileAddToDataDirRead 等待在将行添加到数据目录锁定文件时读取。
LockFileAddToDataDirSync 等待在将行添加到数据目录锁定文件时数据到达持久存储。
LockFileAddToDataDirWrite 等待在将行添加到数据目录锁定文件时写入。
LockFileCreateRead 等待在创建数据目录锁定文件时读取。
LockFileCreateSync 等待在创建数据目录锁定文件时数据到达持久存储。
LockFileCreateWrite 等待在创建数据目录锁定文件时写入。
LockFileReCheckDataDirRead 等待在重新检查数据目录锁定文件时读取。
LogicalRewriteCheckpointSync 等待在检查点期间逻辑重写映射到达持久存储。
LogicalRewriteMappingSync 等待在逻辑重写期间映射数据到达持久存储。
LogicalRewriteMappingWrite 等待在逻辑重写期间写入映射数据。
LogicalRewriteSync 等待逻辑重写映射到达持久存储。
LogicalRewriteTruncate 等待在逻辑重写期间截断映射数据。
LogicalRewriteWrite 等待写入逻辑重写映射。
RelationMapRead 等待读取关系映射文件。
RelationMapReplace 等待持久替换关系映射文件。
RelationMapWrite 等待写入关系映射文件。
ReorderBufferRead 等待在重新排序缓冲区管理期间读取。
ReorderBufferWrite 等待在重新排序缓冲区管理期间写入。
重新排序逻辑映射读取 在重新排序缓冲区管理期间等待读取逻辑映射。
复制槽读取 等待从复制槽控制文件读取。
复制槽恢复同步 在将复制槽控制文件恢复到内存时,等待该文件达到持久存储。
复制槽同步 等待复制槽控制文件达到持久存储。
复制槽写入 等待写入复制槽控制文件。
SLRU 刷新同步 在检查点或数据库关闭期间,等待 SLRU 数据达到持久存储。
SLRU 读取 等待读取 SLRU 页。
SLRU 同步 在页面写入后,等待 SLRU 数据达到持久存储。
SLRU 写入 等待写入 SLRU 页。
快照构建读取 等待读取序列化的历史目录快照。
快照构建同步 等待序列化的历史目录快照达到持久存储。
快照构建写入 等待写入序列化的历史目录快照。
时间线历史文件同步 等待通过流复制接收的时间线历史文件达到持久存储。
时间线历史文件写入 等待通过流复制接收的时间线历史文件写入。
时间线历史读取 等待读取时间线历史文件。
时间线历史同步 等待新创建的时间线历史文件达到持久存储。
时间线历史写入 等待写入新创建的时间线历史文件。
两阶段文件读取 等待读取两阶段状态文件。
两阶段文件同步 等待两阶段状态文件达到持久存储。
两阶段文件写入 等待写入两阶段状态文件。
版本文件同步 在创建数据库时,等待版本文件达到持久存储。
版本文件写入 在创建数据库时,等待写入版本文件。
WAL 引导同步 在引导期间,等待 WAL 达到持久存储。
WAL 引导写入 在引导期间,等待写入 WAL 页。
WAL 复制读取 等待在复制现有 WAL 段时创建新 WAL 段的读取操作。
WALCopySync 等待通过复制现有 WAL 段创建的新 WAL 段到达持久性存储。
WALCopyWrite 等待在复制现有 WAL 段时创建新 WAL 段的写入操作。
WALInitSync 等待新初始化的 WAL 文件到达持久性存储。
WALInitWrite 等待在初始化新 WAL 文件时的写入操作。
WALRead 等待从 WAL 文件读取。
WALSenderTimelineHistoryRead 等待在 walsender 时间线命令期间从时间线历史文件读取。
WALSync 等待 WAL 文件到达持久性存储。
WALSyncMethodAssign 等待在分配新的 WAL 同步方法时数据到达持久性存储。
WALWrite 等待写入 WAL 文件。

表 28.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 等待其他并行哈希参与者完成外部关系的分区。
HashGrowBatchesDecide 等待选出并行哈希参与者以决定未来的批处理增长。
HashGrowBatchesElect 等待选出并行哈希参与者以分配更多批处理。
HashGrowBatchesFinish 等待选出的并行哈希参与者决定未来的批处理增长。
HashGrowBatchesReallocate 等待选出的并行哈希参与者分配更多批处理。
HashGrowBatchesRepartition 等待其他并行哈希参与者完成重新分区。
HashGrowBucketsElect 等待选出并行哈希参与者以分配更多存储桶。
HashGrowBucketsReallocate 等待选出的并行哈希参与者完成分配更多存储桶。
HashGrowBucketsReinsert 等待其他并行哈希参与者完成将元组插入新存储桶。
LogicalApplySendData 等待逻辑复制领导应用进程向并行应用进程发送数据。
LogicalParallelApplyStateChange 等待逻辑复制并行应用进程更改状态。
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 等待组长在并行操作结束时更新事务状态。

表 28.11. 类型为 Lock 的等待事件

Lock 等待事件 说明
advisory 等待获取建议用户锁。
applytransaction 等待获取逻辑复制订阅者应用的远程事务的锁。
extend 等待扩展关系。
frozenid 等待更新 pg_database.datfrozenxidpg_database.datminmxid
object 等待获取非关系数据库对象的锁。
page 等待获取关系页面的锁。
relation 等待获取关系的锁。
spectoken 等待获取一个推测插入锁。
事务 ID 等待事务完成。
元组 等待获取元组上的锁。
用户锁 等待获取用户锁。
虚拟事务 ID 等待获取虚拟事务 ID 锁;请参见第 74.1 节

表 28.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 等待读取或更新有关重量级锁的信息。
LogicalRepLauncherDSA 等待访问逻辑复制启动器的动态共享内存分配器。
LogicalRepLauncherHash 等待访问逻辑复制启动器的共享哈希表。
LogicalRepWorker 等待读取或更新逻辑复制工作程序的状态。
MultiXactGen 等待读取或更新共享的多事务状态。
MultiXactMemberBuffer 等待多事务成员 SLRU 缓冲区的 I/O。
MultiXactMemberSLRU 等待访问多事务成员 SLRU 缓存。
MultiXactOffsetBuffer 等待多事务偏移量 SLRU 缓冲区的 I/O。
MultiXactOffsetSLRU 等待访问多事务偏移量 SLRU 缓存。
MultiXactTruncation 等待读取或截断多事务信息。
NotifyBuffer 等待 NOTIFY 消息 SLRU 缓冲区的 I/O。
NotifyQueue 等待读取或更新 NOTIFY 消息。
NotifyQueueTail 等待更新 NOTIFY 消息存储的限制。
NotifySLRU 等待访问 NOTIFY 消息 SLRU 缓存。
OidGen 等待分配新的 OID。
OldSnapshotTimeMap 等待读取或更新旧快照控制信息。
ParallelAppend 等待在并行追加计划执行期间选择下一个子计划。
ParallelHashJoin 等待在并行哈希连接计划执行期间同步工作进程。
ParallelQueryDSA 等待并行查询动态共享内存分配。
PerSessionDSA 等待并行查询动态共享内存分配。
PerSessionRecordType 等待访问并行查询中有关复合类型的信息。
PerSessionRecordTypmod 等待访问并行查询中有关标识匿名记录类型的类型修改符的信息。
PerXactPredicateList 等待在并行查询期间访问当前可序列化事务持有的谓词锁列表。
PgStatsData 等待共享内存统计数据访问
PgStatsDSA 等待统计动态共享内存分配器访问
PgStatsHash 等待统计共享内存哈希表访问
PredicateLockManager 等待访问可序列化事务使用的谓词锁信息。
ProcArray 等待访问共享的每个进程数据结构(通常,获取快照或报告会话的事务 ID)。
RelationMapping 等待读取或更新 pg_filenode.map 文件(用于跟踪某些系统目录的文件节点分配)。
RelCacheInit 等待读取或更新 pg_internal.init 关系缓存初始化文件。
ReplicationOrigin 等待创建、删除或使用复制源。
ReplicationOriginState 等待读取或更新一个复制源的进度。
ReplicationSlotAllocation 等待分配或释放复制槽。
ReplicationSlotControl 等待读取或更新复制槽状态。
ReplicationSlotIO 等待复制槽上的 I/O。
SerialBuffer 等待可序列化事务冲突 SLRU 缓冲区的 I/O。
SerializableFinishedList 等待访问已完成的可序列化事务列表。
SerializablePredicateList 等待访问可序列化事务持有的谓词锁列表。
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。

注意

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

表 28.13. Timeout 类型等待事件

Timeout 等待事件 说明
BaseBackupThrottle 在限制活动时,在基础备份期间等待。
CheckpointWriteDelay 在执行检查点时,在写入之间等待。
PgSleep 由于调用 pg_sleep 或同级函数而等待。
RecoveryApplyDelay 由于延迟设置,在恢复期间等待应用 WAL。
RecoveryRetrieveRetryInterval 在恢复期间,当 WAL 数据从任何来源(pg_wal、存档或流)不可用时等待。
RegisterSyncRequest 在向检查点发送同步请求时等待,因为请求队列已满。
SpinDelay 在获取争用的自旋锁时等待。
VacuumDelay 在基于成本的 Vacuum 延迟点等待。
VacuumTruncate 等待获取排他锁以截断 Vacuum 表末尾的任何空页面。

以下是查看等待事件的示例

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)

28.2.4. pg_stat_replication #

pg_stat_replication 视图将包含每个 WAL 发送进程一行,显示有关复制到该发送进程连接的备用服务器的统计信息。仅列出直接连接的备用服务器;没有关于下游备用服务器的信息。

表 28.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 连接为非 null,并且仅在启用 log_hostname 时为非 null。

client_port integer

客户端用于与此 WAL 发送方通信的 TCP 端口号,或如果使用 Unix 套接字,则为 -1

backend_start timestamp with time zone

此进程启动的时间,即客户端连接到此 WAL 发送方的时间

后端 xmin XID

此备用服务器的 xmin 水平,由 hot_standby_feedback 报告。

状态 文本

当前 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 和收到此备用服务器已写入(但尚未刷新或应用)它的通知之间经过的时间。如果此服务器配置为同步备用服务器,则可用于衡量在提交时 synchronous_commit 级别 remote_write 产生的延迟。

flush_lag interval

在本地刷新最近的 WAL 与收到通知表明此备用服务器已写入并刷新它(但尚未应用它)之间经过的时间。如果此服务器配置为同步备用,则可用于衡量在提交期间 synchronous_commit 级别 on 产生的延迟。

replay_lag interval

在本地刷新最近的 WAL 与收到通知表明此备用服务器已写入、刷新并应用它之间经过的时间。如果此服务器配置为同步备用,则可用于衡量在提交期间 synchronous_commit 级别 remote_apply 产生的延迟。

sync_priority integer

在基于优先级的同步复制中,此备用服务器作为同步备用被选中的优先级。在基于法定人数的同步复制中,此项无效。

sync_state text

此备用服务器的同步状态。可能的值为

  • async:此备用服务器是异步的。

  • potential:此备用服务器现在是异步的,但如果当前同步服务器之一发生故障,则有可能变为同步的。

  • sync:此备用服务器是同步的。

  • quorum:此备用服务器被视为法定人数备用的候选者。

reply_time timestamp with time zone

从备用服务器收到的上次回复消息的发送时间


pg_stat_replication 视图中报告的滞后时间是最近的 WAL 被写入、刷新和重放以及发送方知道它所花费的时间的测量值。如果远程服务器配置为同步备用,则这些时间表示每个同步提交级别引入的(或将引入的)提交延迟。对于异步备用,replay_lag 列近似于最近的事务对查询可见之前的延迟。如果备用服务器已完全赶上发送服务器并且没有更多 WAL 活动,则最近测量的滞后时间将继续显示一小段时间,然后显示 NULL。

滞后时间自动适用于物理复制。逻辑解码插件可以选择发出跟踪消息;如果它们不发出,则跟踪机制将仅显示 NULL 滞后。

注意

报告的滞后时间不是对备用服务器赶上发送服务器所需时间的预测,假设重放的当前速率。这样的系统在生成新的 WAL 时会显示类似的时间,但在发送服务器变为闲置时会不同。特别是,当备用服务器已完全赶上时,pg_stat_replication 显示的是写入、刷新和重放最近报告的 WAL 位置所需的时间,而不是某些用户可能预期的零。这与衡量最近写入事务的同步提交和事务可见性延迟的目标是一致的。为了减少对预期不同滞后模型的用户造成的困惑,在完全重放的闲置系统上,滞后列会在短时间后变为 NULL。监控系统应选择将其表示为缺失数据、零或继续显示最后已知值。

28.2.5. pg_stat_replication_slots #

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

表 28.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

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


28.2.6. pg_stat_wal_receiver #

pg_stat_wal_receiver 视图将只包含一行,显示来自该接收器的连接服务器的 WAL 接收器的统计信息。

表 28.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 接收器使用的连接字符串,其中安全敏感字段已混淆。


28.2.7. pg_stat_recovery_prefetch #

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

表 28.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

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


28.2.8. pg_stat_subscription #

表 28.18. pg_stat_subscription 视图

列类型

说明

subid oid

订阅的 OID

subname name

订阅的名称

pid integer

订阅工作进程的进程 ID

leader_pid integer

如果此进程是并行应用工作进程,则为领导应用工作进程的进程 ID;如果此进程是领导应用工作进程或同步工作进程,则为 NULL

relid oid

工作进程正在同步的关系的 OID;对于领导应用工作进程和并行应用工作进程,为 NULL

received_lsn pg_lsn

收到的最后一个预写日志位置,此字段的初始值为 0;对于并行应用工作进程,为 NULL

last_msg_send_time timestamp with time zone

从原始 WAL 发送方收到的最后一条消息的发送时间;对于并行应用工作进程,为 NULL

last_msg_receipt_time timestamp with time zone

从原始 WAL 发送方收到的最后一条消息的接收时间;对于并行应用工作进程,为 NULL

latest_end_lsn pg_lsn

报告给原始 WAL 发送方的最后一个预写日志位置;对于并行应用工作进程,为 NULL

latest_end_time timestamp with time zone

报告给原始 WAL 发送方的最后一个预写日志位置的时间;对于并行应用工作进程,为 NULL


28.2.9. pg_stat_subscription_stats #

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

表 28.19. pg_stat_subscription_stats 视图

列类型

说明

subid oid

订阅的 OID

subname name

订阅的名称

apply_error_count bigint

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

sync_error_count bigint

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

stats_reset timestamp with time zone

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


28.2.10. pg_stat_ssl #

对于每个后端或 WAL 发送者进程,pg_stat_ssl 视图将包含一行,显示此连接上 SSL 使用情况的统计信息。它可以连接到 pg_stat_activitypg_stat_replication 上的 pid 列,以获取有关连接的更多详细信息。

表 28.20. pg_stat_ssl 视图

列类型

说明

pid integer

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

ssl boolean

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

version text

正在使用的 SSL 版本,如果此连接上未使用 SSL,则为 NULL

cipher text

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

bits integer

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

client_dn text

所用客户端证书中的专有名称 (DN) 字段,如果未提供客户端证书或此连接上未使用 SSL,则为 NULL。如果 DN 字段长度超过 NAMEDATALEN(在标准构建中为 64 个字符),则此字段将被截断。

client_serial numeric

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

issuer_dn text

客户端证书颁发者的 DN,如果未提供客户端证书或此连接上未使用 SSL,则为 NULL。此字段的截断方式与 client_dn 类似。


28.2.11. pg_stat_gssapi #

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

表 28.21. pg_stat_gssapi 视图

列类型

说明

pid integer

后端的进程 ID

gss_authenticated boolean

如果此连接使用 GSSAPI 身份验证,则为 True

principal text

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

encrypted boolean

如果此连接上正在使用 GSSAPI 加密,则为 True

credentials_delegated boolean

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


28.2.12. pg_stat_archiver #

视图 pg_stat_archiver 将始终有一行,其中包含有关集群归档器进程的数据。

表 28.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 的文件也已成功归档。

28.2.13. pg_stat_io #

视图 pg_stat_io 将包含后端类型、目标 I/O 对象和 I/O 上下文的每种组合的一行,显示集群范围的 I/O 统计信息。不合理的组合将被忽略。

目前,正在跟踪关系(例如表、索引)上的 I/O。但是,目前未跟踪绕过共享缓冲区的关联 I/O(例如,将表从一个表空间移动到另一个表空间时)。

表 28.23. pg_stat_io 视图

列类型

说明

后端类型 文本

后端类型(例如后台工作程序、自动清理工作程序)。有关 backend_type 的详细信息,请参阅 pg_stat_activity

object text

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

  • relation:永久关系。

  • temp relation:临时关系。

context text

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

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

  • vacuum:在清理和分析永久关系时在共享缓冲区之外执行的 I/O 操作。临时表清理使用与其他临时表 IO 操作相同的本地缓冲池,并在 context normal 中进行跟踪。

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

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

reads bigint

读取操作的数量,每个操作的大小在 op_bytes 中指定。

read_time double precision

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

writes bigint

写入操作的数量,每个操作的大小在 op_bytes 中指定。

write_time 双精度

以毫秒为单位的写入操作所花费的时间(如果 track_io_timing 已启用,否则为零)

writebacks bigint

进程请求内核写入到永久存储的 op_bytes 大小的单位数。

writeback_time 双精度

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

extends bigint

关系扩展操作数,每个大小均在 op_bytes 中指定。

extend_time 双精度

以毫秒为单位的扩展操作所花费的时间(如果 track_io_timing 已启用,否则为零)

op_bytes bigint

每次 I/O 读、写或扩展的字节数。

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

hits bigint

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

evictions bigint

从共享或本地缓冲区写出块的次数,以便使其可用于其他用途。

context normal 中,这会计算从缓冲区中驱逐块并用另一个块替换的次数。在 context bulkwritebulkreadvacuum 中,这会计算从共享缓冲区中驱逐块的次数,以便将共享缓冲区添加到单独的、大小受限的环形缓冲区中,以用于批量 I/O 操作。

reuses bigint

bulkreadbulkwritevacuum context 中,作为 I/O 操作的一部分,在共享缓冲区之外的尺寸受限环形缓冲区中重复使用现有缓冲区的次数。

fsyncs bigint

fsync 调用的次数。这些仅在 context normal 中进行跟踪。

fsync_time double precision

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

stats_reset timestamp with time zone

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


某些后端类型从不针对某些 I/O 对象和/或在某些 I/O 上下文中执行 I/O 操作。这些行从视图中省略。例如,检查点程序不会对临时表进行检查点,因此对于 backend_type checkpointerobject temp relation,不会有行。

此外,某些后端类型或在某些 I/O 对象和/或在某些 I/O 上下文中永远不会执行某些 I/O 操作。这些单元格将为 NULL。例如,临时表不会 fsync,因此对于 object temp relationfsyncs 将为 NULL。此外,后台写入程序不执行读取,因此对于 backend_type background writer 的行,reads 将为 NULL。

pg_stat_io 可用于告知数据库调优。例如

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

  • 客户端后端依靠检查点程序来确保数据持久存储到永久存储。由 client backend 执行大量 fsyncs 可能表明共享缓冲区或检查点程序配置错误。有关配置检查点程序的更多信息,请参见 第 30.5 节

  • 通常,客户端后端应该能够依靠检查点程序和后台写入程序等辅助进程尽可能多地写出脏数据。由客户端后端执行大量写入可能表明共享缓冲区或检查点程序配置错误。有关配置检查点程序的更多信息,请参见 第 30.5 节

注意

跟踪 I/O 时间的列仅在启用 track_io_timing 时才为非零。如果自上次统计信息重置以来一直未启用 track_io_timing,则用户在引用这些列及其相应的 IO 操作时应小心。

28.2.14. pg_stat_bgwriter #

pg_stat_bgwriter 视图始终只有一行,其中包含集群的全局数据。

表 28.24. pg_stat_bgwriter 视图

列类型

说明

checkpoints_timed bigint

已执行的计划检查点数量

checkpoints_req bigint

已执行的请求检查点数量

checkpoint_write_time double precision

在检查点处理部分(将文件写入磁盘)中花费的总时间(以毫秒为单位)

checkpoint_sync_time double precision

在检查点处理部分(将文件同步到磁盘)中花费的总时间(以毫秒为单位)

buffers_checkpoint bigint

检查点期间写入的缓冲区数量

buffers_clean bigint

后台写入程序写入的缓冲区数量

maxwritten_clean bigint

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

buffers_backend bigint

后台直接写入的缓冲区数量

buffers_backend_fsync bigint

后台必须执行其自己的 fsync 调用的次数(通常,即使后台执行自己的写入,后台写入程序也会处理这些调用)

buffers_alloc bigint

已分配的缓冲区数量

stats_reset timestamp with time zone

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


28.2.15. pg_stat_wal #

pg_stat_wal 视图始终只有一行,其中包含集群 WAL 活动的数据。

表 28.25. pg_stat_wal 视图

列类型

说明

wal_records bigint

生成的 WAL 记录总数

wal_fpi bigint

已生成的 WAL 全页映像总数

wal_bytes numeric

以字节为单位生成的 WAL 总量

wal_buffers_full bigint

由于 WAL 缓冲区已满,将 WAL 数据写入磁盘的次数

wal_write bigint

通过 XLogWrite 请求将 WAL 缓冲区写入磁盘的次数。有关内部 WAL 函数 XLogWrite 的更多信息,请参见 第 30.5 节

wal_sync bigint

通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘的次数(如果 fsyncon,并且 wal_sync_methodfdatasyncfsyncfsync_writethrough,否则为零)。有关内部 WAL 函数 issue_xlog_fsync 的更多信息,请参见 第 30.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_timing 已启用,fsyncon,并且 wal_sync_methodfdatasyncfsyncfsync_writethrough,否则为零)。

stats_reset timestamp with time zone

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


28.2.16. pg_stat_database #

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

表 28.26.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,否则为零)

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

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


28.2.17. pg_stat_database_conflicts #

视图 pg_stat_database_conflicts 将包含每个数据库的一行,显示由于与备用服务器上的恢复冲突而发生的查询取消的数据库范围统计信息。此视图将仅包含备用服务器上的信息,因为冲突不会在主服务器上发生。

表 28.27. 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 过低而取消的此数据库中逻辑槽的使用数


28.2.18. pg_stat_all_tables #

视图 pg_stat_all_tables 将包含当前数据库中每个表的一行(包括 TOAST 表),显示对该特定表的访问统计信息。视图 pg_stat_user_tablespg_stat_sys_tables 包含相同的信息,但经过筛选,分别仅显示用户表和系统表。

表 28.28. 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

更新的总行数。(这包括 n_tup_hot_updn_tup_newpage_upd 中计算的行更新,以及剩余的非-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

自上次对该表进行 vacuum 操作以来插入的行数估计

last_vacuum timestamp with time zone

上次手动对该表进行 vacuum 操作的时间(不包括 VACUUM FULL

last_autovacuum timestamp with time zone

上次由 autovacuum 守护进程对该表进行 vacuum 操作的时间

last_analyze timestamp with time zone

上次手动分析此表的时刻

last_autoanalyze 带时区的 timestamp

上次由自动清理守护进程分析此表的时刻

vacuum_count bigint

手动清理此表的次数(不包括 VACUUM FULL

autovacuum_count bigint

自动清理守护进程清理此表的次数

analyze_count bigint

手动分析此表的次数

autoanalyze_count bigint

自动清理守护进程分析此表的次数


28.2.19. pg_stat_all_indexes #

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

表 28.29. 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。优化器还会访问索引以检查提供的常量,其值超出优化器统计信息的记录范围,因为优化器统计信息可能已过时。

注意

即使不使用位图扫描,idx_tup_readidx_tup_fetch 计数也可能不同,因为 idx_tup_read 计数从索引中检索的索引条目,而 idx_tup_fetch 计数从表中获取的活动行。如果使用索引获取任何已删除或尚未提交的行,或者通过仅索引扫描避免任何堆获取,则后者将更少。

28.2.20. pg_statio_all_tables #

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

表 28.30. 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 表索引(如果有)中的缓冲区命中数


28.2.21. pg_statio_all_indexes #

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

表 28.31.pg_statio_all_indexes 视图

列类型

说明

relid oid

此索引所属表的 OID

indexrelid oid

此索引的 OID

schemaname name

此索引所在的架构的名称

relname name

此索引所属表的名称

indexrelname name

此索引的名称

idx_blks_read bigint

从该索引读取的磁盘块数

idx_blks_hit bigint

该索引中的缓冲区命中数


28.2.22.pg_statio_all_sequences #

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

表 28.32.pg_statio_all_sequences 视图

列类型

说明

relid oid

序列的 OID

schemaname name

此序列所在的模式的名称

relname name

此序列的名称

blks_read bigint

从该序列读取的磁盘块数

blks_hit bigint

该序列中的缓冲区命中数


28.2.23.pg_stat_user_functions #

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

表 28.33.pg_stat_user_functions 视图

列类型

说明

funcid oid

函数的 OID

schemaname name

此函数所在的模式的名称

funcname name

此函数的名称

calls bigint

此函数被调用的次数

total_time double precision

在此函数和它调用的所有其他函数中花费的总时间(以毫秒为单位)

self_time double precision

在此函数本身花费的总时间(不包括它调用的其他函数),以毫秒为单位


28.2.24.pg_stat_slru #

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

表 28.34.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

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


28.2.25. 统计信息函数 #

可以通过编写使用与上面显示的标准视图所使用的相同底层统计信息访问函数的查询来设置查看统计信息的其他方式。有关函数名称等详细信息,请参阅标准视图的定义。(例如,在 psql 中,您可以发出 \d+ pg_stat_activity。)用于每个数据库统计信息的访问函数将数据库 OID 作为参数,以识别要报告的数据库。每个表和每个索引函数将表或索引 OID 作为参数。用于每个函数统计信息的函数将函数 OID 作为参数。请注意,只能使用这些函数查看当前数据库中的表、索引和函数。

与累积统计信息系统相关的其他函数列在 表 28.35 中。

表 28.35. 其他统计信息函数

函数

说明

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_consistency 设置为 snapshot,则在事务中首次访问累积统计信息时获取快照

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 视图中显示的所有计数器;io,用于重置 pg_stat_io 视图中显示的所有计数器;wal,用于重置 pg_stat_wal 视图中显示的所有计数器;或 recovery_prefetch,用于重置 pg_stat_recovery_prefetch 视图中显示的所有计数器。

默认情况下,此函数仅限超级用户使用,但可以向其他用户授予 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,则重置 pg_stat_slru 视图中显示的所有 SLRU 缓存的所有计数器。参数可以是 CommitTsMultiXactMemberMultiXactOffsetNotifySerialSubtransXact,以仅重置该条目的计数器。如果参数是 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 权限以运行该函数。


警告

使用 pg_stat_reset() 还会重置自动清理用来确定何时触发清理或分析的计数器。重置这些计数器可能导致自动清理无法执行必要的工作,从而导致表膨胀或表统计信息过时等问题。建议在重置统计信息后对整个数据库执行 ANALYZE

pg_stat_get_activitypg_stat_activity 视图的基础函数,返回一组包含每个后端进程所有可用信息的记录。有时,获取此信息的子集可能更方便。在这种情况下,可以使用另一组按后端统计访问函数;这些函数显示在 表 28.36 中。这些访问函数使用会话的后端 ID 号,这是一个与任何并发会话的后端 ID 不同的较小的正整数,尽管会话的 ID 可以在退出后立即回收。后端 ID 用于识别会话的临时架构(如果有)。函数 pg_stat_get_backend_idset 提供了一种方便的方法来列出所有活动后端的 ID 号,以便调用这些函数。例如,要显示所有后端的 PID 和当前查询

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

表 28.36. 按后端统计函数

函数

说明

pg_stat_get_backend_activity ( integer ) → text

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

pg_stat_get_backend_activity_start ( integer ) → timestamp with time zone

返回后端最近查询的启动时间。

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_idset () → setof integer

返回当前活动的后端 ID 号集。

pg_stat_get_backend_pid ( integer ) → integer

返回此后端的进程 ID。

pg_stat_get_backend_start ( integer ) → timestamp with time zone

返回此进程启动的时间。

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 ( integer ) → text

如果此后端当前正在等待,则返回等待事件名称,否则返回 NULL。请参见 表 28.5表 28.13

pg_stat_get_backend_wait_event_type ( integer ) → text

如果此后端当前正在等待,则返回等待事件类型名称,否则返回 NULL。有关详细信息,请参见 表 28.4

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

返回后端当前事务启动的时间。