On this page
28.2. 统计信息收集器
PostgreSQL 的*“统计收集器” *是一个子系统,支持收集和报告有关服务器活动的信息。目前,收集器可以以磁盘块和单个行的方式计算对表和索引的访问。它还跟踪每个表中的总行数,以及有关每个表的清理和分析操作的信息。它还可以计算对用户定义函数的调用以及每个函数所花费的总时间。
PostgreSQL 还支持报告有关当前系统中正在发生的确切情况的动态信息,例如其他服务器进程当前正在执行的确切命令以及系统中存在哪些其他连接。此功能独立于收集器过程。
28 .2.1. 统计信息收集配置
由于收集统计信息会增加查询执行的开销,因此可以将系统配置为收集或不收集信息。这由通常在postgresql.conf
中设置的配置参数控制。 (有关设置配置参数的详细信息,请参见Chapter 19。)
参数track_activities可以监视任何服务器进程正在执行的当前命令。
参数track_counts控制是否收集有关表和索引访问的统计信息。
参数track_functions允许跟踪用户定义功能的使用。
参数track_io_timing允许监视块的读写时间。
通常,这些参数是在postgresql.conf
中设置的,以便将它们应用于所有服务器进程,但是可以使用SET命令在各个会话中将其打开或关闭。 (为防止普通用户向 Management 员隐藏活动,仅允许超级用户使用SET
更改这些参数.)
统计信息收集器通过临时文件将收集的信息传输到其他 PostgreSQL 进程。这些文件存储在stats_temp_directory参数命名的目录中,默认情况下为pg_stat_tmp
。为了获得更好的性能,可以将stats_temp_directory
指向基于 RAM 的文件系统,从而降低了物理 I/O 要求。当服务器完全关闭时,统计数据的永久副本存储在pg_stat
子目录中,以便可以在服务器重新启动时保留统计信息。当在服务器启动时执行恢复时(例如在立即关闭,服务器崩溃和时间点恢复之后),所有统计信息计数器将重置。
28 .2.2. 查看统计
Table 28.1中列出的几个 sched 义视图可用于显示系统的当前状态。 Table 28.2中还列出了其他一些视图,以显示统计信息收集的结果。或者,可以使用基础统计功能构建自定义视图,如Section 28.2.3中所述。
使用统计信息监视收集的数据时,重要的是要意识到信息不会立即更新。每个服务器进程都将在闲置之前将新的统计计数传输到收集器;因此仍在进行的查询或事务不会影响显示的总数。另外,收集器本身最多每PGSTAT_STAT_INTERVAL
毫秒(500 毫秒,除非在构建服务器时进行了更改)发出一次新报告。因此,显示的信息落后于实际活动。但是,由track_activities
收集的当前查询信息始终是最新的。
另一个重要的一点是,当服务器进程被要求显示任何这些统计信息时,它首先获取收集器进程发出的最新报告,然后 continue 将此快照用于所有统计视图和功能,直到其当前事务结束为止。因此,只要您 continue 当前事务,统计信息就会显示静态信息。类似地,当在事务中首次请求任何此类信息时,将收集有关所有会话的当前查询的信息,并且在整个事务中将显示相同的信息。这是一个功能,而不是错误,因为它使您可以对统计信息执行多个查询并关联结果,而不必担心数字在您下方变化。但是,如果您想在每个查询中看到新结果,请确保在任何事务块之外进行查询。或者,您可以调用pg_stat_clear_snapshot
(),这将丢弃当前事务的统计信息快照(如果有)。下次使用统计信息将导致获取新快照。
事务还可以在视图pg_stat_xact_all_tables
,pg_stat_xact_sys_tables
,pg_stat_xact_user_tables
和pg_stat_xact_user_functions
中查看其自己的统计信息(尚未传输到收集器)。这些数字与上面所述不符;相反,它们在整个 Transaction 过程中不断更新。
表 28.1. 动态统计数据视图
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_subscription |
每个订阅至少有一行,显示有关订阅工作程序的信息。有关详情,请参见pg_stat_subscription。 |
pg_stat_ssl |
每个连接(常规和复制)一行,显示有关此连接上使用的 SSL 的信息。有关详情,请参见pg_stat_ssl。 |
pg_stat_progress_vacuum |
每个运行VACUUM 的后端(包括自动清理工作进程)的一行,显示当前进度。参见Section 28.4.1。 |
表 28.2. 收集的统计数据视图
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_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 和相关视图中)。此视图中不存在活动行数和死行数以及真空和分析操作的列。 |
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_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_user_functions |
每个跟踪功能的一行,显示有关该功能执行的统计信息。有关详情,请参见pg_stat_user_functions。 |
pg_stat_xact_user_functions |
与pg_stat_user_functions 相似,但仅统计当前 Transaction 期间的呼叫(尚未包含在pg_stat_user_functions 中)。 |
每个索引的统计信息对于确定正在使用的索引以及索引的有效性特别有用。
pg_statio_
视图主要用于确定缓冲区高速缓存的有效性。当实际的磁盘读取次数远小于缓冲区命中次数时,则高速缓存可以满足大多数读取请求,而无需调用内核调用。但是,这些统计信息并不能说明全部问题:由于 PostgreSQL 处理磁盘 I/O 的方式,不在 PostgreSQL 缓冲区高速缓存中的数据可能仍驻留在内核的 I/O 高速缓存中,因此仍可能被提取。无需物理读取。建议有兴趣获取有关 PostgreSQL I/O 行为的更多详细信息的用户,结合使用 PostgreSQL 统计信息收集器和允许深入了解内核对 I/O 处理的 osUtil。
表 28.3. pg_stat_activity
查看
Column | Type | Description |
---|---|---|
datid |
oid |
后端连接到的数据库的 OID |
datname |
name |
该后端连接到的数据库的名称 |
pid |
integer |
该后端的进程 ID |
usesysid |
oid |
登录此后端的用户的 OID |
usename |
name |
登录到此后端的用户名 |
application_name |
text |
与此后端连接的应用程序的名称 |
client_addr |
inet |
与此后端连接的 Client 端的 IP 地址。如果此字段为 null,则表明 Client 端是通过服务器计算机上的 Unix 套接字连接的,或者这是内部进程,例如 autovacuum。 |
client_hostname |
text |
反向 DNS 查询client_addr 报告所连接 Client 端的主机名。对于 IP 连接,仅当启用log_hostname时,此字段将为非空。 |
client_port |
integer |
Client 端用于与此后端通信的 TCP 端口号;如果使用 Unix 套接字,则为-1 |
backend_start |
timestamp with time zone |
此过程开始的时间。对于 Client 端后端,这是 Client 端连接到服务器的时间。 |
xact_start |
timestamp with time zone |
开始该进程的当前事务的时间;如果没有活动的事务,则为 null。如果当前查询是其第一笔 Transaction,则此列等于query_start 列。 |
query_start |
timestamp with time zone |
启动当前活动查询的时间,或者如果state 不是active ,则上一次查询开始的时间 |
state_change |
timestamp with time zone |
state 上次更改的时间 |
wait_event_type |
text |
后端正在 await 的事件类型(如果有);否则为 NULL。可能的值为: |
LWLock :后端正在 await 轻量级锁定。每个这样的锁都会保护共享内存中的特定数据结构。 wait_event 将包含一个标识轻型锁用途的名称。 (某些锁具有特定的名称;其他锁是一组锁的一部分,每个锁具有相似的用途.)Lock :后端正在 await 重量级锁定。重量级锁(也称为锁 Management 器锁或简称为锁)主要保护 SQL 可见的对象(例如表)。但是,它们还用于确保某些内部操作(例如关系扩展)的互斥。 wait_event 将标识 await 的锁的类型。BufferPin :在没有其他进程可以检查数据缓冲区的时间段内,服务器进程正在 await 访问数据缓冲区。如果另一个进程持有一个打开的游标,该游标最后一次从有关缓冲区中读取数据,则可能会延长缓冲区的 await 时间。Activity :服务器进程处于空闲状态。系统进程在其主处理循环中 await 活动时使用它。 wait_event 将标识特定的 await 点。Extension :服务器进程正在 await 扩展模块中的活动。此类别对于模块跟踪自定义 await 点很有用。Client :服务器进程正在 await 用户应用程序在套接字上进行某些活动,并且服务器期望发生独立于其内部进程的事件。 wait_event 将标识特定的 await 点。IPC :服务器进程正在 await 服务器中另一个进程的活动。 wait_event 将标识特定的 await 点。Timeout :服务器进程正在 await 超时到期。 wait_event 将标识特定的 await 点。IO :服务器进程正在 awaitIO 完成。 wait_event 将标识特定的 await 点。 |
||
wait_event |
text |
await 事件名称(如果后端当前正在 await),否则为 NULL。有关详细信息,请参见Table 28.4。 |
state |
text |
此后端的当前总体状态。可能的值为:active :后端正在执行查询。idle :后端正在 await 新的 Client 端命令。idle in transaction :后端在事务中,但当前未执行查询。idle in transaction (aborted) :此状态类似于idle in transaction ,除了事务中的一条语句导致错误。fastpath function call :后端正在执行快速路径功能。disabled :如果在此后端中禁用了track_activities,则报告此状态。 |
backend_xid |
xid |
此后端的顶级事务标识符(如果有)。 |
backend_xmin |
xid |
当前后端的xmin 范围。 |
query |
text |
此后端的最新查询的文本。如果state 是active ,则此字段显示当前正在执行的查询。在所有其他状态下,它显示最后执行的查询。默认情况下,查询文本将被截断为 1024 个字符。可以通过参数track_activity_query_size更改此值。 |
backend_type |
text |
当前后端的类型。可能的类型是autovacuum launcher ,autovacuum worker ,background worker ,background writer ,client backend ,checkpointer ,startup ,walreceiver ,walsender 和walwriter 。 |
每个服务器进程的pg_stat_activity
视图将有一行,显示与该进程的当前活动有关的信息。
Note
wait_event
和state
列是独立的。如果后端处于active
状态,则在某些情况下它可能为waiting
,也可能不是。如果状态为active
且wait_event
为非空,则表示正在执行查询,但在系统中某处被阻止。
表 28.4. wait_event
说明
await 事件类型 | await 事件名称 | Description |
---|---|---|
LWLock |
ShmemIndexLock |
await 在共享内存中查找或分配空间。 |
OidGenLock |
await 分配或分配 OID。 | |
XidGenLock |
await 分配或分配 TransactionID。 | |
ProcArrayLock |
await 获取快照或在事务结束时清除事务 ID。 | |
SInvalReadLock |
await 从共享失效队列中检索或删除消息。 | |
SInvalWriteLock |
await 在共享失效队列中添加消息。 | |
WALBufMappingLock |
await 替换 WAL 缓冲区中的页面。 | |
WALWriteLock |
awaitWAL 缓冲区写入磁盘。 | |
ControlFileLock |
await 读取或更新控制文件或创建新的 WAL 文件。 | |
CheckpointLock |
await 执行检查点。 | |
CLogControlLock |
await 读取或更新 Transaction 状态。 | |
SubtransControlLock |
await 读取或更新子 Transaction 信息。 | |
MultiXactGenLock |
await 读取或更新共享多重状态。 | |
MultiXactOffsetControlLock |
await 读取或更新多重偏移 Map。 | |
MultiXactMemberControlLock |
await 读取或更新多重成员 Map。 | |
RelCacheInitLock |
await 读取或写入关系缓存初始化文件。 | |
CheckpointerCommLock |
awaitManagementfsync 请求。 | |
TwoPhaseStateLock |
await 读取或更新准备好的事务的状态。 | |
TablespaceCreateLock |
await 创建或删除表空间。 | |
BtreeVacuumLock |
await 读取或更新 B 树索引的与真空相关的信息。 | |
AddinShmemInitLock |
正在 awaitManagement 共享内存中的空间分配。 | |
AutovacuumLock |
自动真空工或 Launcher 正在 await 更新或读取自动真空工的当前状态。 | |
AutovacuumScheduleLock |
await 确保它选择用于抽真空的桌子仍然需要抽真空。 | |
SyncScanLock |
await 获取扫描在表上的开始位置以进行同步扫描。 | |
RelationMappingLock |
await 更新用于存储目录到文件节点 Map 的关系 Map 文件。 | |
AsyncCtlLock |
await 读取或更新共享通知状态。 | |
AsyncQueueLock |
await 阅读或更新通知消息。 | |
SerializableXactHashLock |
await 检索或存储有关可序列化事务的信息。 | |
SerializableFinishedListLock |
await 访问已完成的可序列化事务列表。 | |
SerializablePredicateLockListLock |
await 对可序列化事务持有的锁列表执行操作。 | |
OldSerXidLock |
await 读取或记录冲突的可序列化事务。 | |
SyncRepLock |
await 读取或更新有关同步副本的信息。 | |
BackgroundWorkerLock |
await 读取或更新后台工作程序状态。 | |
DynamicSharedMemoryControlLock |
await 读取或更新动态共享内存状态。 | |
AutoFileLock |
await 更新postgresql.auto.conf 文件。 |
|
ReplicationSlotAllocationLock |
await 分配或释放复制插槽。 | |
ReplicationSlotControlLock |
await 读取或更新复制插槽状态。 | |
CommitTsControlLock |
await 读取或更新事务提交时间戳。 | |
CommitTsLock |
await 读取或更新为事务时间戳记设置的最后一个值。 | |
ReplicationOriginLock |
await 设置,删除或使用复制源。 | |
MultiXactTruncationLock |
await 读取或截断多重信息。 | |
OldSnapshotTimeMapLock |
await 读取或更新旧的快照控制信息。 | |
BackendRandomLock |
await 生成一个随机数。 | |
LogicalRepWorkerLock |
await 对逻辑复制工作者的操作完成。 | |
CLogTruncationLock |
await 执行txid_status 或更新可用的最早的事务 ID。 |
|
clog |
在阻塞(事务状态)缓冲区上 awaitI/O。 | |
commit_timestamp |
在提交时间戳缓冲区上 awaitI/O。 | |
subtrans |
awaitI/O 子事务缓冲区。 | |
multixact_offset |
在多重偏移缓冲区上 awaitI/O。 | |
multixact_member |
在 multixact_member 缓冲区上 awaitI/O。 | |
async |
在异步(通知)缓冲区上 awaitI/O。 | |
oldserxid |
在 oldserxid 缓冲区上 awaitI/O。 | |
wal_insert |
await 将 WAL 插入内存缓冲区。 | |
buffer_content |
await 读取或写入内存中的数据页。 | |
buffer_io |
await 数据页面上的 I/O。 | |
replication_origin |
await 读取或更新复制进度。 | |
replication_slot_io |
在复制插槽上 awaitI/O。 | |
proc |
await 读取或更新快速路径锁定信息。 | |
buffer_mapping |
await 将数据块与缓冲池中的缓冲区关联。 | |
lock_manager |
await 为后端添加或检查锁,或者 await 加入或退出锁组(由并行查询使用)。 | |
predicate_lock_manager |
await 添加或检查谓词锁定信息。 | |
parallel_query_dsa |
await 并行查询动态共享内存分配锁。 | |
tbm |
awaitTBM 共享的迭代器锁定。 | |
Lock |
relation |
await 获取对关系的锁定。 |
extend |
await 扩展关系。 | |
page |
await 获取关系页面上的锁。 | |
tuple |
await 获取 Tuples 上的锁。 | |
transactionid |
awaitTransaction 完成。 | |
virtualxid |
await 获取虚拟 xid 锁。 | |
speculative token |
await 获取推测性插入锁。 | |
object |
await 获取对非关系数据库对象的锁定。 | |
userlock |
await 获取用户锁。 | |
advisory |
await 获取咨询用户锁。 | |
BufferPin |
BufferPin |
await 获取缓冲器上的引脚。 |
Activity |
ArchiverMain |
在存档器进程的主循环中 await。 |
AutoVacuumMain |
在自动真空启动器过程的主循环中 await。 | |
BgWriterHibernate |
在后台 Writer 进程中 await,正在休眠。 | |
BgWriterMain |
await 在背景 Writer 主要环路处理背景工作者。 | |
CheckpointerMain |
在检查点进程的主循环中 await。 | |
LogicalApplyMain |
在逻辑应用过程的主循环中 await。 | |
LogicalLauncherMain |
在逻辑启动器进程的主循环中 await。 | |
PgStatMain |
正在 await 统计信息收集器进程的主循环。 | |
RecoveryWalAll |
在恢复时从流中 awaitWAL。 | |
RecoveryWalStream |
await 恢复时,无法从任何类型的源(本地,归档或流)获得 WAL 数据时,再次尝试检索 WAL 数据。 | |
SysLoggerMain |
在 syslogger 进程的主循环中 await。 | |
WalReceiverMain |
在 WAL 接收器进程的主循环中 await。 | |
WalSenderMain |
在 WAL 发送者进程的主循环中 await。 | |
WalWriterMain |
在 WAL 编写器进程的主循环中 await。 | |
Client |
ClientRead |
正在 await 从 Client 端读取数据。 |
ClientWrite |
正在 await 将数据写入 Client 端。 | |
LibPQWalReceiverConnect |
在 WAL 接收器中 await 构建与远程服务器的连接。 | |
LibPQWalReceiverReceive |
在 WAL 接收器中 await 从远程服务器接收数据。 | |
SSLOpenServer |
尝试连接时 awaitSSL。 | |
WalReceiverWaitStart |
await 启动过程发送初始数据以进行流复制。 | |
WalSenderWaitForWAL |
await 在 WAL 发送者进程中刷新 WAL。 | |
WalSenderWriteData |
在 WAL 发送者进程中处理来自 WAL 接收者的答复时,await 任何活动。 | |
Extension |
Extension |
正在 await 分机。 |
IPC |
BgWorkerShutdown |
await 后台工作者关闭。 |
BgWorkerStartup |
await 后台工作者启动。 | |
BtreePage |
awaitcontinue 并行 B 树扫描所需的页码可用。 | |
ExecuteGather |
执行Gather 节点时正在 await 子进程的活动。 |
|
LogicalSyncData |
await 逻辑复制远程服务器发送数据以进行初始表同步。 | |
LogicalSyncStateChange |
await 逻辑复制远程服务器更改状态。 | |
MessageQueueInternal |
await 其他进程附加到共享消息队列中。 | |
MessageQueuePutMessage |
await 将协议消息写入共享消息队列。 | |
MessageQueueReceive |
await 从共享消息队列接收字节。 | |
MessageQueueSend |
正在 await 将字节发送到共享消息队列。 | |
ParallelBitmapScan |
await 并行位图扫描初始化。 | |
ParallelFinish |
await 并行工作者完成计算。 | |
ProcArrayGroupUpdate |
await 组长在 Transaction 结束时清除 TransactionID。 | |
ReplicationOriginDrop |
await 复制源变为非活动状态被删除。 | |
ReplicationSlotDrop |
await 复制插槽变为非活动状态被删除。 | |
SafeSnapshot |
awaitREAD ONLY DEFERRABLE 事务的快照。 |
|
SyncRep |
在同步复制期间 await 来自远程服务器的确认。 | |
Timeout |
BaseBackupThrottle |
节流活动时在基本备份期间 await。 |
PgSleep |
正在 await 名为pg_sleep 的进程。 |
|
RecoveryApplyDelay |
await 恢复时应用 WAL,因为它被延迟了。 | |
IO |
BufFileRead |
await 从缓冲文件读取。 |
BufFileWrite |
await 写入缓冲文件。 | |
ControlFileRead |
await 从控制文件读取。 | |
ControlFileSync |
await 控制文件到达稳定存储。 | |
ControlFileSyncUpdate |
await 更新控制文件以达到稳定的存储。 | |
ControlFileWrite |
await 写入控制文件。 | |
ControlFileWriteUpdate |
await 写入以更新控制文件。 | |
CopyFileRead |
在文件复制操作期间 await 读取。 | |
CopyFileWrite |
在文件复制操作期间 await 写入。 | |
DataFileExtend |
await 关系数据文件被扩展。 | |
DataFileFlush |
await 关系数据文件到达稳定存储。 | |
DataFileImmediateSync |
await 关系数据文件到稳定存储器的立即同步。 | |
DataFilePrefetch |
await 从关系数据文件进行异步预取。 | |
DataFileRead |
await 从关系数据文件中读取。 | |
DataFileSync |
await 对关系数据文件的更改以达到稳定的存储。 | |
DataFileTruncate |
await 关系数据文件被截断。 | |
DataFileWrite |
await 写入关系数据文件。 | |
DSMFillZeroWrite |
await 将零字节写入动态共享内存备份文件。 | |
LockFileAddToDataDirRead |
await 读取,同时在数据目录锁定文件中添加一行。 | |
LockFileAddToDataDirSync |
await 数据到达稳定的存储空间,同时在数据目录锁定文件中添加一行。 | |
LockFileAddToDataDirWrite |
在向数据目录锁定文件添加行的同时 await 写入。 | |
LockFileCreateRead |
创建数据目录锁定文件时正在 await 读取。 | |
LockFileCreateSync |
创建数据目录锁定文件时,await 数据到达稳定的存储。 | |
LockFileCreateWrite |
在创建数据目录锁定文件时 await 写入。 | |
LockFileReCheckDataDirRead |
在重新检查数据目录锁定文件期间 await 读取。 | |
LogicalRewriteCheckpointSync |
在检查点期间 await 逻辑重写 Map 到达稳定的存储。 | |
LogicalRewriteMappingSync |
在逻辑重写期间 awaitMap 数据到达稳定的存储。 | |
LogicalRewriteMappingWrite |
在逻辑重写期间 awaitMap 数据的写入。 | |
LogicalRewriteSync |
await 逻辑重写 Map 到达稳定的存储。 | |
LogicalRewriteTruncate |
在逻辑重写期间 await 截断 Map 数据。 | |
LogicalRewriteWrite |
await 逻辑重写 Map 的写入。 | |
RelationMapRead |
await 读取关系 Map 文件。 | |
RelationMapSync |
await 关系 Map 文件到达稳定存储。 | |
RelationMapWrite |
await 写入关系 Map 文件。 | |
ReorderBufferRead |
在重新排序缓冲区 Management 期间 await 读取。 | |
ReorderBufferWrite |
在重新排序缓冲区 Management 期间 await 写操作。 | |
ReorderLogicalMappingRead |
在重新排序缓冲区 Management 期间 await 读取逻辑 Map。 | |
ReplicationSlotRead |
await 从复制插槽控制文件读取。 | |
ReplicationSlotRestoreSync |
await 复制插槽控制文件到达稳定存储,然后将其还原到内存。 | |
ReplicationSlotSync |
await 复制插槽控制文件到达稳定存储。 | |
ReplicationSlotWrite |
await 写入复制插槽控制文件。 | |
SLRUFlushSync |
在检查点或数据库关闭期间,awaitSLRU 数据到达稳定的存储。 | |
SLRURead |
await 读取 SLRU 页面。 | |
SLRUSync |
写页面后 awaitSLRU 数据到达稳定存储。 | |
SLRUWrite |
await 写 SLRU 页。 | |
SnapbuildRead |
await 读取序列化的历史目录快照。 | |
SnapbuildSync |
await 序列化的历史目录快照到达稳定存储。 | |
SnapbuildWrite |
await 写入序列化的历史目录快照。 | |
TimelineHistoryFileSync |
await 通过流复制接收的时间轴历史记录文件到达稳定的存储。 | |
TimelineHistoryFileWrite |
await 通过流复制接收到的时间轴历史记录文件的写入。 | |
TimelineHistoryRead |
await 读取时间轴历史记录文件。 | |
TimelineHistorySync |
await 新创建的时间轴历史记录文件到达稳定存储。 | |
TimelineHistoryWrite |
await 写入新创建的时间轴历史记录文件。 | |
TwophaseFileRead |
await 读取两阶段状态文件。 | |
TwophaseFileSync |
await 两阶段状态文件到达稳定存储。 | |
TwophaseFileWrite |
await 两阶段状态文件的写入。 | |
WALBootstrapSync |
在引导过程中 awaitWAL 到达稳定的存储。 | |
WALBootstrapWrite |
在引导过程中 await 写入 WAL 页面。 | |
WALCopyRead |
通过复制现有的 WAL 段来 await 读取。 | |
WALCopySync |
await 通过复制现有 WAL 段创建的新 WAL 段以到达稳定的存储。 | |
WALCopyWrite |
通过复制现有的 WAL 段来 await 写操作。 | |
WALInitSync |
await 新初始化的 WAL 文件到达稳定存储。 | |
WALInitWrite |
在初始化新的 WAL 文件时 await 写入。 | |
WALRead |
await 读取 WAL 文件。 | |
WALSenderTimelineHistoryRead |
在 walsender timeline 命令期间 await 从时间线历史记录文件中读取。 | |
WALSyncMethodAssign |
分配 WAL 同步方法时,await 数据到达稳定的存储。 | |
WALWrite |
await 写入 WAL 文件。 |
Note
对于由 extensions 注册的付款,名称由 extensions 指定,并且将显示为wait_event
。用户很可能已经在后端之一中注册了付款(通过在动态共享内存中进行分配),在这种情况下其他后端将没有该信息,因此在这种情况下我们显示extension
。
这是一个如何查看 await 事件的示例
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 | ProcArrayLock
(2 rows)
表 28.5. pg_stat_replication
查看
Column | Type | Description |
---|---|---|
pid |
integer |
WAL 发送者进程的进程 ID |
usesysid |
oid |
登录到该 WAL 发送者进程的用户的 OID |
usename |
name |
登录到该 WAL 发送者进程的用户名 |
application_name |
text |
连接到该 WAL 发送者的应用程序的名称 |
client_addr |
inet |
连接到该 WAL 发送者的 Client 端的 IP 地址。如果此字段为 null,则表明 Client 端通过服务器计算机上的 Unix 套接字连接。 |
client_hostname |
text |
反向 DNS 查询client_addr 报告所连接 Client 端的主机名。对于 IP 连接,仅当启用log_hostname时,此字段将为非空。 |
client_port |
integer |
Client 端用于与此 WAL 发送者进行通信的 TCP 端口号;如果使用 Unix 套接字,则为-1 |
backend_start |
timestamp with time zone |
此过程开始的时间,即 Client 端连接到该 WAL 发送者的时间 |
backend_xmin |
xid |
hot_standby_feedback报告此备用数据库的xmin 范围。 |
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 和接收到该备用服务器已写入并刷新它(但尚未应用)的通知之间经过了一段时间。如果此服务器被配置为同步备用服务器,则可以用来确定提交时synchronous_commit
级别on
的延迟。
| replay_lag
| interval
|在本地刷新最近的 WAL 与接收到该备用服务器已写入,刷新并应用它的通知之间经过了一段时间。如果此服务器被配置为同步备用服务器,则可以用来确定提交时synchronous_commit
级别remote_apply
的延迟。
| sync_priority
| integer
|此备用服务器的优先级在基于优先级的同步复制中被选择为同步备用服务器。这对于基于仲裁的同步复制没有任何作用。
| sync_state
| text
|此备用服务器的同步状态。可能的值为:async
:此备用服务器是异步的。potential
:该备用服务器现在是异步的,但是如果当前同步服务器之一发生故障,则有可能变为同步服务器。sync
:此备用服务器是同步的。quorum
:该备用服务器被认为是仲裁备用的候选服务器。
pg_stat_replication
视图将在每个 WAL 发送者进程中包含一行,显示有关复制到该发送者的已连接备用服务器的统计信息。仅列出直接连接的备用数据库;没有有关下游备用服务器的信息。
在pg_stat_replication
视图中报告的滞后时间是对最近的 WAL 被写入,刷新和重放以及使发送者知道所花费的时间的度量。如果将远程服务器配置为同步备用服务器,则这些时间表示每个同步提交级别引入的(或将要引入的)提交延迟。对于异步备用数据库,replay_lag
列近似查询最近的事务变为可见之前的延迟。如果备用服务器已完全跟上发送服务器的速度,并且不再有 WAL 活动,则最近测量的延迟时间将 continue 显示一小段时间,然后显示 NULL。
延迟时间会自动进行物理复制。逻辑解码插件可以选择发出跟踪消息;如果没有,跟踪机制将仅显示 NULL 滞后。
Note
假设当前的重放速率,所报告的滞后时间并不是对备用服务器追上发送服务器将花费多长时间的预测。这样的系统在生成新的 WAL 时将显示相似的时间,但是在发送方变为空闲时将有所不同。特别是,当备用数据库完全恢复正常时,pg_stat_replication
显示写入,刷新和重播最近报告的 WAL 位置所花费的时间,而不是某些用户可能期望的零。这与测量最近写入事务的同步提交和事务可见性延迟的目标一致。为了减少对于期望使用不同延迟模型的用户的困惑,在完全重播的空闲系统上,延迟列会在短时间后恢复为 NULL。监视系统应选择将其表示为丢失的数据,零还是 continue 显示最后的已知值。
表 28.6. pg_stat_wal_receiver
查看
Column | Type | Description |
---|---|---|
pid |
integer |
WAL 接收器进程的进程 ID |
status |
text |
WAL 接收器进程的活动状态 |
receive_start_lsn |
pg_lsn |
启动 WAL 接收器时使用的第一个预写日志位置 |
receive_start_tli |
integer |
启动 WAL 接收器时使用的第一个时间轴编号 |
received_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 接收器使用的复制插槽名称 |
conninfo |
text |
此 WAL 接收器使用的连接字符串,对安全敏感的字段进行了混淆。 |
pg_stat_wal_receiver
视图将仅包含一行,显示有关来自该接收器的连接服务器的 WAL 接收器的统计信息。
表 28.7. pg_stat_subscription
查看
Column | Type | Description |
---|---|---|
subid |
oid |
订阅的 OID |
subname |
text |
订阅名称 |
pid |
integer |
订阅工作进程的进程 ID |
relid |
Oid |
Worker 正在同步的关系的 OID;主申请工作人员为 null |
received_lsn |
pg_lsn |
接收到的最后一个预写日志位置,该字段的初始值为 0 |
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 发送者报告的最后预写日志位置的时间 |
pg_stat_subscription
视图将为主要工作程序的每个预订包含一行(如果工作程序未在运行,则为空 PID),并为处理已订阅表的初始数据副本的工作程序提供额外的行。
表 28.8. pg_stat_ssl
查看
Column | Type | Description |
---|---|---|
pid |
integer |
后端或 WAL 发送者进程的进程 ID |
ssl |
boolean |
如果此连接上使用 SSL,则为 True |
version |
text |
正在使用的 SSL 版本,如果此连接上未使用 SSL,则为 NULL |
cipher |
text |
正在使用的 SSL 密码的名称;如果此连接上未使用 SSL,则为 NULL |
bits |
integer |
使用的加密算法中的位数,如果此连接上未使用 SSL,则为 NULL |
compression |
boolean |
如果正在使用 SSL 压缩,则为 True;否则为 false;如果在此连接上未使用 SSL,则为 NULL。 |
clientdn |
text |
使用的 Client 端证书的专有名称(DN)字段,如果未提供 Client 端证书或此连接上未使用 SSL,则为 NULL。如果 DN 字段长于NAMEDATALEN (标准版本中为 64 个字符),则此字段将被截断 |
pg_stat_ssl
视图将在每个后端或 WAL 发送者进程中包含一行,显示有关此连接上 SSL 使用情况的统计信息。可以将其连接到pid
列上的pg_stat_activity
或pg_stat_replication
以获得有关连接的更多详细信息。
表 28.9. pg_stat_archiver
查看
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 |
上次重置这些统计信息的时间 |
pg_stat_archiver
视图将始终只有一行,其中包含有关群集的存档程序进程的数据。
表 28.10. pg_stat_bgwriter
查看
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 |
上次重置这些统计信息的时间 |
pg_stat_bgwriter
视图将始终只有一行,其中包含群集的全局数据。
表 28.11. pg_stat_database
查看
Column | Type | Description |
---|---|---|
datid |
oid |
数据库的 OID |
datname |
name |
该数据库的名称 |
numbackends |
integer |
当前连接到该数据库的后端数。这是该视图中唯一返回反映当前状态的值的列;所有其他列均返回自上次复位以来的累计值。 |
xact_commit |
bigint |
此数据库中已提交的事务数 |
xact_rollback |
bigint |
此数据库中已回滚的事务数 |
blks_read |
bigint |
在此数据库中读取的磁盘块数 |
blks_hit |
bigint |
已在缓冲区高速缓存中找到磁盘块的次数,因此无需读取(这仅包括 PostgreSQL 缓冲区高速缓存中的命中,而不包括 os 的文件系统高速缓存) |
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 |
在此数据库中检测到的死锁数 |
blk_read_time |
double precision |
后端在此数据库中读取数据文件块所花费的时间(以毫秒为单位) |
blk_write_time |
double precision |
后端在此数据库中写入数据文件块所花费的时间(以毫秒为单位) |
stats_reset |
timestamp with time zone |
上次重置这些统计信息的时间 |
pg_stat_database
视图将为集群中的每个数据库包含一行,显示数据库范围的统计信息。
表 28.12. pg_stat_database_conflicts
查看
Column | Type | Description |
---|---|---|
datid |
oid |
数据库的 OID |
datname |
name |
该数据库的名称 |
confl_tablespace |
bigint |
由于删除了表空间,该数据库中已取消的查询数 |
confl_lock |
bigint |
该数据库中由于锁定超时而取消的查询数 |
confl_snapshot |
bigint |
由于旧快照而已取消的该数据库中的查询数 |
confl_bufferpin |
bigint |
由于固定了缓冲区,该数据库中已取消的查询数 |
confl_deadlock |
bigint |
该数据库中由于死锁而取消的查询数 |
pg_stat_database_conflicts
视图将每个数据库包含一行,显示整个数据库的统计信息,这些统计信息涉及由于与备用服务器上的恢复冲突而发生的查询取消。该视图将仅包含有关备用服务器的信息,因为在主服务器上不会发生冲突。
表 28.13. pg_stat_all_tables
查看
Column | Type | Description |
---|---|---|
relid |
oid |
表的 OID |
schemaname |
name |
该表所在的架构的名称 |
relname |
name |
表格名称 |
seq_scan |
bigint |
在此表上启动的 Sequences 扫描数 |
seq_tup_read |
bigint |
Sequences 扫描获取的活动行数 |
idx_scan |
bigint |
在此表上启动的索引扫描数 |
idx_tup_fetch |
bigint |
索引扫描获取的活动行数 |
n_tup_ins |
bigint |
插入的行数 |
n_tup_upd |
bigint |
更新的行数(包括 HOT 更新的行) |
n_tup_del |
bigint |
删除的行数 |
n_tup_hot_upd |
bigint |
HOT 已更新的行数(即,不需要单独的索引更新) |
n_live_tup |
bigint |
估计的活动行数 |
n_dead_tup |
bigint |
估计的死行数 |
n_mod_since_analyze |
bigint |
自上次分析此表以来,已修改的估计行数 |
last_vacuum |
timestamp with time zone |
上次手动清理此表的时间(不计VACUUM FULL ) |
last_autovacuum |
timestamp with time zone |
上次使用 autovacuum 守护程序清理该表的时间 |
last_analyze |
timestamp with time zone |
上次手动分析此表的时间 |
last_autoanalyze |
timestamp with time zone |
上次由 autovacuum 守护程序分析该表的时间 |
vacuum_count |
bigint |
手动清理此表的次数(不计VACUUM FULL ) |
autovacuum_count |
bigint |
该表已被 autovacuum 守护程序清除的次数 |
analyze_count |
bigint |
手动分析该表的次数 |
autoanalyze_count |
bigint |
autovacuum 守护程序对该表进行分析的次数 |
pg_stat_all_tables
视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,显示有关对该特定表的访问的统计信息。 pg_stat_user_tables
和pg_stat_sys_tables
视图包含相同的信息,但经过过滤仅分别显示用户表和系统表。
表 28.14. pg_stat_all_indexes
查看
Column | Type | Description |
---|---|---|
relid |
oid |
该索引的表的 OID |
indexrelid |
oid |
该索引的 OID |
schemaname |
name |
该索引所在的模式的名称 |
relname |
name |
该索引的表名 |
indexrelname |
name |
索引名称 |
idx_scan |
bigint |
在此索引上启动的索引扫描数 |
idx_tup_read |
bigint |
对该索引的扫描返回的索引条目数 |
idx_tup_fetch |
bigint |
使用此索引通过简单索引扫描获取的活动表行数 |
pg_stat_all_indexes
视图将为当前数据库中的每个索引包含一行,显示有关对该特定索引的访问的统计信息。 pg_stat_user_indexes
和pg_stat_sys_indexes
视图包含相同的信息,但经过过滤仅分别显示用户索引和系统索引。
索引可以由简单的索引扫描,“位图”索引扫描和优化器使用。在位图扫描中,可以通过 AND 或 OR 规则组合多个索引的输出,因此在使用位图扫描时,很难将单个堆行提取与特定索引相关联。因此,位图扫描会递增pg_stat_all_indexes
。所使用的索引的idx_tup_read
个计数,并且pg_stat_all_tables
递增。表的idx_tup_fetch
计数,但不影响pg_stat_all_indexes
。 idx_tup_fetch
。优化器还访问索引以检查提供的常量,这些常量的值在优化器统计信息的记录范围之外,因为优化器统计信息可能已过时。
Note
即使不使用位图扫描,idx_tup_read
和idx_tup_fetch
计数也可能不同,因为idx_tup_read
对从索引检索的索引条目进行计数,而idx_tup_fetch
对从表中获取的活动行进行计数。如果使用索引获取任何无效或尚未提交的行,或者通过仅索引扫描避免了任何堆获取,则后者将更少。
表 28.15. pg_statio_all_tables
查看
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 表索引中的缓冲区命中数(如果有) |
pg_statio_all_tables
视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,显示该特定表上有关 I/O 的统计信息。 pg_statio_user_tables
和pg_statio_sys_tables
视图包含相同的信息,但经过过滤仅分别显示用户表和系统表。
表 28.16. pg_statio_all_indexes
查看
Column | Type | Description |
---|---|---|
relid |
oid |
该索引的表的 OID |
indexrelid |
oid |
该索引的 OID |
schemaname |
name |
该索引所在的模式的名称 |
relname |
name |
该索引的表名 |
indexrelname |
name |
索引名称 |
idx_blks_read |
bigint |
从该索引读取的磁盘块数 |
idx_blks_hit |
bigint |
该索引中的缓冲区命中数 |
pg_statio_all_indexes
视图将为当前数据库中的每个索引包含一行,显示有关该特定索引的 I/O 的统计信息。 pg_statio_user_indexes
和pg_statio_sys_indexes
视图包含相同的信息,但经过过滤仅分别显示用户索引和系统索引。
表 28.17. pg_statio_all_sequences
查看
Column | Type | Description |
---|---|---|
relid |
oid |
序列的 OID |
schemaname |
name |
此序列所在的模式的名称 |
relname |
name |
该序列的名称 |
blks_read |
bigint |
从该序列读取的磁盘块数 |
blks_hit |
bigint |
此序列中的缓冲区命中数 |
pg_statio_all_sequences
视图将为当前数据库中的每个序列包含一行,显示有关该特定序列的 I/O 的统计信息。
表 28.18. pg_stat_user_functions
查看
Column | Type | Description |
---|---|---|
funcid |
oid |
函数的 OID |
schemaname |
name |
该函数所在的模式的名称 |
funcname |
name |
该功能的名称 |
calls |
bigint |
该函数被调用的次数 |
total_time |
double precision |
此函数及其调用的所有其他函数所花费的总时间(以毫秒为单位) |
self_time |
double precision |
在此函数本身中花费的总时间(不包括它调用的其他函数),以毫秒为单位 |
pg_stat_user_functions
视图将为每个跟踪的功能包含一行,显示有关该功能执行的统计信息。 track_functions参数可精确控制要跟踪的功能。
28 .2.3. 统计功能
可以通过编写查询来构建查看统计信息的其他方式,这些查询使用与上面显示的标准视图所使用的相同的基础统计信息访问功能。有关功能名称等详细信息,请查阅标准视图的定义。 (例如,在 psql 中,您可以发出\d+ pg_stat_activity
.)针对每个数据库的统计信息的访问函数将数据库 OID 作为参数来标识要报告的数据库。每个表和每个索引函数采用一个表或索引 OID。用于每个功能的统计信息的功能带有功能 OID。请注意,使用这些功能只能看到当前数据库中的表,索引和功能。
与统计信息收集相关的其他功能在Table 28.19中列出。
表 28.19. 附加统计功能
pg_stat_get_activity
(pg_stat_activity
视图的基础功能)返回一组记录,其中包含有关每个后端进程的所有可用信息。有时,仅获取此信息的子集可能更方便。在这种情况下,可以使用一组较旧的按后端统计信息访问功能;这些显示在Table 28.20中。这些访问功能使用后端 ID 号,范围从 1 到当前活动的后端数。函数pg_stat_get_backend_idset
提供了一种方便的方法来为每个活动的后端生成一行以调用这些函数。例如,要显示所有后端的 PID 和当前查询:
SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
pg_stat_get_backend_activity(s.backendid) AS query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
表 28.20. 每个后端统计功能
Function | Return Type | Description |
---|---|---|
pg_stat_get_backend_idset() |
setof integer |
当前活动的后端 ID 号集(从 1 到活动的后端数) |
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 |
与此后端连接的 Client 端的 IP 地址 |
pg_stat_get_backend_client_port(integer) |
integer |
Client 端用于通信的 TCP 端口号 |
pg_stat_get_backend_dbid(integer) |
oid |
后端连接到的数据库的 OID |
pg_stat_get_backend_pid(integer) |
integer |
该后端的进程 ID |
pg_stat_get_backend_start(integer) |
timestamp with time zone |
此过程开始的时间 |
pg_stat_get_backend_userid(integer) |
oid |
登录此后端的用户的 OID |
pg_stat_get_backend_wait_event_type(integer) |
text |
如果后端当前正在 await,则 await 事件类型名称,否则为 NULL。有关详情,请参见Table 28.4。 |
pg_stat_get_backend_wait_event(integer) |
text |
如果后端当前正在 await,则 await 事件名称,否则为 NULL。有关详情,请参见Table 28.4。 |
pg_stat_get_backend_xact_start(integer) |
timestamp with time zone |
当前事务开始的时间 |