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_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
毫秒刷新一次(除非在构建服务器时进行了更改);因此,仍然处于进程或事务中的查询不会影响显示的总数,并且显示的信息会落后于实际活动。但是,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 中显示的动态统计视图中的一些信息是受到安全性的限制。普通用户只能看到有关自己的会话的所有信息(属于他们成员身份之一角色的会话)。在有关其他会话的行中,许多列将会是空值。然而,请注意,会话的存在及其一般属性(如会话用户和数据库)对于所有用户都是可见的。拥有内置角色 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 INDEX 或 REINDEX 的后端一行,显示当前的进度。请参阅 第 27.4.4 节。 |
pg_stat_progress_vacuum |
展示当前进度,针对每个运行 VACUUM 的后端(包括自动真空工作进程)。请参见 第 27.4.5 节。 |
pg_stat_progress_cluster |
展示当前进度,针对每个运行 CLUSTER 或 VACUUM 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_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 地址。如果该字段为空,则表示客户端通过服务器机器上的 Unix 套接字连接或者这是一个内部进程,例如自动真空。 |
连接客户端的主机名,由 |
客户端用于与此后端进行通信的 TCP 端口号,如果使用了 Unix 套接字,则为 |
此进程启动的时间。对于客户端后端,这是客户端连接到服务器的时间。 |
此进程当前事务的启动时间,如果没有活动事务,则为空。如果当前查询是其事务的第一个,则此列等于 |
当前活动查询启动的时间,或者如果 |
上次更改 |
后端正在等待的事件类型(如果有);否则为 NULL。参见 表 27.4。 |
|
此后端的当前总体状态。可能的值是
|
如有,此后端的顶级事务标识符;请参阅第 66.1 节。 |
当前后端的 |
此后端最近查询的标识符。如果 |
此后端最近查询的文本。如果 |
当前后端的类型。可能的类型为 |
wait_event
和 state
列是独立的。如果后端处于 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 .datfrozenxid 和 pg_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
pg_stat_replication
#对于每个 WAL 发送程序进程,pg_stat_replication
视图将包含一行,显示有关复制到该发送程序连接的备用服务器的统计信息。只列出直接连接的备用;没有关于下游备用服务器的信息可用。
表 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 视图将包含每条逻辑复制槽一行,显示其使用情况的统计信息。
表 27.15. pg_stat_replication_slots 视图
列类型 描述 |
---|
slot_name 复制槽的唯一的集群范围标识符 |
spill_txns 逻辑解码用于从 WAL 解码变更时使用的内存超过 logical_decoding_work_mem 时溢出到磁盘的事务数。该计数器对顶级事务和子事务都会递增。 |
spill_count 在为此插槽从 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 发送器的最后一个预写日志位置的时间 |
slot_name 此 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 |
订阅的名称 |
应用更改时出现错误的次数 |
在初始表同步期间发生错误的次数 |
上次重置这些统计信息的时间 |
pg_stat_ssl
#视图 pg_stat_ssl
将包含每个后端或 WAL 发送器进程一行,显示此连接上 SSL 使用情况的统计信息。可以将其在 pid
列上连接到 pg_stat_activity
或 pg_stat_replication
以获取更多关于此连接的详细信息。
表 27.20. 视图 pg_stat_ssl
列类型 描述 |
---|
后端或 WAL 发送器进程的进程 ID |
如果此连接使用了 SSL,则为 True |
如果此连接未使用 SSL,则使用 SSL 的版本或 NULL |
如果此连接未使用 SSL,则正在使用的 SSL 加密算法的名称或 NULL |
如果此连接未使用 SSL,则在正在使用的加密算法中的位数或 NULL |
如果此连接未使用 SSL 或未提供客户端证书,则使用的客户端证书中的识别名称 (DN) 字段或 NULL。如果 DN 字段长度超过 |
如果此连接未使用 SSL 或未提供客户端证书,则客户端证书的序列号或 NULL。证书序列号和证书颁发者的组合可以唯一识别证书(除非颁发者错误地重用了序列号)。 |
如果此连接未使用 SSL 或未提供客户端证书,则客户端证书的颁发者的 DN 或 NULL。此字段会被截断,类似于 |
pg_stat_gssapi
#视图 pg_stat_gssapi
将包含每个后端一行,显示此连接上 GSSAPI 使用情况的信息。可以将其在 pid
列上连接到 pg_stat_activity
或 pg_stat_replication
以获取更多关于此连接的详细信息。
表 27.21. 视图 pg_stat_gssapi
列类型 描述 |
---|
后端的进程 ID |
如果此连接使用 GSSAPI 身份验证,则为真 |
用于验证此连接的负责人,或如果未使用 GSSAPI 验证此连接,则为 NULL。如果负责人比 |
如果此连接使用 GSSAPI 加密,则为真 |
如果在此连接中委派了 GSSAPI 证书,则为真。 |
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 统计数据。将省略无意义的组合。
目前,跟踪关系(例如表、索引)上的 I/O。但是,目前不跟踪绕过共享缓冲区的 I/O(例如将表从一个表空间移动到另一个表空间时)。
表 27.23. pg_stat_io
视图
列类型 描述 |
---|
后端类型(例如后台工作进程、自动清理工作进程)。有关 |
I/O 操作的目标对象。可能的值包括
|
I/O 操作的上下文。可能的值包括
|
读取操作的数量,每个操作的大小为 |
以毫秒为单位在读取操作中花费的时间(如果 track_io_timing 已启用,否则为零) |
写入操作的数量,每个操作的大小为 |
以毫秒为单位在写入操作中花费的时间(如果 track_io_timing 已启用,否则为零) |
进程请求内核写入永久存储的 |
以毫秒为单位在写回操作中花费的时间(如果 track_io_timing 已启用,否则为零)。包括将写出请求排队花费的时间,以及潜在地将脏数据写出花费的时间。 |
关系扩展操作的数量,每个操作的大小为 |
以毫秒为单位在扩展操作中花费的时间(如果 track_io_timing 已启用,否则为零) |
I/O 读、写或扩展每个单位所需的字节数。 关系数据读取、写入和扩展以构建时参数 |
在共享缓冲区中找到所需块的次数。 |
为使某个块可供其他用途而从共享或本地缓冲区写入该块的次数。 在 |
在 |
|
fsync 操作中花费的时间(以毫秒为单位)(如果启用了 track_io_timing,否则为零) |
上次重置这些统计数据的时间。 |
某些后端类型绝不会在某些 I/O 对象和/或某些 I/O 上下文中执行 I/O 操作。这些行从视图中省略。例如,检查点器不会对临时表进行检查点,因此对于 backend_type
checkpointer
和 object
temp relation
将不会有行。
此外,某些后端类型或在某些 I/O 对象和/或某些 I/O 上下文中绝不会执行某些 I/O 操作。这些单元将为 NULL。例如,临时表不是 fsync
ed,因此对于 object
temp relation
,fsyncs
将为 NULL。还有,后台写入程序不会执行读取,因此对于 backend_type
background writer
的行,reads
将为 NULL。
pg_stat_io
可以用来了解数据库调整。例如
仅当启用track_io_timing时,跟踪 I/O 时间的列才是非零的。用户在将这些列与对应的 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
视图
列类型 描述 |
---|
由于超时而导致的计划检查点数量。请注意,如果服务器自上次检查点后一直处于闲置状态,则可能会跳过检查点,且此值同时统计已完成和已跳过的检查点 |
已执行的请求检查点数量 |
由于超时或尝试执行失败导致的计划重新启动点数量 |
已请求的重新启动点数量 |
已执行的重新启动点数量 |
以毫秒为单位,在检查点和重新启动点处理部分(其中文件被写入磁盘)中花费的总时间量 |
以毫秒为单位,在文件同步至磁盘的文件处理检查点和重新开始点部分花费的总时间 |
在检查点和重新开始点期间写入的缓冲区数量 |
上次重置这些统计信息的时间 |
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
#在当前数据库(包括 TOAST 表)中,pg_stat_all_tables
视图将针对每一张表包含一行,该行显示访问特定表的统计信息。pg_stat_user_tables
和 pg_stat_sys_tables
视图包含相同的信息,但经过筛选以分别仅显示用户表和系统表。
表 27.29. pg_stat_all_tables
视图
列类型 描述 |
---|
表的 OID |
此表所在的架构的名称 |
此表的名称 |
在此表上启动的顺序扫描数量 |
基于最近的事务停止时间,在此表上的最后顺序扫描时间 |
顺序扫描获取的动态行数 |
在此表上启动的索引扫描数量 |
在此表上最近事务停止时间的最后索引扫描时间 |
通过索引扫描获取的活动行数 |
插入的总行数 |
更新的总行数。(这包括 |
删除的总行数 |
HOT 更新的行数。在这些更新中,索引中不需要后续版本。 |
更新的行数,其中后续版本转到新的堆页,并将原始版本留存在一个指向不同堆页的 |
估计的活动行数 |
估计的死行数 |
此表上次分析以来的修改行数估计 |
此表上次 vacuum 以来的插入行数估计 |
此表上次手动 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
计数的是从表中获取的活动行。如果通过使用该索引获取任何已删除或尚未提交的行,或者如果通过仅索引扫描的方式避免了任何堆获取,则后者会更少。
使用某些SQL用于搜索与列表或多个标量值的数组中的任何值匹配的行(参见 第 9.25 节)的构造在查询执行期间执行多个“基元”索引扫描(每个标量值最多一次基元扫描)。每个内部基元索引扫描将使 pg_stat_all_indexes
.idx_scan
增值,因此索引扫描的计数可能会显著超过索引扫描执行器节点执行的总数。
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()
还会重置自动清理程序用于确定何时触发清理或分析的计数器。重置这些计数器会导致自动清理程序无法执行必要的操作,这可能会导致表格膨胀或表格统计信息过时等问题。建议在重置统计信息后执行数据库范围的 ANALYZE
。
pg_stat_get_activity
,pg_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。后端统计函数
函数 描述 |
---|
返回此后端最近查询的文本。 |
返回后端最近查询开始的时间。 |
返回连接到此后端的客户端的 IP 地址。 |
返回客户端用于通信的 TCP 端口号。 |
返回此后端连接到的数据库的 OID。 |
返回当前活动后端 ID 号的集合。 |
返回此后端的进程 ID。 |
返回该进程开始时的时刻。 |
返回有关指定 ID 的后端事务的信息记录。返回的字段为 |
返回登录到此后端的用户的 OID。 |
如果此 backrend 当前正在等待,返回等待事件类型名称,否则返回 NULL。有关详细信息,参见 表 27.4。 |
返回后端当前事务开始时的时刻。 |