pg_stat_activity
pg_stat_replication
pg_stat_replication_slots
pg_stat_wal_receiver
pg_stat_recovery_prefetch
pg_stat_subscription
pg_stat_subscription_stats
pg_stat_ssl
pg_stat_gssapi
pg_stat_archiver
pg_stat_io
pg_stat_bgwriter
pg_stat_checkpointer
pg_stat_wal
pg_stat_database
pg_stat_database_conflicts
pg_stat_all_tables
pg_stat_all_indexes
pg_statio_all_tables
pg_statio_all_indexes
pg_statio_all_sequences
pg_stat_user_functions
pg_stat_slru
PostgreSQL 的 累积统计信息系统 支持收集和报告服务器活动信息。目前,它会计算表和索引的磁盘块访问次数和单个行访问次数。每个表的总行数,以及每个表的 vacuum 和 analyze 操作的信息也会被计算。如果启用,用户定义函数的调用次数以及在每个函数中花费的总时间也会被计算。
PostgreSQL 还支持报告系统当前活动的动态信息,例如其他服务器进程当前正在执行的确切命令,以及系统中存在的其他连接。此功能独立于累积统计信息系统。
由于收集统计信息会增加查询执行的开销,因此可以配置系统是否收集信息。这由通常在 postgresql.conf
中设置的配置参数控制。(有关设置配置参数的详细信息,请参阅 第 19 章 服务器配置。)
参数 track_activities 启用对任何服务器进程当前执行命令的监控。
参数 track_cost_delay_timing 启用对基于成本的 vacuum 延迟的监控。
参数 track_counts 控制是否收集表和索引访问的累积统计信息。
参数 track_functions 启用对用户定义函数使用情况的跟踪。
参数 track_io_timing 启用对块读取、写入、扩展和 fsync 时间的监控。
参数 track_wal_io_timing 启用对 WAL 读取、写入和 fsync 时间的监控。
通常,这些参数设置在 postgresql.conf
中,以便它们适用于所有服务器进程,但可以使用 SET 命令在单个会话中打开或关闭它们。(为防止普通用户隐藏其活动不被管理员发现,只有超级用户才能使用 SET
更改这些参数。)
累积统计信息收集在共享内存中。每个 PostgreSQL 进程在本地收集统计信息,然后在适当的间隔更新共享数据。当服务器(包括物理副本)正常关闭时,统计信息数据的永久副本将存储在 pg_stat
子目录中,以便在服务器重启后保留统计信息。相比之下,当从非正常关闭(例如,即时关闭、服务器崩溃、从基础备份启动以及时间点恢复)启动时,所有统计计数器都会重置。
有几个预定义的视图,列在 表 27.1 中,可用于显示系统的当前状态。还有其他几个视图,列在 表 27.2 中,可用于显示累积的统计信息。或者,可以使用基础的累积统计函数构建自定义视图,如 27.2.26 统计函数 中所述。
在使用累积统计信息视图和函数监控收集的数据时,重要的是要认识到信息并非瞬时更新。每个独立的服务器进程在进入空闲状态之前会将累积的统计信息刷新到共享内存,但频率不超过每 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
中。这些数字不像上面描述的那样工作;相反,它们在整个事务过程中持续更新。
表 27.1 中显示的动态统计信息视图中的某些信息是安全受限的。普通用户只能看到关于他们自己的会话(属于他们是成员的角色)的所有信息。在关于其他会话的行中,许多列将为 NULL。但是,请注意,所有用户都可以看到会话的存在及其一般属性,例如其会话用户和数据库。超级用户和具有内置角色 pg_read_all_stats
权限的角色可以查看关于所有会话的所有信息。
表 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 的后端(包括 autovacuum 工作进程)一行,显示当前进度。请参阅 27.4.1 ANALYZE 进度报告。 |
pg_stat_progress_create_index |
每个正在运行 CREATE INDEX 或 REINDEX 的后端一行,显示当前进度。请参阅 27.4.4 CREATE INDEX 进度报告。 |
pg_stat_progress_vacuum |
每个正在运行 VACUUM 的后端(包括 autovacuum 工作进程)一行,显示当前进度。请参阅 27.4.5 VACUUM 进度报告。 |
pg_stat_progress_cluster |
每个正在运行 CLUSTER 或 VACUUM FULL 的后端一行,显示当前进度。请参阅 27.4.2 CLUSTER 进度报告。 |
pg_stat_progress_basebackup |
每个正在流式传输基础备份的 WAL 发送进程一行,显示当前进度。请参阅 27.4.6 Base Backup 进度报告。 |
pg_stat_progress_copy |
每个正在运行 COPY 的后端一行,显示当前进度。请参阅 27.4.3 COPY 进度报告。 |
表 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 和 analyze 操作的列。 |
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_io
和 pg_statio_
系列视图对于确定缓冲区缓存的有效性很有用。它们可以用于计算缓存命中率。请注意,虽然 PostgreSQL 的 I/O 统计信息捕获了大多数内核被调用以执行 I/O 的情况,但它们并未区分必须从磁盘读取的数据和已存在于内核页面缓存中的数据。建议用户将 PostgreSQL 统计信息视图与操作系统实用程序结合使用,以更全面地了解其数据库的 I/O 性能。
pg_stat_activity
#视图 pg_stat_activity
将为每个服务器进程提供一行,显示与该进程当前活动相关的信息。
表 27.3. pg_stat_activity
视图
列 类型 描述 |
---|
此后端连接到的数据库的 OID |
此后端连接到的数据库的名称 |
此后端的进程 ID |
如果此进程是并行查询工作进程,则为并行组领导者的进程 ID;如果是并行应用工作进程,则为并行应用领导者的进程 ID。 |
登录到此后端的用户的 OID |
登录到此后端的用户的名称 |
连接到此后端的应用程序的名称 |
连接到此后端的客户端的 IP 地址。如果此字段为 NULL,则表示客户端通过服务器上的 Unix 套接字连接,或者这是一个内部进程(例如 autovacuum)。 |
连接客户端的主机名,由 |
客户端用于与此后端通信的 TCP 端口号,如果使用 Unix 套接字,则为 |
此进程启动的时间。对于客户端后端,这是客户端连接到服务器的时间。 |
此进程当前事务启动的时间,如果当前没有活动的事务,则为 NULL。如果当前查询是其事务中的第一个查询,则此列等于 |
当前活动查询启动的时间,或者如果 |
|
后端正在等待的事件类型(如果有);否则为 NULL。请参阅 表 27.4。 |
|
此后端的当前总体状态。可能的值为:
|
此后端的顶层事务标识符(如果有);请参阅 67.1 事务和标识符。 |
当前后端的 |
此后端最近一次查询的标识符。如果 |
此后端最近一次查询的文本。如果 |
当前后端的类型。可能的类型包括 |
wait_event
和 state
列是独立的。如果后端处于 active
状态,它可能正在等待某个事件,也可能没有。如果状态为 active
且 wait_event
非 NULL,则表示正在执行查询,但该查询在系统中被阻塞了。为了降低报告开销,系统不会尝试同步后端活动数据的不同方面。因此,视图的列之间可能存在短暂的差异。
表 27.4. 等待事件类型
等待事件类型 | 描述 |
---|---|
Activity |
服务器进程空闲。此事件类型指示进程在其主处理循环中等待活动。wait_event 将标识具体的等待点;请参阅 表 27.5。 |
BufferPin |
服务器进程正在等待对数据缓冲区的独占访问。如果另一个进程持有对所讨论缓冲区的最后一次读取数据的游标,则缓冲区 pin 等待可能会很长。请参阅 表 27.6。 |
Client |
服务器进程正在等待用户应用程序连接的套接字上的活动。因此,服务器期望发生一些独立于其内部进程的事件。wait_event 将标识具体的等待点;请参阅 表 27.7。 |
Extension |
服务器进程正在等待由扩展模块定义的某个条件。请参阅 表 27.8。 |
InjectionPoint |
服务器进程正在等待注入点达到测试中定义的某个结果。有关更多详细信息,请参阅 36.10.14 注入点。此类型没有预定义的等待点。 |
IO |
服务器进程正在等待 I/O 操作完成。wait_event 将标识具体的等待点;请参阅 表 27.9。 |
IPC |
服务器进程正在等待与其他服务器进程的某种交互。wait_event 将标识具体的等待点;请参阅 表 27.10。 |
Lock |
服务器进程正在等待一个重量级锁。重量级锁,也称为锁管理器锁或简称为锁,主要保护 SQL 可见的对象(如表)。然而,它们也用于确保某些内部操作(如关系扩展)的互斥。wait_event 将标识所等待的锁的类型;请参阅 表 27.11。 |
LWLock |
服务器进程正在等待一个轻量级锁。大多数此类锁保护共享内存中的特定数据结构。wait_event 将包含一个标识轻量级锁用途的名称。(有些锁有特定名称;有些是具有类似用途的锁组的一部分。)请参阅 表 27.12。 |
Timeout |
服务器进程正在等待一个超时过期。wait_event 将标识具体的等待点;请参阅 表 27.13。 |
表 27.5. 类型为 Activity
的等待事件
Activity 等待事件 |
描述 |
---|---|
ArchiverMain |
归档进程主循环等待。 |
AutovacuumMain |
自动 vacuum 启动器进程主循环等待。 |
BgwriterHibernate |
后台写入进程休眠等待。 |
BgwriterMain |
后台写入进程主循环等待。 |
CheckpointerMain |
检查点进程主循环等待。 |
CheckpointerShutdown |
等待检查点进程终止。 |
IoWorkerMain |
IO 工作进程主循环等待。 |
LogicalApplyMain |
逻辑复制应用进程主循环等待。 |
LogicalLauncherMain |
逻辑复制启动器进程主循环等待。 |
LogicalParallelApplyMain |
逻辑复制并行应用进程主循环等待。 |
RecoveryWalStream |
在流式恢复期间,启动进程等待 WAL 到达。 |
ReplicationSlotsyncMain |
槽同步工作进程主循环等待。 |
ReplicationSlotsyncShutdown |
等待槽同步工作进程关闭。 |
SysloggerMain |
日志记录进程主循环等待。 |
WalReceiverMain |
WAL 接收器进程主循环等待。 |
WalSenderMain |
WAL 发送器进程主循环等待。 |
WalSummarizerWal |
WAL 摘要程序等待更多 WAL 的生成。 |
WalWriterMain |
WAL 写入器进程主循环等待。 |
表 27.6. 类型为 Bufferpin
的等待事件
BufferPin 等待事件 |
描述 |
---|---|
BufferPin |
等待获取缓冲区的独占 pin。 |
表 27.7. 类型为 Client
的等待事件
Client 等待事件 |
描述 |
---|---|
ClientRead |
等待从客户端读取数据。 |
ClientWrite |
等待向客户端写入数据。 |
GssOpenServer |
在建立 GSSAPI 会话时,等待从客户端读取数据。 |
LibpqwalreceiverConnect |
WAL 接收器等待与远程服务器建立连接。 |
LibpqwalreceiverReceive |
WAL 接收器等待从远程服务器接收数据。 |
SslOpenServer |
尝试连接时等待 SSL。 |
WaitForStandbyConfirmation |
等待 WAL 被物理备用服务器接收和刷新。 |
WalSenderWaitForWal |
WAL 发送器进程等待 WAL 被刷新。 |
WalSenderWriteData |
在 WAL 发送器进程中处理来自 WAL 接收器回复时,等待任何活动。 |
表 27.8. 类型为 Extension
的等待事件
Extension 等待事件 |
描述 |
---|---|
Extension |
在扩展中等待。 |
表 27.9. 类型为 Io
的等待事件
IO 等待事件 |
描述 |
---|---|
AioIoCompletion |
等待另一个进程完成 IO。 |
AioIoUringExecution |
通过 io_uring 等待 IO 执行。 |
AioIoUringSubmit |
通过 io_uring 等待 IO 提交。 |
BasebackupRead |
等待基础备份从文件读取。 |
BasebackupSync |
等待基础备份写入的数据到达持久存储。 |
BasebackupWrite |
等待基础备份写入文件。 |
BuffileRead |
等待从缓冲文件中读取。 |
BuffileTruncate |
等待截断缓冲文件。 |
BuffileWrite |
等待写入缓冲文件。 |
ControlFileRead |
等待从 pg_control 文件读取。 |
ControlFileSync |
等待 pg_control 文件到达持久存储。 |
ControlFileSyncUpdate |
等待 pg_control 文件更新到达持久存储。 |
ControlFileWrite |
等待写入 pg_control 文件。 |
ControlFileWriteUpdate |
等待写入更新 pg_control 文件。 |
CopyFileCopy |
等待文件复制操作。 |
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 |
在 WAL 发送器时间线命令期间,等待从时间线历史文件读取。 |
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-tree 扫描所需的页面编号可用。 |
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 |
等待逻辑复制领导者应用进程将数据发送到并行应用进程。 |
LogicalParallelApplyStateChange |
等待逻辑复制并行应用进程更改状态。 |
LogicalSyncData |
等待逻辑复制远程服务器发送数据以进行初始表同步。 |
LogicalSyncStateChange |
等待逻辑复制远程服务器更改状态。 |
MessageQueueInternal |
等待另一个进程连接到共享消息队列。 |
MessageQueuePutMessage |
等待将协议消息写入共享消息队列。 |
MessageQueueReceive |
等待从共享消息队列接收字节。 |
MessageQueueSend |
等待将字节发送到共享消息队列。 |
MultixactCreation |
等待多事务创建完成。 |
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 |
等待启动进程发送流式复制的初始数据。 |
WalSummaryReady |
等待生成新的 WAL 摘要。 |
XactGroupUpdate |
等待组领导者在事务结束时更新事务状态。 |
表 27.11. 类型为 Lock
的等待事件
Lock 等待事件 |
描述 |
---|---|
advisory |
等待获取咨询用户锁。 |
applytransaction |
等待获取由逻辑复制订阅者应用的远程事务的锁。 |
extend |
等待扩展关系。 |
frozenid |
等待更新 pg_database .datfrozenxid 和 pg_database .datminmxid 。 |
object |
等待获取非关系数据库对象的锁。 |
page |
等待获取关系的页面的锁。 |
relation |
等待获取关系的锁。 |
spectoken |
等待获取推测性插入锁。 |
transactionid |
等待事务完成。 |
tuple |
等待获取元组的锁。 |
userlock |
等待获取用户锁。 |
virtualxid |
等待获取虚拟事务 ID 锁;请参阅 67.1 事务和标识符。 |
表 27.12. 类型为 Lwlock
的等待事件
LWLock 等待事件 |
描述 |
---|---|
AddinShmemInit |
等待管理扩展在共享内存中的空间分配。 |
AioUringCompletion |
通过 io_uring 等待另一个进程完成 IO。 |
AioWorkerSubmissionQueue |
等待访问 AIO 工作进程提交队列。 |
AutoFile |
等待更新 postgresql.auto.conf 文件。 |
Autovacuum |
等待读取或更新自动 vacuum 工作进程的当前状态。 |
AutovacuumSchedule |
等待确保已选择要进行自动 vacuum 的表仍然需要 vacuum。 |
BackgroundWorker |
等待读取或更新后台工作进程状态。 |
BtreeVacuum |
等待读取或更新 B-tree 索引的 vacuum 相关信息。 |
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 |
在并行 Append 计划执行期间,等待选择下一个子计划。 |
ParallelBtreeScan |
等待并行 B-tree 扫描计划执行期间同步工作进程。 |
ParallelHashJoin |
等待并行哈希连接计划执行期间同步工作进程。 |
ParallelQueryDSA |
等待并行查询动态共享内存分配。 |
ParallelVacuumDSA |
等待并行 vacuum 动态共享内存分配。 |
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 |
等待访问已完成的可串行化事务列表。 |
SerializablePredicateList |
等待访问可串行化事务持有的谓词锁列表。 |
SerializableXactHash |
等待读取或更新关于可串行化事务的信息。 |
SerialSLRU |
等待访问可串行化事务冲突 SLRU 缓存。 |
SharedTidBitmap |
在并行位图索引扫描期间,等待访问共享 TID 位图。 |
SharedTupleStore |
在并行查询期间,等待访问共享元组存储。 |
ShmemIndex |
等待在共享内存中查找或分配空间。 |
SInvalRead |
等待从共享目录无效队列中检索消息。 |
SInvalWrite |
等待将消息添加到共享目录无效队列。 |
SubtransBuffer |
等待子事务 SLRU 缓冲区的 I/O。 |
SubtransSLRU |
等待访问子事务 SLRU 缓存。 |
SyncRep |
等待读取或更新同步复制状态的信息。 |
SyncScan |
等待选择同步表扫描的起始位置。 |
TablespaceCreate |
等待创建或删除表空间。 |
TwoPhaseState |
等待读取或更新已准备事务的状态。 |
WaitEventCustom |
等待读取或更新自定义等待事件信息。 |
WALBufMapping |
等待替换 WAL 缓冲区中的页面。 |
WALInsert |
等待将 WAL 数据插入内存缓冲区。 |
WALSummarizer |
等待读取或更新 WAL 摘要状态。 |
WALWrite |
等待将 WAL 缓冲区写入磁盘。 |
WrapLimitsVacuum |
等待更新事务 ID 和多事务消耗的限制。 |
XactBuffer |
等待事务状态 SLRU 缓冲区的 I/O。 |
XactSLRU |
正在等待访问事务状态 SLRU 缓存。 |
XactTruncation |
正在等待执行 pg_xact_status 或更新可用于它的最旧事务 ID。 |
XidGen |
正在等待分配新的事务 ID。 |
表 27.13. Timeout
类型的等待事件
Timeout 等待事件 |
描述 |
---|---|
BaseBackupThrottle |
在基线备份期间,当限制活动时等待。 |
CheckpointWriteDelay |
在执行检查点期间,写入之间等待。 |
PgSleep |
由于调用 pg_sleep 或其同级函数而等待。 |
RecoveryApplyDelay |
由于延迟设置,在恢复期间等待应用 WAL。 |
RecoveryRetrieveRetryInterval |
在恢复期间,当 WAL 数据无法从任何源 (pg_wal 、归档或流) 获取时等待。 |
RegisterSyncRequest |
由于请求队列已满,在发送同步请求到检查点进程时等待。 |
SpinDelay |
在获取争用中的自旋锁时等待。 |
VacuumDelay |
在基于成本的 VACUUM 延迟点等待。 |
VacuumTruncate |
等待获取排他锁以截断在表 VACUUM 完成后留下的任何空页面。 |
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
pg_stat_replication
#视图 pg_stat_replication
将包含每个 WAL 发送进程一行,显示关于复制到该发送器连接的备用服务器的统计信息。仅列出直接连接的备用服务器;关于下游备用服务器的信息不可用。
表 27.14. pg_stat_replication
视图
列 类型 描述 |
---|
WAL 发送进程的进程 ID |
登录到此 WAL 发送进程的用户 OID |
登录到此 WAL 发送进程的用户名称 |
连接到此 WAL 发送器的应用程序名称 |
连接到此 WAL 发送器的客户端的 IP 地址。如果此字段为 NULL,则表示客户端通过服务器上的 Unix 套接字连接。 |
连接客户端的主机名,由 |
客户端用于与此 WAL 发送器通信的 TCP 端口号,如果使用 Unix 套接字则为 |
此进程启动的时间,即客户端连接到此 WAL 发送器的时间 |
此备用服务器的 |
当前的 WAL 发送器状态。可能的值为
|
在此连接上发送的最后一个写前日志位置 |
此备用服务器写入磁盘的最后一个写前日志位置 |
此备用服务器刷新到磁盘的最后一个写前日志位置 |
此备用服务器上重放到数据库的最后一个写前日志位置 |
从本地刷新最近的 WAL 到收到此备用服务器已写入(但尚未刷新或应用)的通知之间经过的时间。如果此服务器配置为同步备用,则可用于衡量 |
从本地刷新最近的 WAL 到收到此备用服务器已写入并刷新(但尚未应用)的通知之间经过的时间。如果此服务器配置为同步备用,则可用于衡量 |
从本地刷新最近的 WAL 到收到此备用服务器已写入、刷新并重放的通知之间经过的时间。如果此服务器配置为同步备用,则可用于衡量 |
此备用服务器在基于优先级的同步复制中被选为同步备用的优先级。这在基于法定人数的同步复制中没有影响。 |
此备用服务器的同步状态。可能的值为
|
从备用服务器收到的最后回复消息的发送时间 |
视图 pg_stat_replication
中报告的延迟时间是最近 WAL 被写入、刷新和重放所需的时间,以及发送器知道这一点的测量时间。这些时间代表了每个同步提交级别(如果远程服务器配置为同步备用)引入的提交延迟。对于异步备用服务器,replay_lag
列近似于最近事务在查询中可见之前的延迟。如果备用服务器已完全赶上发送服务器,并且没有更多 WAL 活动,则最近测量到的延迟时间将继续显示一小段时间,然后显示 NULL。
延迟时间对于物理复制自动工作。逻辑解码插件可以有选择地发出跟踪消息;如果它们不发出,跟踪机制将只显示 NULL 延迟。
报告的延迟时间不是对备用服务器假设当前重放速率需要多长时间才能赶上发送服务器的预测。这样的系统在新 WAL 生成时会显示类似的持续时间,但在发送器空闲时会有所不同。特别是,当备用服务器完全赶上时,pg_stat_replication
显示的是写入、刷新和重放最后一个已报告 WAL 位置所花费的时间,而不是一些用户期望的零。这与测量最近写入事务的同步提交和事务可见性延迟的目标一致。为了减少用户期望不同延迟模型的困惑,在完全重放的空闲系统中,延迟列会在短时间后恢复为 NULL。监控系统应选择如何表示此数据:缺失数据、零或继续显示最后一个已知值。
pg_stat_replication_slots
#视图 pg_stat_replication_slots
将包含每个逻辑复制槽一行,显示关于其使用情况的统计信息。
表 27.15. pg_stat_replication_slots
视图
列 类型 描述 |
---|
复制槽的群集范围内唯一标识符 |
当用于解码 WAL 中更改的逻辑解码使用的内存超过 |
在解码此槽的 WAL 中更改时,事务溢出到磁盘的次数。此计数器每次事务溢出时都会递增,并且同一个事务可能会溢出多次。 |
在为该槽执行 WAL 中更改的解码期间,溢出到磁盘的已解码事务数据量。此和其他溢出计数器可用于评估逻辑解码期间发生的 I/O,并允许调整 |
在用于解码此槽的 WAL 中更改的逻辑解码使用的内存超过 |
在解码此槽的 WAL 中更改时,事务流式传输到解码输出插件的次数。此计数器每次事务流式传输时都会递增,并且同一个事务可能会流式传输多次。 |
在解码此槽的 WAL 中更改时,为流式传输进行中的事务到解码输出插件而解码的事务数据量。此和其他此槽的流式传输计数器可用于调整 |
发送到此槽的解码输出插件的已解码事务数量。这仅计算顶级事务,不针对子事务递增。请注意,这包括流式传输和/或溢出的事务。 |
在解码此槽的 WAL 中更改时,用于将事务发送到解码输出插件而解码的事务数据量。请注意,这包括流式传输和/或溢出的数据。 |
最后重置这些统计信息的时间 |
pg_stat_wal_receiver
#视图 pg_stat_wal_receiver
将只包含一行,显示关于从该接收器连接的服务器的 WAL 接收器的统计信息。
表 27.16. pg_stat_wal_receiver
视图
列 类型 描述 |
---|
WAL 接收器进程的进程 ID |
WAL 接收器进程的活动状态 |
WAL 接收器启动时使用的第一个写前日志位置 |
WAL 接收器启动时使用的第一个时间线编号 |
已接收并写入磁盘的最后一个写前日志位置,但尚未刷新。此字段不应用于数据完整性检查。 |
已接收并刷新到磁盘的最后一个写前日志位置,此字段的初始值为 WAL 接收器启动时使用的第一个日志位置 |
已接收并刷新到磁盘的最后一个写前日志位置的时间线编号,此字段的初始值为 WAL 接收器启动时使用的第一个日志位置的时间线编号 |
从原始 WAL 发送器收到的最后一条消息的发送时间 |
从原始 WAL 发送器收到的最后一条消息的接收时间 |
报告给原始 WAL 发送器的最后一个写前日志位置 |
报告给原始 WAL 发送器的最后一个写前日志位置的时间 |
此 WAL 接收器使用的复制槽名称 |
WAL 接收器连接的 PostgreSQL 实例的主机。这可以是主机名、IP 地址,或者如果连接是通过 Unix 套接字,则为目录路径。(路径情况可以区分,因为它总是绝对路径,以 |
WAL 接收器连接的 PostgreSQL 实例的端口号。 |
此 WAL 接收器使用的连接字符串,安全敏感字段已混淆。 |
pg_stat_recovery_prefetch
#视图 pg_stat_recovery_prefetch
将只包含一行。列 wal_distance
、block_distance
和 io_depth
显示当前值,其他列显示可以与 pg_stat_reset_shared
函数重置的累积计数器。
表 27.17. pg_stat_recovery_prefetch
视图
列 类型 描述 |
---|
最后重置这些统计信息的时间 |
因不在缓冲区池中而预取的块数 |
因已在缓冲区池中而未预取的块数 |
因将被零初始化而未预取的块数 |
因尚不存在而未预取的块数 |
因 WAL 中包含完整页面映像而未预取的块数 |
因最近已预取而未预取的块数 |
预取器向前查看的字节数 |
预取器向前查看的块数 |
已发起但尚未完成的预取次数 |
pg_stat_subscription
#表 27.18. pg_stat_subscription
视图
列 类型 描述 |
---|
订阅的 OID |
订阅的名称 |
订阅工作进程的类型。可能的类型为 |
订阅工作进程的进程 ID |
如果此进程是并行应用工作进程,则为领导应用工作进程的进程 ID;如果此进程是领导应用工作进程或表同步工作进程,则为 NULL |
工作进程正在同步的关系的 OID;领导应用工作进程和并行应用工作进程为 NULL |
接收到的最后一个写前日志位置,此字段的初始值为 0;并行应用工作进程为 NULL |
从原始 WAL 发送器收到的最后一条消息的发送时间;并行应用工作进程为 NULL |
从原始 WAL 发送器收到的最后一条消息的接收时间;并行应用工作进程为 NULL |
报告给原始 WAL 发送器的最后一个写前日志位置;并行应用工作进程为 NULL |
报告给原始 WAL 发送器的最后一个写前日志位置的时间;并行应用工作进程为 NULL |
pg_stat_subscription_stats
#视图 pg_stat_subscription_stats
将包含每个订阅一行。
表 27.19. pg_stat_subscription_stats
视图
列 类型 描述 |
---|
订阅的 OID |
订阅的名称 |
应用更改时发生错误的次数。请注意,任何导致应用错误的冲突都会计入 |
在初始表同步期间发生错误的次数 |
在应用更改期间,行插入违反 |
在应用更改期间,更新应用于先前已被另一个源修改过的行的次数。有关此冲突的详细信息,请参阅 update_origin_differs。 |
在应用更改期间,更新后的行值违反 |
在应用更改期间,要更新的元组未找到的次数。有关此冲突的详细信息,请参阅 update_missing。 |
在应用更改期间,删除操作应用于先前已被另一个源修改过的行的次数。有关此冲突的详细信息,请参阅 delete_origin_differs。 |
在应用更改期间,要删除的元组未找到的次数。有关此冲突的详细信息,请参阅 delete_missing。 |
在应用更改期间,行插入或更新行值违反多个 |
最后重置这些统计信息的时间 |
pg_stat_ssl
#视图 pg_stat_ssl
将包含每个后端或 WAL 发送进程一行,显示关于此连接上 SSL 使用情况的统计信息。它可以与 pg_stat_activity
或 pg_stat_replication
在 pid
列上连接,以获取关于连接的更多详细信息。
表 27.20. pg_stat_ssl
视图
列 类型 描述 |
---|
后端或 WAL 发送进程的进程 ID |
如果此连接上使用了 SSL,则为 True |
使用的 SSL 版本,如果此连接上未使用 SSL,则为 NULL |
使用的 SSL 密码名称,如果此连接上未使用 SSL,则为 NULL |
使用的加密算法的位数,如果此连接上未使用 SSL,则为 NULL |
使用的客户端证书的专有名称(DN)字段,如果没有提供客户端证书或此连接上未使用 SSL,则为 NULL。如果 DN 字段长于 |
客户端证书的序列号,如果没有提供客户端证书或此连接上未使用 SSL,则为 NULL。证书序列号和证书颁发者的组合唯一标识一个证书(除非颁发者错误地重复使用序列号)。 |
客户端证书颁发者的 DN,如果没有提供客户端证书或此连接上未使用 SSL,则为 NULL。此字段与 |
pg_stat_gssapi
#视图 pg_stat_gssapi
将包含每个后端一行,显示关于此连接上 GSSAPI 使用情况的信息。它可以与 pg_stat_activity
或 pg_stat_replication
在 pid
列上连接,以获取关于连接的更多详细信息。
表 27.21. pg_stat_gssapi
视图
列 类型 描述 |
---|
后端的进程 ID |
如果为此连接使用了 GSSAPI 认证,则为 True |
用于认证此连接的主体,如果此连接未使用 GSSAPI 进行认证,则为 NULL。如果主体长度超过 |
如果此连接上正在使用 GSSAPI 加密,则为 True |
如果此连接上已委派 GSSAPI 凭据,则为 True。 |
pg_stat_archiver
#视图 pg_stat_archiver
将始终包含一个行,包含关于群集归档进程的数据。
表 27.22. pg_stat_archiver
视图
列 类型 描述 |
---|
已成功归档的 WAL 文件数量 |
最近成功归档的 WAL 文件名 |
最近一次成功归档操作的时间 |
归档 WAL 文件失败的尝试次数 |
最近一次失败的归档操作的 WAL 文件名 |
最近一次失败的归档操作的时间 |
最后重置这些统计信息的时间 |
通常,WAL 文件是按顺序归档的,从旧到新,但这不能保证,在特殊情况下(如提升备用服务器或崩溃恢复后)也无法保证。因此,不能假定 last_archived_wal
之前的所有文件也已成功归档。
pg_stat_io
#视图 pg_stat_io
将包含每个后端类型、目标 I/O 对象和 I/O 上下文的组合一行,显示群集范围内的 I/O 统计信息。不合理的组合将被省略。
目前,跟踪了关系(例如表、索引)和 WAL 活动的 I/O。但是,绕过共享缓冲区的关系 I/O(例如,在将表从一个表空间移动到另一个表空间时)目前未被跟踪。
表 27.23. pg_stat_io
视图
列 类型 描述 |
---|
后端类型(例如,后台工作进程、自动 VACUUM 工作进程)。有关 |
I/O 操作的目标对象。可能的值为
|
I/O 操作的上下文。可能的值为
|
读取操作的数量。 |
读取操作的总大小(以字节为单位)。 |
等待读取操作所花费的时间(毫秒)(如果启用了 track_io_timing 且 |
写入操作的数量。 |
写入操作的总大小(以字节为单位)。 |
等待写入操作所花费的时间(毫秒)(如果启用了 track_io_timing 且 |
进程请求内核写入永久存储的 |
等待写回操作所花费的时间(毫秒)(如果启用了 track_io_timing,否则为零)。这包括了排队写出请求的时间,以及可能花费的写出脏数据的时间。 |
关系扩展操作的数量。 |
关系扩展操作的总大小(以字节为单位)。 |
等待扩展操作所花费的时间(毫秒)。(如果启用了 track_io_timing 且 |
在共享缓冲区中找到所需块的次数。 |
为了腾出空间供其他用途而将块写入共享或本地缓冲区次数。 在 |
在 |
|
等待 fsync 操作所花费的时间(毫秒)(如果启用了 track_io_timing 且 |
最后重置这些统计信息的时间。 |
某些后端类型从不执行某些 I/O 对象和/或某些 I/O 上下文上的 I/O 操作。这些行将从视图中省略。例如,检查点进程不会检查临时表,因此对于 backend_type
checkpointer
和 object
temp relation
将没有行。
此外,某些 I/O 操作永远不会由特定后端类型或在特定 I/O 对象和/或特定 I/O 上下文中执行。这些单元格将为 NULL。例如,临时表不会被 fsync
,因此 fsyncs
对于 object
temp relation
将为 NULL。同样,后台写入器不执行读取,因此 reads
对于 backend_type
background writer
的行将为 NULL。
对于 object
wal
,fsyncs
和 fsync_time
跟踪在 issue_xlog_fsync
中完成的 WAL 文件的 fsync 活动。writes
和 write_time
跟踪在 XLogWrite
中完成的 WAL 文件的写入活动。有关更多信息,请参阅 第 28.5 节。
pg_stat_io
可用于指导数据库调优。例如:
跟踪 I/O 等待时间的列仅在启用 track_io_timing 时才非零。用户在引用这些列与其对应的 I/O 操作时应小心,以防 track_io_timing
在自上次统计信息重置以来的整个时间段内未被启用。
pg_stat_bgwriter
#视图 pg_stat_bgwriter
将始终包含一个行,包含关于群集后台写入器的数据。
表 27.24. pg_stat_bgwriter
视图
列 类型 描述 |
---|
后台写入器写入的缓冲区数量 |
后台写入器停止清理扫描的次数,因为它写入了过多的缓冲区 |
分配的缓冲区数量 |
最后重置这些统计信息的时间 |
pg_stat_checkpointer
#视图 pg_stat_checkpointer
将始终包含一个行,包含关于群集检查点进程的数据。
表 27.25. pg_stat_checkpointer
视图
列 类型 描述 |
---|
由于超时而安排的检查点数量 |
请求的检查点数量 |
已执行的检查点数量 |
由于超时或在尝试执行失败后而安排的重启点数量 |
请求的重启点数量 |
已执行的重启点数量 |
在检查点和重启点的处理过程中,文件被写入磁盘的部分所花费的总时间(毫秒) |
在检查点和重启点的处理过程中,文件被同步到磁盘的部分所花费的总时间(毫秒) |
在检查点和重启点期间写入的共享缓冲区数量 |
在检查点和重启点期间写入的 SLRU 缓冲区数量 |
最后重置这些统计信息的时间 |
如果服务器自上次检查点以来一直处于空闲状态,则可能会跳过检查点。 num_timed
和 num_requested
计算已完成和已跳过的检查点,而 num_done
仅跟踪已完成的检查点。同样,如果最后一个重放的检查点记录已经是最后一个重启点,则可能会跳过重启点。 restartpoints_timed
和 restartpoints_req
计算已完成和已跳过的重启点,而 restartpoints_done
仅跟踪已完成的重启点。
pg_stat_wal
#视图 pg_stat_wal
将始终包含一个行,包含关于群集 WAL 活动的数据。
表 27.26. pg_stat_wal
视图
列 类型 描述 |
---|
生成的 WAL 记录总数 |
生成的 WAL 全页映像总数 |
生成的 WAL 总量(以字节为单位) |
WAL 缓冲区已满而将 WAL 数据写入磁盘的次数 |
最后重置这些统计信息的时间 |
pg_stat_database
#视图 pg_stat_database
将包含群集中每个数据库一行,加上一个用于共享对象的行,显示数据库范围的统计信息。
表 27.27. pg_stat_database
视图
列 类型 描述 |
---|
此数据库的 OID,或属于共享关系的对象的 0 |
此数据库的名称,或共享对象的 |
当前连接到此数据库的后端数量,或共享对象的 |
此数据库中已提交的事务数量 |
此数据库中已回滚的事务数量 |
此数据库中读取的磁盘块数量 |
磁盘块已在缓冲区缓存中找到的次数,因此不需要读取(这仅包括 PostgreSQL 缓冲区缓存中的命中,不包括操作系统文件系统缓存) |
此数据库中通过顺序扫描获取的活动行数以及索引扫描返回的索引条目数 |
此数据库中通过索引扫描获取的活动行数 |
此数据库中的查询插入的行数 |
此数据库中的查询更新的行数 |
此数据库中的查询删除的行数 |
此数据库中因与恢复冲突而取消的查询数量。(冲突仅发生在备用服务器上;有关详细信息,请参阅 |
此数据库中的查询创建的临时文件数量。所有临时文件都将被计算在内,无论临时文件创建的原因是什么(例如,排序或哈希),也无论 log_temp_files 设置如何。 |
此数据库中的查询写入临时文件的总数据量。所有临时文件都将被计算在内,无论临时文件创建的原因是什么,也无论 log_temp_files 设置如何。 |
此数据库中检测到的死锁数量 |
此数据库(或共享对象)中检测到的数据页校验和失败次数,如果禁用了数据校验和,则为 NULL。 |
在此数据库(或共享对象)中检测到最后一次数据页校验和失败的时间,如果禁用了数据校验和,则为 NULL。 |
此数据库中后端读取数据文件块所花费的时间(毫秒)(如果启用了 track_io_timing,否则为零) |
此数据库中后端写入数据文件块所花费的时间(毫秒)(如果启用了 track_io_timing,否则为零) |
此数据库中的数据库会话所花费的时间(毫秒)(请注意,统计信息仅在会话状态更改时更新,因此如果会话长时间处于空闲状态,则不包括此空闲时间) |
在此数据库中执行 SQL 语句所花费的时间(毫秒)(这对应于 |
在此数据库中,在事务中空闲所花费的时间(毫秒)(这对应于 |
已建立到此数据库的总会话数 |
到此数据库的数据库会话因客户端连接丢失而终止的数量 |
到此数据库的数据库会话因致命错误而终止的数量 |
到此数据库的数据库会话因操作员干预而终止的数量 |
计划由该数据库上的查询启动的并行工作进程数 |
由该数据库上的查询启动的并行工作进程数 |
最后重置这些统计信息的时间 |
pg_stat_database_conflicts
#视图 pg_stat_database_conflicts
将包含每个数据库一行,显示数据库范围的关于因与备用服务器上的恢复冲突而发生的查询取消的统计信息。此视图仅在备用服务器上包含信息,因为主服务器上不会发生冲突。
表 27.28. pg_stat_database_conflicts
视图
列 类型 描述 |
---|
数据库的 OID |
此数据库的名称 |
此数据库中因删除表空间而被取消的查询数量 |
此数据库中因锁超时而被取消的查询数量 |
此数据库中因旧快照而被取消的查询数量 |
此数据库中因缓冲区固定而被取消的查询数量 |
此数据库中因死锁而被取消的查询数量 |
此数据库中因旧快照或主服务器上的 wal_level 太低而被取消的逻辑槽使用次数 |
pg_stat_all_tables
#视图 pg_stat_all_tables
将包含当前数据库中每个表(包括 TOAST 表)一行,显示关于对该特定表的访问的统计信息。视图 pg_stat_user_tables
和 pg_stat_sys_tables
包含相同的信息,但经过过滤,仅分别显示用户表和系统表。
表 27.29. pg_stat_all_tables
视图
列 类型 描述 |
---|
表的 OID |
此表所在的模式名称 |
此表的名称 |
在此表上启动的顺序扫描次数 |
此表上最后一次顺序扫描的时间,基于最近的事务停止时间 |
顺序扫描获取的活动行数 |
在此表上启动的索引扫描次数 |
此表上最后一次索引扫描的时间,基于最近的事务停止时间 |
索引扫描获取的活动行数 |
插入的总行数 |
更新的总行数。(这包括在 |
删除的总行数 |
HOT 更新的行数。这些更新不需要在索引中创建后继版本。 |
更新的行数,其中后继版本转到新的堆页,留下一个原始版本,其 |
估计的活动行数 |
估计的死行数 |
自上次分析此表以来修改的估计行数 |
自上次 VACUUM 此表以来插入的估计行数(不包括 |
上次手动 VACUUM 此表的时间(不包括 |
上次此表被 autovacuum 守护进程 VACUUM 的时间 |
上次手动分析此表的时间 |
上次此表被 autovacuum 守护进程分析的时间 |
手动 VACUUM 此表的次数(不包括 |
此表被 autovacuum 守护进程 VACUUM 的次数 |
手动分析此表的次数 |
此表被 autovacuum 守护进程分析的次数 |
手动 VACUUM 此表所花费的总时间(毫秒)(不包括 |
此表被 autovacuum 守护进程 VACUUM 的总时间(毫秒)。(这包括由于成本延迟而进入睡眠的时间。) |
手动分析此表所花费的总时间(毫秒)。(这包括由于成本延迟而进入睡眠的时间。) |
此表被 autovacuum 守护进程分析的总时间(毫秒)。(这包括由于成本延迟而进入睡眠的时间。) |
pg_stat_all_indexes
#视图 pg_stat_all_indexes
将包含当前数据库中每个索引一行,显示关于对该特定索引的访问的统计信息。视图 pg_stat_user_indexes
和 pg_stat_sys_indexes
包含相同的信息,但经过过滤,仅分别显示用户索引和系统索引。
表 27.30. pg_stat_all_indexes
视图
列 类型 描述 |
---|
此索引所在表的 OID |
此索引的 OID |
此索引所在模式的名称 |
此索引所在表的名称 |
此索引的名称 |
在此索引上启动的索引扫描次数 |
此索引上最后一次扫描的时间,基于最近的事务停止时间 |
从此索引返回的索引条目数量 |
使用此索引通过简单索引扫描从表中获取的活动行数 |
索引可用于简单索引扫描、“位图”索引扫描以及优化器。在位图扫描中,多个索引的输出可以通过 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_read
和 idx_tup_fetch
的计数也可能不同,因为 idx_tup_read
计算的是从索引检索到的索引条目,而 idx_tup_fetch
计算的是从表中获取的活动行。后者如果获取了任何死行或尚未提交的行,或者如果通过索引扫描避免了任何堆获取,则会减少。
索引扫描有时可能每次执行执行多次索引搜索。每次索引搜索都会增加 pg_stat_all_indexes
.idx_scan
,因此索引扫描的计数可能显著超过索引扫描执行节点执行的总数。
这可能发生在具有某些SQL构造的查询中,用于搜索匹配列表或数组中任何标量值列表的行(请参阅 第 9.25 节)。对于具有
构造的查询也可能发生这种情况,但仅当优化器将构造转换为等效的多值数组表示形式时。类似地,当 B-tree 索引扫描使用跳过扫描优化时,每次扫描重新定位到可能具有匹配元组的下一个索引叶页面时,都会执行一次索引搜索(请参阅 第 11.3 节)。column_name
= value1
OR column_name
= value2
...
EXPLAIN ANALYZE
输出每个索引扫描节点执行的总索引搜索次数。有关演示此工作原理的示例,请参阅 第 14.1.2 节。
pg_statio_all_tables
#视图 pg_statio_all_tables
将包含当前数据库中每个表(包括 TOAST 表)一行,显示关于对该特定表的 I/O 的统计信息。视图 pg_statio_user_tables
和 pg_statio_sys_tables
包含相同的信息,但经过过滤,仅分别显示用户表和系统表。
表 27.31. pg_statio_all_tables
视图
列 类型 描述 |
---|
表的 OID |
此表所在的模式名称 |
此表的名称 |
从此表读取的磁盘块数量 |
此表中的缓冲区命中次数 |
对此表的所有索引读取的磁盘块数量 |
对此表的所有索引中的缓冲区命中次数 |
从此表 TOAST 表(如果存在)读取的磁盘块数量 |
此表 TOAST 表(如果存在)中的缓冲区命中次数 |
从此表 TOAST 表索引(如果存在)读取的磁盘块数量 |
此表 TOAST 表索引(如果存在)中的缓冲区命中次数 |
pg_statio_all_indexes
#视图 pg_statio_all_indexes
将包含当前数据库中每个索引一行,显示关于对该特定索引的 I/O 的统计信息。视图 pg_statio_user_indexes
和 pg_statio_sys_indexes
包含相同的信息,但经过过滤,仅分别显示用户索引和系统索引。
表 27.32. pg_statio_all_indexes
视图
列 类型 描述 |
---|
此索引所在表的 OID |
此索引的 OID |
此索引所在模式的名称 |
此索引所在表的名称 |
此索引的名称 |
从此索引读取的磁盘块数量 |
此索引中的缓冲区命中次数 |
pg_statio_all_sequences
#视图 pg_statio_all_sequences
将包含当前数据库中每个序列一行,显示关于对该特定序列的 I/O 的统计信息。
表 27.33. pg_statio_all_sequences
视图
列 类型 描述 |
---|
序列的 OID |
此序列所在模式的名称 |
此序列的名称 |
从此序列读取的磁盘块数量 |
此序列中的缓冲区命中次数 |
pg_stat_user_functions
#视图 pg_stat_user_functions
将包含每个跟踪函数一行,显示关于该函数执行的统计信息。track_functions 参数控制确切要跟踪哪些函数。
表 27.34. pg_stat_user_functions
视图
列 类型 描述 |
---|
函数的 OID |
此函数所在的模式名称 |
此函数的名称 |
调用此函数的次数 |
在此函数及其调用的所有其他函数中花费的总时间(毫秒) |
仅在此函数本身中花费的总时间,不包括它调用的其他函数(毫秒) |
pg_stat_slru
#PostgreSQL 通过 SLRU
(简单最近最少使用)缓存访问某些磁盘上的信息。视图 pg_stat_slru
将包含每个跟踪的 SLRU 缓存一行,显示关于对缓存页的访问的统计信息。
对于作为核心服务器一部分的每个 SLRU
缓存,都有一个控制其大小的配置参数,后缀为 _buffers
。
表 27.35. pg_stat_slru
视图
列 类型 描述 |
---|
SLRU 的名称 |
初始化期间清零的块数 |
磁盘块已在 SLRU 中找到的次数,因此不需要读取(这仅包括 SLRU 中的命中,不包括操作系统文件系统缓存) |
为此 SLRU 读取的磁盘块数量 |
为此 SLRU 写入的磁盘块数量 |
为此 SLRU 检查存在的块数 |
为此 SLRU 刷新脏数据的次数 |
为此 SLRU 执行的截断次数 |
最后重置这些统计信息的时间 |
可以通过编写使用与上述标准视图相同的底层统计访问函数的查询来设置查看统计信息的其他方式。有关函数名称等详细信息,请参阅标准视图的定义。(例如,在 psql 中,您可以发出 \d+ pg_stat_activity
。)用于数据库范围统计信息的访问函数接受数据库 OID 作为参数来标识要报告的数据库。用于表和索引的函数接受表或索引 OID。用于函数范围统计信息的函数接受函数 OID。请注意,只能通过这些函数查看当前数据库中的表、索引和函数。
与累积统计系统相关的其他函数列在 表 27.36 中。
表 27.36. 其他统计函数
使用 pg_stat_reset()
也会重置 autovacuum 用来确定何时触发 vacuum 或 analyze 的计数器。重置这些计数器可能会导致 autovacuum 不执行必要的工作,从而可能导致表膨胀或表统计信息过时等问题。建议在重置统计信息后执行一次数据库范围的 ANALYZE
。
pg_stat_get_activity
是 pg_stat_activity
视图的底层函数,它返回一个记录集,包含每个后端进程的所有可用信息。有时,只获取部分信息可能更方便。在这种情况下,可以使用另一组每个后端进程的统计信息访问函数;这些函数在表 27.37 中显示。这些访问函数使用会话的后端 ID 号,这是一个小整数(>= 0),与任何并发会话的后端 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;
表 27.37. 每个后端进程的统计信息函数
函数 描述 |
---|
返回此后端进程最近一次查询的文本。 |
返回此后端进程最近一次查询开始的时间。 |
返回连接到此后端进程的客户端的 IP 地址。 |
返回客户端用于通信的 TCP 端口号。 |
返回此后端进程所连接数据库的 OID。 |
返回当前活动后端进程 ID 号的集合。 |
返回此后端进程的进程 ID。 |
返回此进程启动的时间。 |
返回指定 ID 的后端进程的子事务信息记录。返回的字段包括 |
返回登录到此后端进程的用户的 OID。 |
如果此后端进程当前正在等待,则返回等待事件类型名称,否则返回 NULL。有关详细信息,请参阅表 27.4。 |
返回此后端进程当前事务开始的时间。 |
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。