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

27.2 累积统计信息系统 #

27.2.1 统计信息收集配置
27.2.2 查看统计信息
27.2.3 pg_stat_activity
27.2.4 pg_stat_replication
27.2.5 pg_stat_replication_slots
27.2.6 pg_stat_wal_receiver
27.2.7 pg_stat_recovery_prefetch
27.2.8 pg_stat_subscription
27.2.9 pg_stat_subscription_stats
27.2.10 pg_stat_ssl
27.2.11 pg_stat_gssapi
27.2.12 pg_stat_archiver
27.2.13 pg_stat_io
27.2.14 pg_stat_bgwriter
27.2.15 pg_stat_checkpointer
27.2.16 pg_stat_wal
27.2.17. pg_stat_database
27.2.18. pg_stat_database_conflicts
27.2.19. pg_stat_all_tables
27.2.20. pg_stat_all_indexes
27.2.21. pg_statio_all_tables
27.2.22. pg_statio_all_indexes
27.2.23. pg_statio_all_sequences
27.2.24. pg_stat_user_functions
27.2.25. pg_stat_slru
27.2.26. 统计信息函数

PostgreSQL累积统计信息系统支持收集和报告服务器活动信息。当前,会统计磁盘块和单独行两种方式对表和索引的访问信息。还会统计每个表中的总行数,以及每个表的 vacuum 和 analyze 操作信息。如果已启用,还会统计用户定义函数的调用次数和每个函数的总耗时。

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

27.2.1. 统计信息收集配置 #

由于统计信息收集会在查询执行中增加一些开销,因此可以配置系统收集或不收集信息。这是由通常在 postgresql.conf 中设置的配置参数控制的。(有关设置配置参数的详细信息,请参见第 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. 查看统计信息 #

一些预定义视图(在 表 27.1 中列出)会显示当前系统状态。还有其他一些视图(在 表 27.2 中列出)可以显示累积的统计信息。另外,可以使用基础累积统计信息函数创建自定义视图,如 第 27.2.26 节 中所讨论的内容。

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

另一重要点是当要求一个服务器进程显示任一累计统计时,在默认配置中,访问过值将会一直缓存在其当前事务的结束为止。因此,只要持续当前事务,统计将会显示静态信息。类似的,所有会话当前查询的信息将在事务中第一次被请求时收集,以及该相同的信息将会在整个事务中显示。这是一个特性,不是一个 Bug,因为它允许你在统计上执行多个查询,并在不用担心底下的序号发生改变的情况下关联这些结果。在互动分析统计信息时,或使用成本昂贵的查询时,个别统计访问的时间差会导致缓存在统计信息中的显著偏差。为了最小化偏差,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 中,查看其自身统计信息(尚未刷新到该共享内存统计中)。这些数字没有按照上面阐述的那样起作用,而是它们在整个事务进行过程中持续更新。

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

表 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 的后端(包括自动真空工作进程)一行,显示当前的进度。请参阅 第 27.4.1 节
pg_stat_progress_create_index 每个运行 CREATE INDEXREINDEX 的后端一行,显示当前的进度。请参阅 第 27.4.4 节
pg_stat_progress_vacuum 展示当前进度,针对每个运行 VACUUM 的后端(包括自动真空工作进程)。请参见 第 27.4.5 节
pg_stat_progress_cluster 展示当前进度,针对每个运行 CLUSTERVACUUM FULL 的后端。请参见 第 27.4.2 节
pg_stat_progress_basebackup 展示当前进度,针对每个流式传输备用数据库的 WAL 发送器进程。请参见 第 27.4.6 节
pg_stat_progress_copy 展示当前进度,针对每个运行 COPY 的后端。请参见 第 27.4.3 节

表 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 和相关视图中)。此视图中不显示实际行数和已移除行数以及 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 性能。

27.2.3. pg_stat_activity #

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

表 27.3. pg_stat_activity视图

列类型

描述

datid oid

此后端连接到的数据库的 OID

datname name

此后端连接到的数据库的名称

pid integer

此后端的进程 ID

leader_pid integer

如果此进程是并行查询工作线程,则并行组负责人的进程 ID;如果此进程是并行应用工作线程,则负责人的进程 ID。NULL表示此进程是并行组负责人或负责人应用工作线程,或者不参与任何并行操作。

usesysid oid

登录此后端的用户的 OID

用户名 名称

登录此后端的用户的名称

应用程序名称 文本

连接到此后端的应用程序的名称

客户端地址 inet

连接到此后端的客户端的 IP 地址。如果该字段为空,则表示客户端通过服务器机器上的 Unix 套接字连接或者这是一个内部进程,例如自动真空。

客户端主机名 文本

连接客户端的主机名,由 client_addr 的反向 DNS 查找报告。该字段仅对 IP 连接有效,并且仅当 log_hostname 启用时有效。

客户端端口 整数

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

后端开始 带时区的 time stamp

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

事务开始 带时区的 time stamp

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

查询开始 带时区的 time stamp

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

状态更改 带时区的 time stamp

上次更改 state 的时间

等待事件类型 文本

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

等待事件 文本

如果后端当前正在等待,则为等待事件名称,否则为 NULL。参见 表 27.5表 27.13

状态 文本

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

  • active:后端正在执行查询。

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

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

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

  • fastpath 函数调用:后端正在执行 fast-path 函数。

  • 禁用:如果track_activities在此后台中处于禁用状态,则会报告该状态。

backend_xid xid

如有,此后端的顶级事务标识符;请参阅第 66.1 节

backend_xmin xid

当前后端的xmin范围。

query_id bigint

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

query text

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

backend_type text

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


注意

wait_eventstate 列是独立的。如果后端处于 active 状态,它可能正在 waiting 某个事件,也可能没有。如果状态为 active,而 wait_event 非空,则表示正在执行查询,但它在系统中的某个地方遭到阻止。

表 27.4. 等待事件类型

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

表 27.5。 Activity 类型等待事件

Activity 等待事件 描述
ArchiverMain 正在归档程序进程的主循环中等待。
AutovacuumMain 正在自动清理启动程序进程的主循环中等待。
BgwriterHibernate 正在后台写入程序进程中等待,休眠中。
BgwriterMain 正在后台写入程序进程的主循环中等待。
CheckpointerMain 正在检查点进程的主循环中等待。
LogicalApplyMain 正在逻辑复制应用进程的主循环中等待。
LogicalLauncherMain 正在逻辑复制启动程序进程的主循环中等待。
LogicalParallelApplyMain 正在逻辑复制并行应用进程的主循环中等待。
RecoveryWalStream 正在 WAL 到达的启动进程主循环中等待,正在流式恢复期间。
ReplicationSlotsyncMain 正在槽同步工作程序的主循环中等待。
ReplicationSlotsyncShutdown 正在等待槽同步工作程序关闭。
SysloggerMain 正在 syslogger 进程的主循环中等待。
WalReceiverMain 正在 WAL 接收器进程的主循环中等待。
WalSenderMain 正在 WAL 发送器进程的主循环中等待。
WalSummarizerWal 正在 WAL 摘要程序中等待生成更多 WAL。
WalWriterMain 正在 WAL 写入程序进程的主循环中等待。

表 27.6。 Bufferpin 类型等待事件

BufferPin 等待事件 描述
BufferPin 正在等待获取缓冲区的独占固定。

表 27.7。 Client 类型等待事件

Client 等待事件 描述
ClientRead 正在等待从客户端读取数据。
ClientWrite 正在等待向客户端写入数据。
GssOpenServer 正在等待从客户端读取数据,同时建立 GSSAPI 会话。
LibpqwalreceiverConnect 在 WAL 接收器中等待建立与远程服务器的连接。
LibpqwalreceiverReceive 在 WAL 接收器中等待接收远程服务器的数据。
SslOpenServer 尝试连接时等待 SSL。
WaitForStandbyConfirmation 等待物理备用服务器接收和刷新 WAL。
WalSenderWaitForWal 等待 WalSender 进程中的 WAL 被刷新。
WalSenderWriteData 在 WalSender 进程中处理 WAL 接收器的答复时,等待任一活动。

表 27.8。类型为 Extension 的等待事件

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

表 27.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 等待在文件复制操作期间进行写入。
DataFileExtend 等待关系数据文件被扩展。
DataFileFlush 等待关系数据文件达到持久状态。
DataFileImmediateSync 等待关系数据文件立即同步到持久存储区。
DataFilePrefetch 等待从关系数据文件进行异步预取。
DataFileRead 等待从关系数据文件进行读取。
DataFileSync 等待关系数据文件的更改达到持久状态。
DataFileTruncate 等待关系数据文件被截断。
DataFileWrite 等待写入关系数据文件。
DsmAllocate 等待分配动态共享内存段。
DsmFillZeroWrite 等待使用零填充动态共享内存备份文件。
LockFileAddtodatadirRead 等待在数据目录锁定文件中添加行时进行读取。
LockFileAddtodatadirSync 在数据目录锁定文件中添加行时等待数据达到持久状态。
LockFileAddtodatadirWrite 等待在数据目录锁定文件中添加行时进行写入。
LockFileCreateRead 等待读取时创建数据目录锁定文件。
LockFileCreateSync 等待数据在创建数据目录锁定文件时到达持久存储空间。
LockFileCreateWrite 等待写入时创建数据目录锁定文件。
LockFileRecheckdatadirRead 等待在重新检查数据目录锁定文件期间读取。
LogicalRewriteCheckpointSync 等待在检查点记录期间,逻辑改写映射到达持久存储空间。
LogicalRewriteMappingSync 等待在逻辑改写期间,映射数据到达持久存储空间。
LogicalRewriteMappingWrite 等待在逻辑改写期间,写入映射数据。
LogicalRewriteSync 等待逻辑改写映射到达持久存储空间。
LogicalRewriteTruncate 等待在逻辑改写期间,截断映射数据。
LogicalRewriteWrite 等待写入逻辑改写映射。
RelationMapRead 等待读取关系映像文件。
RelationMapReplace 等待永久替换关系映像文件。
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 等待在创建数据库时写入版本文件。
WalsenderTimelineHistoryRead 等待在 walsender 时间线命令期间从时间线历史文件中读取数据。
WalBootstrapSync 等待在引导期间 WAL 达到持久化存储。
WalBootstrapWrite 等待在引导期间写入 WAL 页。
WalCopyRead 等待在通过复制现有 WAL 段创建新的 WAL 段时读取数据。
WalCopySync 等待通过复制现有 WAL 段创建的新 WAL 段达到持久化存储。
WalCopyWrite 等待在通过复制现有 WAL 段创建新的 WAL 段时写入数据。
WalInitSync 等待新初始化的 WAL 文件达到持久化存储。
WalInitWrite 等待在初始化新 WAL 文件时写入数据。
WalRead 等待从 WAL 文件读取数据。
WalSummaryRead 等待从 WAL 摘要文件读取数据。
WalSummaryWrite 等待写入 WAL 摘要文件。
WalSync 等待 WAL 文件达到持久化存储。
WalSyncMethodAssign 等待在指定新的 WAL 同步方法时数据达到持久化存储。
WalWrite 等待写入 WAL 文件。

表 27.10 类型 Ipc 的等待事件

IPC 等待事件 描述
AppendReady 等待 Append 计划节点的子计划节点准备就绪。
ArchiveCleanupCommand 等待 archive_cleanup_command 完成。
ArchiveCommand 等待 archive_command 完成。
BackendTermination 等待另一个后端终止。
BackupWaitWalArchive 等待备份所需的 WAL 文件成功存档。
BgworkerShutdown 等待后台工作进程关闭。
BgworkerStartup 等待后台工作进程启动。
BtreePage 等待继续并行 B 树扫描所需页码可用。
BufferIo 等待缓冲区 I/O 完成。
CheckpointDelayComplete 等待阻止检查点完成的后端。
CheckpointDelayStart 等待后端从开始检查点。
CheckpointDone 等待检查点完成。
CheckpointStart 等待检查点开始。
ExecuteGather 等待从子进程的活动中执行 Gather 计划节点。
HashBatchAllocate 等待已选定的并行哈希参与者分配一个哈希表。
HashBatchElect 等待选定一个并行哈希参与者来分配一个哈希表。
HashBatchLoad 等待其他并行哈希参与者完成对哈希表的加载。
HashBuildAllocate 等待已选定的并行哈希参与者分配初始哈希表。
HashBuildElect 等待选定一个并行哈希参与者来分配初始哈希表。
HashBuildHashInner 等待其他并行哈希参与者完成对内关系的哈希处理。
HashBuildHashOuter 等待其他并行哈希参与者完成对外部关系的分区处理。
HashGrowBatchesDecide 等待选定一个并行哈希参与者来决定将来的批处理增长。
HashGrowBatchesElect 等待选定一个并行哈希参与者来分配更多批处理。
HashGrowBatchesFinish 等待已选定的并行哈希参与者来决定将来的批处理增长。
HashGrowBatchesReallocate 等待已选定的并行哈希参与者分配更多批处理。
HashGrowBatchesRepartition 等待其他并行哈希参与者完成重新分区处理。
HashGrowBucketsElect 等待选定一个并行哈希参与者来分配更多存储单元。
HashGrowBucketsReallocate 等待已选定的并行哈希参与者完成分配更多存储单元。
HashGrowBucketsReinsert 等待其他并行哈希参与者完成对元组插入到新存储单元中。
LogicalApplySendData 等待一个逻辑复制 leader 执行过程将数据发送到一个并行执行过程。
LogicalParallelApplyStateChange 等待一个逻辑复制并行执行过程改变状态。
LogicalSyncData 等待一个逻辑复制远程服务器发送数据以进行初始表同步。
LogicalSyncStateChange 等待一个逻辑复制远程服务器改变状态。
MessageQueueInternal 等待另一个进程附加到一个共享消息队列。
MessageQueuePutMessage 等待将一个进程消息写入一个共享消息队列。
MessageQueueReceive 等待从一个共享消息队列接收字节。
MessageQueueSend 等待将字节发送到一个共享消息队列。
MultixactCreation 等待一个多重事务创建完成。
ParallelBitmapScan 等待并行位图扫描初始化。
ParallelCreateIndexScan 正在等待并行 CREATE INDEX 工作程序完成堆扫描。
ParallelFinish 正在等待并行工作程序完成计算。
ProcarrayGroupUpdate 正在等待组长在事务结束时清除事务 ID。
ProcSignalBarrier 正在等待所有后端处理屏障事件。
Promote 正在等待备用提升。
RecoveryConflictSnapshot 正在等待真空清理的恢复冲突解决。
RecoveryConflictTablespace 正在等待删除表空间的恢复冲突解决。
RecoveryEndCommand 正在等待 recovery_end_command 完成。
RecoveryPause 正在等待恢复继续。
ReplicationOriginDrop 正在等待复制起点变为非活动状态以便删除它。
ReplicationSlotDrop 正在等待复制槽变为非活动状态以便删除它。
RestoreCommand 正在等待 restore_command 完成。
SafeSnapshot 正在等待为 READ ONLY DEFERRABLE 获得有效快照。
SyncRep 正在等待在同步复制期间来自远程服务器的确认。
WalReceiverExit 正在等待 WAL 接收器退出。
WalReceiverWaitStart 正在等待启动进程发送流式复制的初始数据。
WalSummaryReady 正在等待生成新的 WAL 摘要。
XactGroupUpdate 正在等待组长在事务结束时更新事务状态。

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

Lock 等待事件 描述
advisory 正在等待获取咨询用户锁。
applytransaction 正在等待获取逻辑复制订户应用的远程事务的锁。
extend 正在等待扩展关系。
frozenid 正在等待更新 pg_database.datfrozenxidpg_database.datminmxid
object 正在等待获取非关系数据库对象的锁。
page 正在等待获取关系页的锁。
relation 正在等待获取关系的锁。
spectoken 正在等待获取推测插入锁。
transactionid 正在等待事务完成。
tuple 正在等待获取元组的锁。
userlock 正在等待获取用户锁。
virtualxid 正在等待获取虚拟事务 ID 锁;另见 第 66.1 节

表 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 文件。
DSMRegistry 正在等待读取或更新动态共享内存注册表。
DSMRegistryDSA 正在等待访问动态共享内存注册表的动态共享内存分配器。
DSMRegistryHash 正在等待访问动态共享内存注册表的共享哈希表。
DynamicSharedMemoryControl 正在等待读取或更新动态共享内存分配信息。
InjectionPoint 正在等待读取或更新与注入点相关的信息。
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。
ParallelAppend 正在等待在并行附加计划执行期间选择下一个子计划。
ParallelHashJoin 正在等待在并行散列联接计划执行期间同步工作程序。
ParallelQueryDSA 正在等待并行查询动态共享内存分配。
ParallelVacuumDSA 正在等待并行真空动态共享内存分配。
PerSessionDSA 正在等待并行查询动态共享内存分配。
PerSessionRecordType 等待访问并行查询中有关复合类型的信息。
PerSessionRecordTypmod 正在等待访问并行查询中有关类型修改符的信息(标识匿名记录类型)。
PerXactPredicateList 正在等待访问并行查询期间由当前可序列化事务保存的谓词锁。
PgStatsData 正在等待共享内存统计数据访问。
PgStatsDSA 正在等待统计动态共享内存分配器的访问。
PgStatsHash 正在等待统计共享内存哈希表访问。
PredicateLockManager 正在等待访问可序列化事务使用的谓词锁信息。
ProcArray 正在等待访问每个进程的数据结构(通常是用于获取快照或报告会话的事务 ID)。
RelationMapping 正在等待读取或更新 pg_filenode.map 文件(用于跟踪某些系统编目的 filenode 分配)。
RelCacheInit 等待读取或更新关系缓存初始化文件 pg_internal.init
ReplicationOrigin 正在等待创建、删除或使用复制源。
ReplicationOriginState 正在等待读取或更新一个复制源的进度。
ReplicationSlotAllocation 正在等待分配或释放复制槽。
ReplicationSlotControl 正在等待读取或更新复制槽状态。
ReplicationSlotIO 正在等待复制槽上的 I/O 操作。
SerialBuffer 正在等待可序列化事务冲突 SLRU 缓冲区的 I/O 操作。
SerialControl 正在等待读取或更新共享 pg_serial 状态。
SerializableFinishedList 正在等待访问已完成的可序列化事务的列表。
可序列化谓词列表 等待存取可序列化事务所持有的谓词锁列表。
可序列化事务哈希 等待读或更新有关于可序列化事务的信息。
可序列化 SLRU 等待存取可序列化事务冲突 SLRU 缓存。
已共享事务 ID 位图 等待在并行位图索引扫描期间存取已共享事务 ID 位图。
已共享元组存储 等待在并行查询期间存取已共享元组存储。
共享内存索引 等待在共享内存中查找或分配空间。
共享无效读取 等待从共享目录无效队列中检索信息。
共享无效写入 等待将信息添加到共享目录无效队列中。
子事务缓冲区 等待子事务 SLRU 缓冲区的 I/O。
子事务 SLRU 等待存取子事务 SLRU 缓存。
SyncRep 等待读或更新有关于同步复制状态的信息。
同步扫描 等待选择同步表扫描的起始位置。
表空间创建 等待创建或删除表空间。
两阶段状态 等待读或更新已准备事务的状态。
自定义等待事件 等待读或更新自定义等待事件信息。
预写式日志缓冲区映射 等待替换预写式日志缓冲区中的页面。
预写式日志插入 等待将预写式日志数据插入内存缓冲区。
预写式日志摘要 等待读或更新预写式日志摘要状态。
预写式日志写入 等待预写式日志缓冲区写入磁盘。
WrapLimitsVacuum 等待更新事务 ID 和 MultiXact 消耗的限制。
事务缓冲区 等待事务状态 SLRU 缓冲区的 I/O。
事务 SLRU 等待存取事务状态 SLRU 缓存。
事务截断 等待执行 pg_xact_status 或更新可用的最旧事务 ID。
事务 ID 生成器 等待分配新的事务 ID。

表 27.13. 类型为 超时 的等待事件

超时 等待事件 描述
基本备份节流 在节流活动期间等待基本备份。
检查点写入延迟 在执行检查点期间写入之间等待。
PgSleep 由于调用 pg_sleep 或同级函数而等待。
恢复应用延迟 等待在恢复期间由于延迟设置应用预写式日志。
恢复检索重试间隔 当预写式日志数据从任何来源(pg_wal、存档或流)都不可用时,在恢复期间等待。
注册同步请求 由于请求队列已满,在向检查点发送同步请求时等待。
忙等延迟 在获取竞争的忙等锁时等待。
Vacuum 延迟 等待基于成本的真空延迟点。
VacuumTruncate 等待获取独占锁,以截断已清空页面末尾处的已清空表。
WalSummarizerError 等待 WAL 汇总程序出错后。

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

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

注意

Extension 可将 ExtensionInjectionPointLWLock 事件添加到 表 27.8表 27.12 中所示的列表。在某些情况下,扩展分配的 LWLock 名称在所有服务器进程中不可用。它可能仅报告为 extension,而不是扩展分配的名称。

27.2.4. pg_stat_replication #

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

表 27.14 pg_stat_replication 视图

列类型

描述

pid integer

WAL 发送程序进程的进程 ID

usesysid oid

登录到此 WAL 发送程序进程的用户的 OID

用户名 名称

登录到此 WAL 发送程序进程的用户名

应用程序名称 文本

连接到此 WAL 发送程序的应用程序名称

客户端地址 inet

连接到此 WAL 发送程序的客户端的 IP 地址。如果此字段为 null,则表示客户端通过服务器计算机上的 Unix 套接字连接。

客户端主机名 文本

连接客户端的主机名,由 client_addr 的反向 DNS 查找报告。该字段仅对 IP 连接有效,并且仅当 log_hostname 启用时有效。

客户端端口 整数

客户端用于与此 WAL 发送程序通信的 TCP 端口号,或在使用 Unix 套接字时为 -1

后端开始 带时区的 time stamp

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

backend_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。监控系统应选择是否将此表示为缺失数据、零或继续显示最后已知值。

27.2.5. pg_stat_replication_slots#

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

表 27.15. pg_stat_replication_slots 视图

列类型

描述

slot_name 文本

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

spill_txns 大整数

逻辑解码用于从 WAL 解码变更时使用的内存超过 logical_decoding_work_mem 时溢出到磁盘的事务数。该计数器对顶级事务和子事务都会递增。

spill_count 大整数

在为此插槽从 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 接收器的统计信息。

表 27.16. pg_stat_wal_receiver 视图

列类型

描述

pid integer

WAL 接收器进程的进程 ID

状态 文本

WAL 接收器进程的活动状态

接收开始 LSN pg_lsn

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

接收开始 TLI 整数

WAL 接收器启动时使用的第一个时间线编号

已写入 LSN pg_lsn

已接收并写入磁盘但未写入的最后一个预写日志位置。不应将此用于数据完整性检查。

已写入 LSN pg_lsn

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

已接收 TLI 整数

已接收并写入磁盘的最后一个预写日志位置的时间线编号,此字段的初始值为 WAL 接收器启动时使用的第一个日志位置的时间线编号

最后一条消息发送时间 带时区的 timestamp

从原始 WAL 发送器接收的最后一条消息的发送时间

最后一条消息接收时间 带时区的 timestamp

从原始 WAL 发送器接收的最后一条消息的接收时间

最新结束 LSN pg_lsn

报告给原始 WAL 发送器的最后一个预写日志位置

最新结束时间 带时区的 timestamp

报告给原始 WAL 发送器的最后一个预写日志位置的时间

slot_name 文本

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

发送器主机 文本

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

发送器端口 整数

此 WAL 接收器连接到的 PostgreSQL 实例的端口号。

conninfo 文本

此 WAL 接收器使用的连接字符串,其中包含经过混淆的安全敏感字段。


27.2.7. pg_stat_recovery_prefetch #

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

表 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 #

表 27.18。视图 pg_stat_subscription

列类型

描述

subid oid

订阅的 OID

subname name

订阅的名称

worker_type text

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

pid integer

订阅工作进程的进程 ID

leader_pid integer

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

relid oid

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

received_lsn pg_lsn

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

最后一条消息发送时间 带时区的 timestamp

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

最后一条消息接收时间 带时区的 timestamp

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

最新结束 LSN pg_lsn

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

最新结束时间 带时区的 timestamp

向源 WAL 发送器报告的上一次预写式日志位置的时间;并行应用工作器为 NULL


27.2.9. pg_stat_subscription_stats #

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

表 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 使用情况的统计信息。可以将其在 pid 列上连接到 pg_stat_activitypg_stat_replication 以获取更多关于此连接的详细信息。

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

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

client_serial numeric

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

issuer_dn text

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


27.2.11. pg_stat_gssapi #

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

表 27.21. 视图 pg_stat_gssapi

列类型

描述

pid integer

后端的进程 ID

gss_authenticated 布尔值

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

principal 文本

用于验证此连接的负责人,或如果未使用 GSSAPI 验证此连接,则为 NULL。如果负责人比 NAMEDATALEN(在标准构建中为 64 个字符)长,则此字段将被截断。

encrypted 布尔值

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

credentials_delegated 布尔值

如果在此连接中委派了 GSSAPI 证书,则为真。


27.2.12. pg_stat_archiver #

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

表 27.22. pg_stat_archiver 视图

列类型

描述

archived_count bigint

已成功归档的 WAL 文件数量

last_archived_wal 文本

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

last_archived_time 带时区的 timestamp

最近成功归档操作的时间

failed_count bigint

归档 WAL 文件的失败尝试数量

last_failed_wal 文本

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

last_failed_time 带时区的 timestamp

最近失败归档操作的时间

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 统计数据。将省略无意义的组合。

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

表 27.23. pg_stat_io 视图

列类型

描述

backend_type text

后端类型(例如后台工作进程、自动清理工作进程)。有关 backend_type 的更多信息,请参阅 pg_stat_activity。某些 backend_type 不会累积 I/O 操作统计数据,并且不会包含在该视图中。

对象 文本

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

  • 关系:永久关系。

  • 临时关系:临时关系。

上下文 文本

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

  • normal:I/O 操作类型的默认或标准 上下文。例如,默认情况下,会从共享缓冲区读取关系数据并写入关系数据。因此,在 上下文 normal 中跟踪对共享缓冲区的读取和写入关系数据。

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

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

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

读取 bigint

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

读取时间 double precision

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

写入 bigint

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

写入时间 double precision

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

写回 bigint

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

写回时间 double precision

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

扩展 bigint

关系扩展操作的数量,每个操作的大小为 op_bytes 中指定的大小。

扩展时间 double precision

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

op_bytes bigint

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

关系数据读取、写入和扩展以构建时参数 BLCKSZ 衍生的 block_size 为单位进行,默认值为 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。例如,临时表不是 fsynced,因此对于 object temp relationfsyncs 将为 NULL。还有,后台写入程序不会执行读取,因此对于 backend_type background writer 的行,reads 将为 NULL。

pg_stat_io 可以用来了解数据库调整。例如

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

  • 客户端后端依靠检查点机制来确保将数据持久化到永久存储中。由fsyncs导致客户端后端出现大量数量表明可能错误地配置了共享缓冲区或检查点。可以在第 28.5 节中找到有关配置检查点的更多信息。

  • 通常,客户端后端应能够依靠辅助进程(如检查点和后台写入器)尽可能多地写入脏数据。由客户端后端导致出现大量写入表明可能错误地配置了共享缓冲区或检查点。可以在第 28.5 节中找到有关配置检查点的更多信息。

注意

仅当启用track_io_timing时,跟踪 I/O 时间的列才是非零的。用户在将这些列与对应的 I/O 操作结合使用时应小心,以防在上次统计信息重置后一直未对track_io_timing进行启用。

27.2.14。 pg_stat_bgwriter #

pg_stat_bgwriter视图将一直有一行,其中包含有关群集后台写入器的数据。

表 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视图将一直有一行,其中包含有关群集检查点处理进程的数据。

表 27.25。 pg_stat_checkpointer视图

列类型

描述

num_timed bigint

由于超时而导致的计划检查点数量。请注意,如果服务器自上次检查点后一直处于闲置状态,则可能会跳过检查点,且此值同时统计已完成和已跳过的检查点

num_requested bigint

已执行的请求检查点数量

restartpoints_timed bigint

由于超时或尝试执行失败导致的计划重新启动点数量

restartpoints_req bigint

已请求的重新启动点数量

restartpoints_done bigint

已执行的重新启动点数量

写入时间 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 活动的数据。

表 27.26. 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 缓冲区写入磁盘的次数。请参阅第 28.5 节以获取有关内部 WAL 函数 XLogWrite 的更多信息。

wal_sync bigint

通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘的次数(如果 fsynconwal_sync_methodfdatasyncfsyncfsync_writethrough,否则为零)。请参阅第 28.5 节以获取有关内部 WAL 函数 issue_xlog_fsync 的更多信息。

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

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


27.2.17. pg_stat_database #

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

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

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 视图中,每个数据库将包含一行,显示有关由于与备用服务器恢复发生冲突而发生的查询取消的数据库级统计信息。此视图将仅包含有关备用服务器的信息,因为在主服务器上不会发生冲突。

表 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 #

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

表 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

更新的总行数。(这包括 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 with time zone

此表上次被 autovacuum 守护进程分析的时间

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 视图包含相同的信息,但是经过筛选,分别仅显示用户和系统索引。

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

注意

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

注意

使用某些SQL用于搜索与列表或多个标量值的数组中的任何值匹配的行(参见 第 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 视图包含相同的信息,但分别过滤为仅显示用户表和系统表。

表 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 视图包含相同的信息,但分别过滤为仅显示用户索引和系统索引。

表 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 的统计信息。

表 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 参数精确控制跟踪哪些函数。

表 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简单的最近最少使用)高速缓存访问某些磁盘信息。pg_stat_slru 视图将包含每个跟踪 SLRU 高速缓存的一行,显示关于对高速缓存页面访问的统计信息。

对于核心服务器的一部分的每个 SLRU 高速缓存,都有一个配置参数控制其大小,其后缀是 _buffers

表 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 作为参数。请注意,只能通过这些函数看到当前数据库中的表、索引和函数。

与累积统计信息系统相关的附加函数在 表 27.36 中列出。

表 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_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

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

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_shared ( [ target text DEFAULT NULL ] ) → void

根据参数将一些集群范围的统计信息计数器重置为零。 target 可以是

  • archiver:重置 pg_stat_archiver 视图中显示的所有计数器。

  • bgwriter:重置 pg_stat_bgwriter 视图中显示的所有计数器。

  • checkpointer:重置 pg_stat_checkpointer 视图中显示的所有计数器。

  • io:重置 pg_stat_io 视图中显示的所有计数器。

  • recovery_prefetch:重置 pg_stat_recovery_prefetch 视图中显示的所有计数器。

  • slru:重置 pg_stat_slru 视图中显示的所有计数器。

  • wal:重置 pg_stat_wal 视图中显示的所有计数器。

  • NULL 或未指定:重置上面列出的视图中的所有计数器。

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_single_table_counters ( oid ) → void

将当前数据库中单个表或索引的统计信息重置为零,或将该统计信息重置为集群中所有数据库共有的统计信息。

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_single_function_counters ( oid ) → void

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

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_slru ( [ target text DEFAULT NULL ] ) → void

将单个 SLRU 缓存中,或群集中所有 SLRU 中的统计信息重置为零。如果 targetNULL 或未指定,则 pg_stat_slru 视图中显示的所有 SLRU 缓存中显示的所有计数器都将被重置。该参数可以为 commit_timestampmultixact_membermultixact_offsetnotifyserializablesubtransactiontransaction,以仅重置该条目的计数器。如果该参数为 other(实际上是任何无法识别的名称),则所有其他 SLRU 缓存的计数器,例如扩展定义的缓存,都将被重置。

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_replication_slot ( text ) → void

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

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。

pg_stat_reset_subscription_stats ( oid ) → void

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

默认情况下,此功能仅限超级用户使用,但可以向其他用户授予执行权限来运行此功能。


警告

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

pg_stat_get_activitypg_stat_activity 的基础函数,返回包含每个后端进程所有可用信息的一组记录。有时,获取这些信息的一部分可能会更方便。在这些情况下,可以使用另一组后端统计访问函数;它们显示在 表 27.37中。这些访问函数使用会话的后端 ID 号,这是一个小的整数(>= 0),与任何并发会话的后端 ID 不同,但会话 ID 可在会话退出后立即回收。后端 ID 用于(在其他事项中)标识会话(如果存在)的临时架构。pg_stat_get_backend_idset 提供了一种方便的方法来列出所有活动的后台 ID 号,以调用这些函数。例如,显示PIDs 和所有后端的当前查询

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;

表 27.37。后端统计函数

函数

描述

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 ( 整型 ) → 带时区的timestamp

返回该进程开始时的时刻。

pg_stat_get_backend_subxact ( 整型 ) → 记录

返回有关指定 ID 的后端事务的信息记录。返回的字段为 subxact_count,即 backrend 事务缓存中的事务数,以及 subxact_overflow,指示后端事务缓存是否溢出。

pg_stat_get_backend_userid ( 整型 ) → oid

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

pg_stat_get_backend_wait_event ( 整型 ) → 文本

如果此 backrend 当前正在等待,返回等待事件名称,否则返回 NULL。参见 表 27.5表 27.13

pg_stat_get_backend_wait_event_type ( 整型 ) → 文本

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

pg_stat_get_backend_xact_start ( 整型 ) → 带时区的timestamp

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