Postgresql 中文操作指南
28.2. The Cumulative Statistics System #
PostgreSQL 的 cumulative statistics system 支持收集和报告有关服务器活动的信息。当前,以磁盘块和单个行两种形式统计对表和索引的访问。每个表中的总行数,以及有关表中每个表vacuum 和分析操作的信息也输入统计。如果启用,对用户定义函数的调用以及在每个函数中花费的总时间也会被统计。
PostgreSQL 还支持报告有关系统当前正在发生的事情的动态信息,例如其他服务器进程当前正在执行的确切命令,以及系统中存在的其他连接。此功能独立于累积统计系统。
28.2.1. Statistics Collection Configuration #
由于统计信息的收集会给查询执行增加一些开销,因此可以将系统配置为收集或不收集信息。这由通常在 postgresql.conf 中设置的配置参数控制。(有关设置配置参数的详细信息,请参阅 Chapter 20。)
参数 track_activities 启用对任何服务器进程正在执行的当前命令的监视。
参数 track_counts 控制是否收集有关表和索引访问的累积统计信息。
参数 track_functions 启用对用户定义函数使用情况的跟踪。
参数 track_io_timing 启用对块读取和写入时间的监视。
参数 track_wal_io_timing 启用对 WAL 写入时间的监视。
通常,这些参数设置在 postgresql.conf 中,这样它们就适用于所有服务器进程,但是可以使用 SET 命令在各个会话中打开或关闭它们。(为了防止普通用户向管理员隐藏他们的活动,只有超级用户才能使用 SET 更改这些参数。)
累积统计信息收集在共享内存中。每个 PostgreSQL 进程在本地收集统计信息,然后在适当的时间间隔内更新共享数据。当服务器(包括物理备用)正常关闭时,统计数据的一个永久副本将存储在 pg_stat 子目录中,以便统计信息可以在各个服务器重启之间保留。相反,当从 unclean shutdown(例如,在 immediate shutdown、服务器故障、从 base backup 启动和 point-in-time 恢复之后)启动时,所有统计信息计数器都会重置。
28.2.2. Viewing Statistics #
Table 28.1 中列出的几个预定义视图可用于显示系统的当前状态。还可以查看 Table 28.2 中列出的几个其他视图以显示累积的统计信息。或者,可以使用 Section 28.2.25 中讨论的基本累积统计信息函数构建自定义视图。
在使用累积统计信息视图和函数来监控收集的数据时,意识到该信息不会立即更新非常重要。每个单独的服务器进程都会在进入闲置状态之前将累积的统计信息刷新到共享内存中,但不会超过每 PGSTAT_MIN_INTERVAL 毫秒一次(在构建服务器时未更改,则为 1 秒);所以进行中查询或事务不影响显示的总计信息,且显示的信息滞后于实际活动。但是,track_activities 收集的当前查询信息始终是最新的。
另一个重要的一点是,当要求服务器进程显示任何累积统计信息时,在默认配置中,访问的值会被缓存,直至其当前事务结束为止。因此,只要您继续当前事务,统计信息就会显示静态信息。同样,当在事务中首次请求任何此类信息时,会收集有关所有会话的当前查询的信息,并且将在整个事务中显示相同的信息。这是一个特性,而不是一个 bug,因为它允许您对统计信息执行多个查询,并在无需担心下方数字会发生变化的情况下关联结果。在交互式分析统计信息或使用昂贵查询分析统计信息时,访问各个统计信息之间的时间差会导致缓存的统计信息出现显著偏差。为了最大程度地减少偏差,stats_fetch_consistency 可以设置为 snapshot,代价是增加了缓存不必要的统计数据信息的内存使用量。相反,如果已知只能访问一次统计信息,则缓存访问过的统计信息是不必要的,并且可以通过将 stats_fetch_consistency 设置为 none 来避免。您可以调用 pg_stat_clear_snapshot() 来放弃当前事务的统计信息快照或缓存值(如果有)。在快照模式下,下一次使用统计信息会导致构建一个新快照,或在缓存模式下,导致缓存访问过的统计信息。
事务还可以通过 pg_stat_xact_all_tables、pg_stat_xact_sys_tables、pg_stat_xact_user_tables 和 pg_stat_xact_user_functions 视图看到自己的(尚未冲刷到共享内存统计信息中的)统计信息。这些数字不会像上面陈述的那样起作用;相反,它们会在整个事务过程中持续更新。
Table 28.1 中显示的动态统计信息视图中的一些信息受到安全限制。普通用户只能看到有关其自身会话(属于他们所属角色的会话)的所有信息。在有关其他会话的行中,许多列将为空。但请注意,所有用户都可以看到会话的存在及其一般属性,如会话用户和数据库。拥有内建角色 pg_read_all_stats 权限的超级用户和角色(另请参阅 Section 22.5)可以看到有关所有会话的所有信息。
Table 28.1. Dynamic Statistics Views
View Name |
Description |
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 28.4.1 。 |
pg_stat_progress_create_index |
对运行 CREATE INDEX 或 REINDEX 的每个后端显示一行,显示当前进度。请参阅 Section 28.4.4 。 |
pg_stat_progress_vacuum |
对运行 VACUUM 的每个后端(包括自动清理工作进程)显示一行,显示当前进度。请参阅 Section 28.4.5 。 |
pg_stat_progress_cluster |
对运行 CLUSTER 或 VACUUM FULL 的每个后端显示一行,显示当前进度。请参阅 Section 28.4.2 。 |
pg_stat_progress_basebackup |
对流式传输基本备份的每个 WAL 发送者进程显示一行,显示当前进度。请参阅 Section 28.4.6 。 |
pg_stat_progress_copy |
对运行 COPY 的每个后端显示一行,显示当前进度。请参阅 Section 28.4.3 。 |
Table 28.2. Collected Statistics Views
View Name |
Description |
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 ,但会统计当前事务中执行的操作(这些操作 not 尚未包含在 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 ,但仅统计当前事务中的调用次数(这些次数 not 尚未包含在 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_io 和 pg_statio_ 视图集合可用来确定缓冲区高速缓存的有效性。它们可用于计算高速缓存命中率。请注意,虽然 PostgreSQL 的 I/O 统计信息捕获了为执行 I/O 而调用内核的大多数实例,但它们并不会区分必须从磁盘提取的数据和已经驻留在内核页面高速缓存中的数据。建议用户将 PostgreSQL 统计信息视图与操作系统实用程序结合使用,以便更全面地了解其数据库的 I/O 性能。
28.2.3. pg_stat_activity #
pg_stat_activity 视图将为每个服务器进程显示一行,显示与该进程当前活动相关的信息。
Table 28.3. pg_stat_activity View
Column Type Description |
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。请参阅 Table 28.4 。 |
wait_event text 后端当前正在等待,否则为NULL的等待事件名称。请参阅 Table 28.5 到 Table 28.13 。 |
state text 此后端的当前整体状态。可能的值有: active :后端正在执行查询。 idle :后端正在等待新的客户端命令。 idle in transaction :后端处于事务中,但当前并未执行查询。 idle in transaction (aborted) :此状态与 idle in transaction 类似,除了事务中的其中一条语句导致错误。 fastpath function call :后端正在执行快速路径函数。 disabled :如果 track_activities 在此后端已禁用,将会报告此状态。 |
backend_xid xid 此后端的顶级事务标识符(如果有);请参阅 Section 74.1 。 |
backend_xmin xid 当前后端的 xmin horizon。 |
query_id bigint 此后端最近查询的标识符。如果 state 为 active ,此字段将显示正在执行的查询的标识符。在所有其他状态中,它显示上次执行的查询的标识符。默认情况下不计算查询标识符,因此除非启用 compute_query_id 参数或者配置了计算查询标识符的第三方模块,否则此字段将为 null。 |
query text 此后端最近查询的文本。如果 state 为 active ,此字段将显示正在执行的查询。在所有其他状态中,它显示上次执行的查询。默认情况下查询文本被截断为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 。此外,扩展注册的后台工作进程可能具有额外的类型。 |
Note
wait_event 和 state 列是独立的。如果后端处于 active 状态,它可能或可能不在某些事件中 waiting。如果状态是 active 并且 wait_event 为非空,则这意味着查询正在执行,但正在系统的某个地方被阻止。
Table 28.4. Wait Event Types
Wait Event Type |
Description |
Activity |
服务器进程处于空闲状态。此事件类型表明一个进程正在主处理循环中等待活动。 wait_event 将标识具体等待节点;请参阅 Table 28.5 。 |
BufferPin |
服务器进程正在等待获得对数据缓冲区的专属访问。如果另一个进程持有打开的游标(上次从此缓冲区读取数据),则缓冲区锁定等待可能会延长。请参阅 Table 28.6 。 |
Client |
服务器进程正在等待用户应用程序连接的套接字上的活动。因此,服务器预期会发生一些与其内部进程无关的事情。 wait_event 将标识具体等待节点;请参阅 Table 28.7 。 |
Extension |
服务器进程正在等待由扩展模块定义的某个条件。请参阅 Table 28.8 。 |
IO |
服务器进程正在等待I/O操作完成。 wait_event 将标识具体等待节点;请参阅 Table 28.9 。 |
IPC |
服务器进程正在等待与另一个服务器进程进行某种交互。 wait_event 将标识具体等待节点;请参阅 Table 28.10 。 |
Lock |
服务器进程正在等待重量级锁。重量级锁,也称为锁定管理器锁或简单锁,主要保护SQL可见对象,如表。然而,它们也用于针对某些内部操作(例如关系扩展)确保互斥性。 wait_event 将标识等待的锁类型;请参阅 Table 28.11 。 |
LWLock |
服务器进程正在等待轻量级锁。大多数这样的锁保护共享内存中的特定数据结构。 wait_event 将包含一个识别轻量级锁用途的名称。(某些锁有特定的名称;其他锁是一组锁的一部分,每个锁都有相似的用途。)请参阅 Table 28.12 。 |
Timeout |
服务器进程正在等待超时过期。 wait_event 将标识具体等待节点;请参阅 Table 28.13 。 |
Table 28.5. Wait Events of Type Activity
Activity Wait Event |
Description |
ArchiverMain |
等待归档进程的主循环中。 |
AutoVacuumMain |
等待自动vacuum启动器进程的主循环中。 |
BgWriterHibernate |
在后台 writer 进程中等待,处于休眠状态。 |
BgWriterMain |
在后台 writer 进程的主循环中等待。 |
CheckpointerMain |
在检查点进程的主循环中等待。 |
LogicalApplyMain |
在逻辑复制应用进程的主循环中等待。 |
LogicalLauncherMain |
在逻辑复制启动器进程的主循环中等待。 |
LogicalParallelApplyMain |
在逻辑复制并行应用进程的主循环中等待。 |
RecoveryWalStream |
在流恢复期间,在 WAL 到达前在 WAL 启动进程的主循环中等待。 |
SysLoggerMain |
在 syslogger 进程的主循环中等待。 |
WalReceiverMain |
在 WAL 接收器进程的主循环中等待。 |
WalSenderMain |
在 WAL 发送器进程的主循环中等待。 |
WalWriterMain |
在 WAL 写入器进程的主循环中等待。 |
Table 28.6. Wait Events of Type BufferPin
BufferPin Wait Event |
Description |
BufferPin |
等待获取缓冲区的独占 pin。 |
Table 28.7. Wait Events of Type Client
Client Wait Event |
Description |
ClientRead |
等待从客户端读取数据。 |
ClientWrite |
等待向客户端写入数据。 |
GSSOpenServer |
在建立 GSSAPI 会话时等待从客户端读取数据。 |
LibPQWalReceiverConnect |
等待 WAL 接收器建立与远程服务器的连接。 |
LibPQWalReceiverReceive |
等待 WAL 接收器接收来自远程服务器的数据。 |
SSLOpenServer |
尝试连接时等待 SSL。 |
WalSenderWaitForWAL |
等待 WAL 发件人进程中 WAL 刷新。 |
WalSenderWriteData |
等待 WAL 发件人进程中处理 WAL 接收器回复时的任何活动。 |
Table 28.8. Wait Events of Type Extension
Extension Wait Event |
Description |
Extension |
Waiting in an extension. |
Table 28.9. Wait Events of Type IO
IO Wait Event |
Description |
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 |
等待重新排序缓冲区管理期间的写操作。 |
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 28.10. Wait Events of Type IPC
IPC Wait Event |
Description |
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 |
Waiting for standby promotion. |
RecoveryConflictSnapshot |
正在等待恢复冲突解决,进行真空清理。 |
RecoveryConflictTablespace |
正在等待恢复冲突解决,删除表空间。 |
RecoveryEndCommand |
正在等待 recovery_end_command 完成。 |
RecoveryPause |
正在等待恢复继续。 |
ReplicationOriginDrop |
正在等待复制源变为非活动状态,以便可以将其删除。 |
ReplicationSlotDrop |
正在等待复制槽变为非活动状态,以便可以将其删除。 |
RestoreCommand |
正在等待 restore_command 完成。 |
SafeSnapshot |
正在等待为 READ ONLY DEFERRABLE 事务获取有效快照。 |
SyncRep |
正在等待在同步复制期间从远程服务器获得确认。 |
WalReceiverExit |
正在等待 WAL 接收器退出。 |
WalReceiverWaitStart |
正在等待启动进程发送用于流复制的初始数据。 |
XactGroupUpdate |
正在等待组领导在并行操作结束时更新事务状态。 |
Table 28.11. Wait Events of Type Lock
Lock Wait Event |
Description |
advisory |
正在等待获取建议用户锁定。 |
applytransaction |
正在等待获取逻辑复制订阅者正在应用的远程事务上的锁定。 |
extend |
正在等待扩展关系。 |
frozenid |
正在等待更新 pg_database . datfrozenxid 和 pg_database . datminmxid 。 |
object |
正在等待获取非关系数据库对象上的锁定。 |
page |
正在等待获取关系一页上的锁定。 |
relation |
正在等待获取关系上的锁定。 |
spectoken |
正在等待获取推测的插入锁定。 |
transactionid |
正在等待事务完成。 |
tuple |
正在等待获取元组上的锁定。 |
userlock |
正在等待获取用户锁定。 |
virtualxid |
正在等待获取虚拟事务 ID 锁定;请参见 Section 74.1 。 |
Table 28.12. Wait Events of Type LWLock
LWLock Wait Event |
Description |
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。 |
Note
扩展可以将 LWLock 类型添加到 Table 28.12 中所示的列表中。在某些情况下,扩展分配的名称不会在所有服务器进程中都可用;因此可能只将 LWLock 等待时间事件报告为 “extension”,而不是扩展分配的名称。
Table 28.13. Wait Events of Type Timeout
Timeout Wait Event |
Description |
BaseBackupThrottle |
在活动受限时等待基本备份。 |
CheckpointWriteDelay |
在执行检查点时在写入之间等待。 |
PgSleep |
由于调用 pg_sleep 或同级函数而等待。 |
RecoveryApplyDelay |
由于延迟设置而等待在恢复期间应用 WAL。 |
RecoveryRetrieveRetryInterval |
在从任何来源( pg_wal 、存档或流)无法获取 WAL 数据时等待恢复。 |
RegisterSyncRequest |
由于请求队列已满,在向检查点程序发送同步请求时等待。 |
SpinDelay |
在获取争用自旋锁时等待。 |
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)
28.2.4. pg_stat_replication #
pg_stat_replication 的视图将包含每个 WAL 发送进程的一行,显示有关复制到该发送方的连接备用服务器的统计信息。仅列出直接连接的备用服务器;没有关于下游备用服务器的信息。
Table 28.14. pg_stat_replication View
Column Type Description |
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 用于与客户机进行通信的 TCP 端口号,或 -1 (如果使用了 Unix 套接字) |
backend_start timestamp with time zone 此进程启动的时间,即客户端连接到此 WAL 发送程序的时间 |
backend_xmin xid 此备用的 xmin 视界已由 hot_standby_feedback 报告。 |
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 与收到通知(通知此备用服务器已写入但尚未刷新或应用)之间的时间间隔。如果将此服务器配置为同步备用,这可用于估计 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 timestamp with time zone 从备用服务器收到的上一次应答消息的发送时间 |
pg_stat_replication 视图中报告的延迟时间是对写入、写入缓存并重放最近 WAL 所用时间的测量,以及发送方得知该时间。如果将远程服务器配置为同步备用,则这些时间表示(或者原本将要引入)每个同步提交级别造成的提交延迟。对于异步备用,replay_lag 列近似表示近期事务对查询可见之前的延迟。如果备用服务器已完全赶上发送服务器,并且没有更多 WAL 活动,最近测量的延迟时间将继续显示一小段时间,然后显示 NULL。
延迟时间自动适用于物理复制。逻辑解码插件可以选择发出跟踪消息;如果它们未发出,该跟踪机制将仅仅显示 NULL 延迟。
Note
报告的延迟时间并不是预测备用服务器需要多长时间才能按照当前重放速度赶上发送服务器。当生成新的 WAL 时,此类系统会显示类似的时间,但当发送方变得空闲时会有所不同。特别是,当备用服务器完全赶上后,pg_stat_replication 显示的是写入、刷新并重放最近报告的 WAL 位置所花费的时间,而不是一些用户可能期望的零。这与测量近期写入事务的同步提交和事务可见性延迟的目标是一致的。为了减少对延迟的不同模型的用户的困惑,在重新播放的空闲系统上的短暂时间后,延迟列会恢复为 NULL。监控系统应选择将其表示为缺少数据、零或继续显示最后已知值。
28.2.5. pg_stat_replication_slots #
pg_stat_replication_slots 视图将包括关于其使用情况的统计信息,每行一个逻辑复制槽。
Table 28.15. pg_stat_replication_slots View
Column Type Description |
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_count__bigint 对该槽对 WAL 中的更改进行解码时将正在进行的事务传输到解码输出插件的次数。每次传输一个事务时,该计数器都会增大,同一个事务可能会传输多次。 |
stream_bytes__bigint 在对该槽对 WAL 中的更改进行解码时,为将进行中的事务解码后传输到解码输出插件而解码的事务数据量。这个和其他此槽的传输计数器可以用来调整 logical_decoding_work_mem 。 |
total_txns bigint 发送到该槽的解码输出插件中的已解码事务数。它只计算顶级事务,不会对子事务进行增大。请注意,其中包括传输和/或溢出的事务。 |
total_bytes__bigint 在解码该槽对 WAL 中的更改时,为将事务解码后发送到解码输出插件而解码的事务数据量。请注意,其中包括传输和/或溢出的数据。 |
stats_reset timestamp with time zone 上次重置这些统计信息的时间 |
28.2.6. pg_stat_wal_receiver #
pg_stat_wal_receiver 视图将只包含一行,显示有关该接收者的连接服务器的 WAL 接收器的统计信息。
Table 28.16. pg_stat_wal_receiver View
Column Type Description |
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 实例的主机。如果连接通过 Unix 套接字,则这可以是主机名、IP 地址或目录路径。(路径案例可以区分,因为它始终是绝对路径,以 / 开始。) |
sender_port integer 此 WAL 接收器连接到的 PostgreSQL 实例的端口号。 |
conninfo text 此 WAL 接收器使用的连接字符串,其中安全敏感字段已混淆处理。 |
28.2.7. pg_stat_recovery_prefetch #
pg_stat_recovery_prefetch 视图将仅包含一行。列 wal_distance、block_distance 和 io_depth 显示当前值,而其他列显示使用 pg_stat_reset_shared 函数重置的累计计数器。
Table 28.17. pg_stat_recovery_prefetch View
Column Type Description |
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 #
Table 28.18. pg_stat_subscription View
Column Type Description |
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 视图将包含每订阅一行。
Table 28.19. pg_stat_subscription_stats View
Column Type Description |
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 #
pg_stat_ssl 视图将包含每台后端或 WAL 发送器进程一行,显示有关此连接上 SSL 使用情况的统计信息。可以基于 pid 列连接到 pg_stat_activity 或 pg_stat_replication 以获取关于连接的更多详细信息。
Table 28.20. pg_stat_ssl View
Column Type Description |
pid integer 后端或 WAL 发送器进程的进程 ID |
ssl boolean 如果在此连接上使用 SSL,则为真 |
version text 使用的 SSL 版本,如果此连接未启用 SSL,则为空 |
cipher text 使用的 SSL 密码套件名称,如果此连接未启用 SSL,则为空 |
bits integer 使用的加密算法中的位数,如果此连接未使用 SSL,则为空 |
client_dn text 使用的客户端证书的 Distinguished Name (DN) 字段,如果未提供客户端证书或此连接未启用 SSL,则为空。如果 DN 字段长于 NAMEDATALEN (标准版构建中为 64 个字符),此字段将被截断。 |
client_serial numeric 客户端证书的序列号,如果未提供客户端证书或此连接未启用 SSL,则为空。证书序列号和证书颁发者的组合可以唯一标识一个证书(除非颁发者错误地重复使用了序列号)。 |
issuer_dn text 客户端证书颁发者的 DN,如果未提供客户端证书或此连接未启用 SSL,则为空。此字段与 client_dn 的截断方式相同。 |
28.2.11. pg_stat_gssapi #
pg_stat_gssapi 视图将每后端包含一行,显示本连接上 GSSAPI 使用的信息。可以与 pg_stat_activity 或 pg_stat_replication 上的 pid 列相连接以获取关于此连接的更详细信息。
Table 28.21. pg_stat_gssapi View
Column Type Description |
pid integer 后端的进程 ID |
gss_authenticated boolean 如果为此连接使用了 GSSAPI 身份验证,则为 true |
principal text 用于验证此连接的主体,如果未用 GSSAPI 验证此连接,则为空。如果主体长度超过 NAMEDATALEN (标准版构建中为 64 个字符),此字段将被截断。 |
encrypted boolean 如果此连接使用了 GSSAPI 加密,则为 true |
credentials_delegated boolean 如果在此连接中委派了 GSSAPI 凭据,则为 true。 |
28.2.12. pg_stat_archiver #
pg_stat_archiver 视图总有一行,其中包含群集归档器进程的数据。
Table 28.22. pg_stat_archiver View
Column Type Description |
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(如从一个表空间将表移动到另一个表空间时)。
Table 28.23. pg_stat_io View
Column Type Description |
backend_type text 后端类型(例如,后台工作人员、自动优化工作人员)。有关更多有关 backend_type_s 的信息,请参阅 _pg_stat_activity 。某些 _backend_type_s 不会累积 I/O 操作统计信息,并且不会包含在视图中。 |
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 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 单位读、写或扩展的字节数。关系数据读取、写入和扩展在 block_size 单位中进行,这些单位取自构建时参数 BLCKSZ ,其默认值为 8192 。 |
hits bigint 在共享缓冲区中找到所需块的次数。 |
evictions bigint 为了使其可用于其他用途,有必要从共享或局部缓冲区中写出一个块的次数。在 context normal 中,计算从缓冲区驱逐块并用另一个块替换它的次数。在 context_s _bulkwrite 、 bulkread 和 vacuum 中,计算从共享缓冲区驱逐块的次数,从而将共享缓冲区添加到单独的、大小受限的环形缓冲区中,以便在大块 I/O 操作中使用。 |
reuses bigint 共享缓冲区外部大小限制环形缓冲区中的现有缓冲区作为 bulkread 、 bulkwrite 或 vacuum _context_s 中的 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 checkpointer 和 object temp relation 没有行。
此外,某些 I/O 操作永远不会由某些后端类型执行,或者不会在某些 I/O 对象和/或某些 I/O 上下文中执行此操作。这些单元格将为 NULL。例如,不会对临时表执行 fsync_ed, so _fsyncs,object temp relation 的值将为 NULL。此外,后台编写程序不执行读取,因此 reads 在 backend_type background writer 的行中将为 NULL。
pg_stat_io 可用于通知数据库调优。例如:
Note
只有在启用 track_io_timing 时,跟踪 I/O 时间的列才非零。如果 track_io_timing 自上次统计重置以来始终未启用,用户在引用这些列并结合其对应的 IO 操作时应小心。
28.2.14. pg_stat_bgwriter #
pg_stat_bgwriter 视图将始终有一行,其中包含群集的全局数据。
Table 28.24. pg_stat_bgwriter View
Column Type Description |
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 活动的数据。
Table 28.25. pg_stat_wal View
Column Type Description |
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 的更多信息,请参见 Section 30.5 。 |
wal_sync bigint 通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘的次数(如果 fsync 是 on ,且 wal_sync_method 是 fdatasync 、 fsync 或 fsync_writethrough ,否则为零)。有关内部 WAL 函数 issue_xlog_fsync 的更多信息,请参见 Section 30.5 。 |
wal_write_time double precision 通过 XLogWrite 请求将 WAL 缓冲区写入磁盘所花费的总时间,单位为毫秒(如果启用了 track_wal_io_timing ,否则为零)。当 wal_sync_method 是 open_datasync 或 open_sync 时,这包括同步时间。 |
wal_sync_time double precision 通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘时所花费的总时间(以毫秒为单位)(如果 track_wal_io_timing 已启用,则 fsync 为 on ,且 wal_sync_method 为 fdatasync 、 fsync 或 fsync_writethrough ,否则为零)。 |
stats_reset timestamp with time zone 上次重置这些统计信息的时间 |
28.2.16. pg_stat_database #
pg_stat_database 视图将包含群集中每个数据库的一行(以及共享对象的一行),展示数据库范围的统计信息。
Table 28.26. pg_stat_database View
Column Type Description |
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 中的状态 active 和 fastpath function call ) |
idle_in_transaction_time double precision 在此数据库中的事务中处于空闲状态所花费的时间(以毫秒为单位)(这对应 pg_stat_activity 中的状态 idle in transaction 和 idle 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 视图将针对每个数据库包含一行,显示有关由于与备用服务器上的还原发生冲突而导致查询取消的数据库级统计信息。此视图仅将包含有关备用服务器的信息,因为冲突不会在主服务器上发生。
Table 28.27. pg_stat_database_conflicts View
Column Type Description |
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_tables 和 pg_stat_sys_tables 视图包含相同的信息,但已筛选仅显示用户表和系统表。
Table 28.28. pg_stat_all_tables View
Column Type Description |
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_upd 和 n_tup_newpage_upd 中统计的行更新和剩余的非 HOT 更新。) |
n_tup_del bigint 已删除的总行数 |
n_tup_hot_upd bigint 行数 HOT updated 。这些更新指不需要在索引中后续版本的情况。 |
n_tup_newpage_upd bigint 已更新行中,后续版本进入 new 堆页,并留下原始版本,该版本与 t_ctid field 指向不同堆页的情况。这些始终是非 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 自动清理程序分析此表的次数 |
28.2.19. pg_stat_all_indexes #
pg_stat_all_indexes 视图将包含当前数据库中每个索引的一行,显示有关对该特定索引的访问统计信息。 pg_stat_user_indexes 和 pg_stat_sys_indexes 视图包含相同的信息,但经过筛选,分别仅显示用户索引和系统索引。
Table 28.29. pg_stat_all_indexes View
Column Type Description |
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 规则组合多个索引的输出,因此当使用位图扫描时,将各个堆行获取与特定索引关联起来很困难。因此,位图扫描会增加它所使用的索引的 @{1}.@{2} 计数,并且会增加表的 @{3}.@{4} 计数,但它不会影响 @{5}.@{6}。优化器还会访问索引来检查所提供的已过期优化器统计信息记录范围之外值的常量,因为优化器统计信息可能过时。
Note
即使不使用位图扫描,idx_tup_read 和 idx_tup_fetch 的计数也可能不同,因为 idx_tup_read 统计从索引检索的索引条目,而 idx_tup_fetch 统计从表中获取的行。如果使用索引获取任何死亡或尚未提交的行,或者如果通过仅索引扫描而避免任何堆提取,则后者会较小。
28.2.20. pg_statio_all_tables #
@{7} 视图将包含当前数据库中的每张表的行(包括 TOAST 表),显示特定表上 I/O 的统计信息。@{8} 和 @{9} 视图包含相同的信息,但经过筛选仅显示用户表和系统表。
Table 28.30. pg_statio_all_tables View
Column Type Description |
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_indexes 和 pg_statio_sys_indexes 视图包含相同的信息,但已筛选,分别仅显示用户和系统索引。
Table 28.31. pg_statio_all_indexes View
Column Type Description |
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 统计信息。
Table 28.32. pg_statio_all_sequences View
Column Type Description |
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 参数精确控制要跟踪哪些函数。
Table 28.33. pg_stat_user_functions View
Column Type Description |
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 缓存的一行,显示关于缓存页面访问的统计信息。
Table 28.34. pg_stat_slru View
Column Type Description |
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. Statistics Functions #
可以通过编写使用与上面所示标准视图使用的相同基础统计访问函数的查询来设置查看统计信息的其他方式。要了解详情(例如函数名称),请查阅标准视图的定义。(例如,在 psql 中您可以发布 \d+ pg_stat_activity。)针对每个数据库的统计信息访问函数将数据库 OID 作为参数以识别要报告的数据库。针对每个表和每个索引的函数将表或索引 OID 作为参数。针对每个函数的统计信息函数将函数 OID 作为参数。请注意,只能使用这些函数查看当前数据库中的表、索引和函数。
与累积统计系统相关的其他函数列在 Table 28.35 中。
Table 28.35. Additional Statistics Functions
Function Description |
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 ( text ) → void 根据参数将部分集群范围统计计数器重置为零。参数可以是 bgwriter ,它重置 pg_stat_bgwriter 视图中显示的所有计数器;参数也可以是 archiver ,它重置 pg_stat_archiver 视图中显示的所有计数器;参数还可以是 io ,它重置 pg_stat_io 视图中显示的所有计数器;参数也可以是 wal ,它重置 pg_stat_wal 视图中显示的所有计数器;或者参数也可以是 recovery_prefetch ,它重置 pg_stat_recovery_prefetch 视图中显示的所有计数器。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
pg_stat_reset_single_table_counters ( oid ) → void 将当前数据库中或集群中所有数据库共享的单个表或索引的统计信息重置为零。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
pg_stat_reset_single_function_counters ( oid ) → void 将当前数据库中单个函数的统计信息重置为零。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
pg_stat_reset_slru ( text ) → void 将单个 SLRU 缓存(或集群中所有 SLRU)的统计信息重置为零。如果参数为 NULL,将重置 pg_stat_slru 视图中显示的所有 SLRU 缓存的所有计数器。参数可以是 CommitTs 、 MultiXactMember 、 MultiXactOffset 、 Notify 、 Serial 、 Subtrans 或 Xact ,以便仅重置该项中的计数器。如果参数是 other (或实际上是任何未识别的名称),则将重置所有其他 SLRU 缓存(例如扩展定义缓存)的计数器。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
pg_stat_reset_replication_slot ( text ) → void 重置参数所定义的复制槽的统计信息。如果参数是 NULL ,将重置所有复制槽的统计信息。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
pg_stat_reset_subscription_stats ( oid ) → void 将 pg_stat_subscription_stats 视图中显示的单个订阅的统计信息重置为零。如果参数是 NULL ,将重置所有订阅的统计信息。默认情况下,此功能仅限超级用户使用,但可授权其他用户执行此功能。 |
Warning
使用 pg_stat_reset() 也会重置自动清理所使用的计数器,以确定何时触发清理或分析。重置这些计数器会导致自动清理不执行必要的工作,这会导致诸如表膨胀或过期的表统计信息等问题。统计信息被重置后,建议对整个数据库执行 ANALYZE。
_pg_stat_get_activity_的底层函数_pg_stat_activity_视图会返回一组包含有关每个后端进程的所有可用信息的数据记录。有时只获取这些信息的一个子集可能会更方便。在这种情况下,可以使用另一组按后端统计信息的访问函数;它们显示在 Table 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;
Table 28.36. Per-Backend Statistics Functions
Function Description |
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。请参见 Table 28.5 至 Table 28.13 。 |
pg_stat_get_backend_wait_event_type ( integer ) → text 如果此后端当前正在等待,则返回等待事件类型名称,否则返回 NULL。有关详细信息,请参阅 Table 28.4 。 |
pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone 返回后端当前事务开始的时间。 |