27.2. 统计收集器

PostgreSQL统计收集器是一个支持收集和报告服务器活动信息的子系统。 目前,这个收集器可以对表和索引的访问计数,计数可以按磁盘块和个体行来进行。它还跟踪每个表中的总行数、每个表的清理和分析动作的信息。它也统计调用用户定义函数的次数以及在每次调用中花费的总时间。

PostgreSQL还支持报告当前其它服务器进程正在执行的命令。这是独立于收集器进程的功能。

27.2.1. 统计收集配置

因为统计收集给查询执行增加了一些负荷,系统可以被配置为收集或不收集信息。这由配置参数控制,它们通常在postgresql.conf中设置(关于设置配置参数的细节请见Chapter 18)。

参数track_activities允许监控当前被任意服务器进程执行的命令。

参数track_counts控制是否收集关于表和索引访问的统计信息。

参数track_functions启用对用户定义函数使用的跟踪。

参数track_io_timing启用对块读写次数的监控。

通常这些参数被设置在postgresql.conf中,这样它们会应用于所有服务器进程,但是可以在单个会话中使用SET命令打开或关闭它们(为了阻止普通用户对管理员隐藏他们的活动,只有超级用户被允许使用SET来改变这些参数)。

统计收集器通过临时文件将收集到的信息传送给其他PostgreSQL进程。这些文件被存储在名字由stats_temp_directory参数指定的目录中,默认是pg_stat_tmp。为了得到更好的性能,stats_temp_directory可以被指向一个基于 RAM 的文件系统来降低物理 I/O 需求。当服务器关闭时,一份统计数据的永久拷贝被存储在global子目录中,这样在服务器重启后统计信息能被保持。

27.2.2. 查看收集到的统计信息

Table 27-1中列出了一些预定义视图可以用来显示统计收集的结果。你也可以使用底层统计函数(在Section 27.2.3中讨论)来建立自定义的视图。

在使用统计信息监控当前活动时,你必须了解这些信息并非是实时更新的。每个独立的服务器进程只在进入闲置状态之前才向收集器传送新的统计计数;因此正在进行的查询或事务并不影响显示出来的总数。同样,收集器本身也最多每PGSTAT_STAT_INTERVAL毫秒(缺省为 500ms,除非在编译服务器的时候修改过)发送一 次新的报告。因此显示的信息总是落后于实际活动。但是由track_activities收集的当前查询信息总是最新的。

另一个重点是当一个服务器进程被要求显示任何这些统计信息时,它首先取得收集器进程最近发出的报告并且接着为所有统计视图和函数使用这个快照,直到它的当前事务的结尾。因此只要你继续当前事务,统计数据将会一直显示静态信息。相似地,当任何关于所有会话的当前查询的信息在一个事务中第一次被请求时,这样的信息将被收集。并且在整个事务期间将显示相同的信息。这是一种特性而非缺陷,因为它允许你在该统计信息上执行多个查询并且关联结果而不用担心那些数字会在你不知情的情况下改变。但是如果你希望用每个查询都看到新结果,要确保在任何事务块之外做那些查询。或者,你可以调用pg_stat_clear_snapshot(),那将丢弃当前事务的统计快照(如果有)。下一次对统计性信息的使用将导致获取一个新的快照。

一个事务也可以在视图pg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_stat_xact_user_functions中看到它自己的统计信息(还没有被传送给收集器)。这些数字并不像上面所述的那样行动,相反它们在事务期间持续被更新。

Table 27-1. 标准统计视图

视图名称描述
pg_stat_activity 每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。详见pg_stat_activity
pg_stat_bgwriter只有一行,显示有关后台写进程的活动的统计信息。详见pg_stat_bgwriter
pg_stat_database每个数据库一行,显示数据库范围的统计信息。详见pg_stat_database
pg_stat_all_tables 当前数据库中每个表一行,显示有关访问指定表的统计信息。详见pg_stat_all_tables
pg_stat_sys_tablespg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tablespg_stat_all_tables一样,但只显示用户表。
pg_stat_xact_all_tablespg_stat_all_tables相似,但计数动作只在当前事务内发生(还没有被包括在pg_stat_all_tables和相关视图中)。用于生存和死亡行数量的列以及清理和分析动作在此视图中不出现。
pg_stat_xact_sys_tablespg_stat_xact_all_tables一样,但只显示系统表。
pg_stat_xact_user_tablespg_stat_xact_all_tables一样,但只显示用户表。
pg_stat_all_indexes 当前数据库中的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。详见pg_stat_all_indexes
pg_stat_sys_indexespg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexespg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。 当前数据库中的每个表一行,显示有关在指定表上 I/O 的统计信息。详见pg_statio_all_tables
pg_statio_sys_tablespg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tablespg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。 当前数据库中的每个索引一行,显示与指定索引上的 I/O 有关的统计信息。详见pg_statio_all_indexes
pg_statio_sys_indexespg_statio_all_indexes一样,但只显示系统表上的索引。
pg_statio_user_indexespg_statio_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_sequences 当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。 当前数据库中的每个序列一行,显示与指定序列上的 I/O 有关的统计信息。详见pg_statio_all_sequences
pg_statio_sys_sequencespg_statio_all_sequences一样,但只显示系统序列(目前没有定义系统序列,因此这个视图总是为空)。
pg_statio_user_sequencespg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。详见pg_stat_user_functions
pg_stat_xact_user_functionspg_stat_user_functions相似,但是只统计在当前事务期间的调用(还没有被包括在pg_stat_user_functions中)。
pg_stat_replication每个 WAL 发送者进程一行,显示与到该发送者连接到的后备服务器的复制相关的统计信息。详见pg_stat_replication
pg_stat_database_conflicts 每个数据库一行,显示数据库范围内由于与后备服务器上的恢复冲突而取消的查询有关的统计信息。详见pg_stat_database_conflicts

针对每个索引的统计信息对于判断哪个索引正被使用以及它们的效果特别有用。

pg_statio_系列视图主要用于判断缓冲区的效果。当实际磁盘读取数远小于缓冲区命中时,这个缓冲能满足大部分读请求而无需进行内核调用。但是,这些统计信息并没有给出所有的事情:由于PostgreSQL处理磁盘 I/O 的方式,不在PostgreSQL缓冲区中的数据库仍然驻留在内核的 I/O 缓存中,并且因此可以被再次读取而不需要物理磁盘读取。我们建议希望了解PostgreSQL I/O 行为更多细节的用户将PostgreSQL统计收集器和操作系统中允许观察内核处理 I/O 的工具一起使用。

Table 27-2. pg_stat_activity 视图

类型描述
datidoid这个后端连接到的数据库的OID
datnamename这个后端连接到的数据库的名称
pidinteger这个后端的进程 ID
usesysidoid登录到这个后端的用户的 OID
usenamename登录到这个后端的用户的名称
application_nametext连接到这个后端的应用的名称
client_addrinet连接到这个后端的客户端的 IP 地址。如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)。
client_hostnametext已连接的客户端的主机名,由client_addr的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有log_hostname被启用时才会非空。
client_portinteger客户端用以和这个后端通信的 TCP 端口号,如果使用 Unix 套接字则为-1
backend_starttimestamp with time zone这个进程被启动的时间,即客户端是什么时候连接到服务器的
xact_starttimestamp with time zone这个进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于query_start
query_starttimestamp with time zone当前活动查询被开始的时间,如果state不是active,这个域为上一个查询被开始的时间
state_changetimestamp with time zonestate上一次被改变的时间
waitingboolean如果这个后端正在等待一个锁则为真
statetext这个后端的当前总体状态。可能的值是:

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

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

  • idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。

  • idle in transaction (aborted):这个状态与idle in transaction相似,不过在该事务中的一个语句导致了一个错误。

  • fastpath function call:后端正在执行一个 fast-path 函数。

  • disabled:如果在这个后端中track_activities被禁用,则报告这个状态。

querytext这个后端最近查询的文本。如果stateactive,这个域显示当前正在执行的查询。在所有其他状态下,它显示上一个被执行的查询。

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

Note: waitingstate列是独立的。如果一个后端处于active状态,它可能是也可能不是waiting。如果状态是active并且waiting为真,它意味着一个查询正在被执行,但是它被系统中某处的一个锁所阻塞。

Table 27-3. pg_stat_bgwriter视图

类型描述
checkpoints_timedbigint已经被执行的计划中检查点的数量
checkpoints_reqbigint已经被执行的请求检查点的数量
checkpoint_write_timedouble precision在文件被写入磁盘的检查点处理部分花费的总时间,以毫秒计
checkpoint_sync_timedouble precision在文件被同步到磁盘中的检查点处理部分花费的总时间,以毫秒计
buffers_checkpointbigint在检查点期间被写的缓冲区数目
buffers_cleanbigint被后台写进程写的缓冲区数目
maxwritten_cleanbigint后台写进程由于已经写了太多缓冲区而停止清洁扫描的次数
buffers_backendbigint被一个后端直接写的缓冲区数量
buffers_backend_fsyncbigint一个后端不得不自己执行fsync调用的次数(通常即使后端自己进行写操作,后台写进程也会处理这些)
buffers_allocbigint被分配的缓冲区数量
stats_resettimestamp with time zone这些统计信息上次被重置的时间

pg_stat_bgwriter视图将总是只有单独的一行,它包含集簇的全局数据。

Table 27-4. pg_stat_database视图

类型描述
datidoid一个数据库的 OID
datnamename这个数据库的名称
numbackendsinteger当前连接到这个数据库的后端数量。这是在这个视图中唯一一个返回反映当前状态值的列。所有其他列返回从上次重置以来积累的值。
xact_commitbigint在这个数据库中已经被提交的事务的数量
xact_rollbackbigint在这个数据库中已经被回滚的事务的数量
blks_readbigint在这个数据库中被读取的磁盘块的数量
blks_hitbigint磁盘块被发现已经在缓冲区中的次数,这样不需要一次读取(这只包括 PostgreSQL 缓冲区中的命中,而不包括在操作系统文件系统缓冲区中的命中)
tup_returnedbigint在这个数据库中被查询返回的行数
tup_fetchedbigint在这个数据库中被查询取出的行数
tup_insertedbigint在这个数据库中被查询插入的行数
tup_updatedbigint在这个数据库中被查询更新的行数
tup_deletedbigint在这个数据库中被查询删除的行数
conflictsbigint由于与恢复冲突而在这个数据库中被取消的查询的数目(冲突只发生在后备服务器上,详见pg_stat_database_conflicts)。
temp_filesbigint在这个数据库中被查询创建的临时文件的数量。所有临时文件都被统计,不管为什么创建这些临时文件(如排序或哈希),并且不管log_temp_files设置。
temp_bytesbigint在这个数据库中被查询写到临时文件中的数据总量。所有临时文件都被统计,不管为什么创建这些临时文件(如排序或哈希),并且不管log_temp_files设置。
deadlocksbigint在这个数据库中被检测到的死锁数
blk_read_timedouble precision在这个数据库中后端花费在读取数据文件块的时间,以毫秒计
blk_write_timedouble precision在这个数据库中后端花费在写数据文件块的时间,以毫秒计
stats_resettimestamp with time zone这些统计信息上次被重置的时间

pg_stat_database视图将为集簇中的每一个数据库包含有一行,每一行显示数据库范围的统计信息。

Table 27-5. pg_stat_all_tables视图

类型描述
relidoid一个表的 OID
schemanamename这个表所在的模式的名称
relnamename这个表的名称
seq_scanbigint在这个表上发起的顺序扫描的次数
seq_tup_readbigint被顺序扫描取得的活着的行的数量
idx_scanbigint在这个表上发起的索引扫描的次数
idx_tup_fetchbigint被索引扫描取得的活着的行的数量
n_tup_insbigint被插入的行数
n_tup_updbigint被更新的行数
n_tup_delbigint被删除的行数
n_tup_hot_updbigint被更新的 HOT 行数(即不要求独立索引更新的行更新)
n_live_tupbigint活着的行的估计数量
n_dead_tupbigint死亡行的估计数量
last_vacuumtimestamp with time zone上次这个表被手动清理的时间(不统计VACUUM FULL
last_autovacuumtimestamp with time zone上次这个表被自动清理守护进程清理的时间
last_analyzetimestamp with time zone上次这个表被手动分析的时间
last_autoanalyzetimestamp with time zone上次这个表被自动清理守护进程分析的时间
vacuum_countbigint这个表已被手工清理的次数(不统计VACUUM FULL
autovacuum_countbigint这个表已被自动清理守护进程清理的次数
analyze_countbigint这个表已被手工分析的次数
autoanalyze_countbigint这个表已被自动清理守护进程分析的次数

pg_stat_all_tables视图将为当前数据库中的每一个表(包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。pg_stat_user_tablespg_stat_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户和系统表。

Table 27-6. pg_stat_all_indexes视图

类型描述
relidoid这个索引的基表的 OID
indexrelidoid这个索引的 OID
schemanamename这个索引所在的模式的名称
relnamename这个索引的基表的名称
indexrelnamename这个索引的名称
idx_scanbigint在这个索引上发起的索引扫描次数
idx_tup_readbigint在这个索引上由扫描返回的索引项数量
idx_tup_fetchbigint被使用这个索引的简单索引扫描取得的活着的表行数量

pg_stat_all_indexes视图将为当前数据库中的每个索引包含一行,该行显示关于对该索引访问的统计信息。pg_stat_user_indexespg_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_readidx_tup_fetch计数也可能不同,因为idx_tup_read统计从该索引取得的索引项而idx_tup_fetch统计从表取得的或者的行。如果使用该索引取得了任何死亡行或还未提交的行,或者如果通过一次只用索引扫描的方式避免了任何堆获取,后者将较小。

Table 27-7. pg_statio_all_tables视图

类型描述
relidoid一个表的 OID
schemanamename这个表所在的模式的名称
relnamename这个表的名称
heap_blks_readbigint从这个表读取的磁盘块数量
heap_blks_hitbigint在这个表中的缓冲区命中数量
idx_blks_readbigint从这个表上所有索引中读取的磁盘块数
idx_blks_hitbigint在这个表上的所有索引中的缓冲区命中数量
toast_blks_readbigint从这个表的 TOAST 表(如果有)读取的磁盘块数
toast_blks_hitbigint在这个表的 TOAST 表(如果有)中的缓冲区命中数量
tidx_blks_readbigint从这个表的 TOAST 表索引(如果有)中读取的磁盘块数
tidx_blks_hitbigint在这个表的 TOAST 表索引(如果有)中的缓冲区命中数量

pg_statio_all_tables视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,该行显示指定表上有关 I/O 的统计信息。pg_statio_user_tablespg_statio_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户表和系统表。

Table 27-8. pg_statio_all_indexes视图

类型描述
relidoid这个索引的基表的 OID
indexrelidoid这个索引的 OID
schemanamename这个索引所在的模式的名称
relnamename这个索引的基表的名称
indexrelnamename这个索引的名称
idx_blks_readbigint从这个索引读取的磁盘块数
idx_blks_hitbigint在这个索引中的缓冲区命中数量

pg_statio_all_indexes视图将为当前数据库中的每个索引包含一行,该行显示指定索引上有关 I/O 的统计信息。pg_statio_user_indexespg_statio_sys_indexes视图包含相同的信息,但是被过滤得分别只显示用户索引和系统索引。

Table 27-9. pg_statio_all_sequences视图

类型描述
relidoid一个序列的 OID
schemanamename这个序列所在的模式的名称
relnamename这个序列的名称
blks_readbigint从这个序列中读取的磁盘块数
blks_hitbigint在这个序列中的缓冲区命中数量

pg_statio_all_sequences视图将为当前数据库中的每个序列包含一行,该行显示在指定序列上有关 I/O 的统计信息。

Table 27-10. pg_stat_user_functions视图

类型描述
funcidoid一个函数的 OID
schemanamename这个函数所在的模式的名称
funcnamename这个函数的名称
callsbigint这个函数已经被调用的次数
total_timedouble precision在这个函数以及它所调用的其他函数中花费的总时间,以毫秒计
self_timedouble precision在这个函数本身花费的总时间,不包括被它调用的其他函数,以毫秒计

pg_stat_user_functions视图将为每一个被追踪的函数包含一行,该行显示有关该函数执行的统计信息。track_functions参数控制到底哪些函数被跟踪。

Table 27-11. pg_stat_replication视图

类型描述
pidinteger一个 WAL 发送者进程的进程 ID
usesysidoid登入到这个 WAL 发送者进程的用户 OID
usenamename登入到这个 WAL 发送者进程的用户名
application_nametext连接到这个 WAL 发送者的应用名称
client_addrinet连接到这个 WAL 发送者的客户端的 IP 地址。如果这个域为空,它指示该客户端是通过一个服务器机器上的 Unix 套接字连接的。
client_hostnametext已连接客户端的主机名,由client_addr的一次反向 DNS 查找报告。这个域对于 IP 连接将只为非空,并且只有当log_hostname被启用时才为非空。
client_portinteger客户端用来和这个 WAL 发送者通信的 TCP 端口号,或者在使用一个 Unix 套接字时为-1
backend_starttimestamp with time zone这个进程被启动的时间,即当客户端连接到这个 WAL 发送者时
statetext当前 WAL 发送者的状态
sent_locationtext在这个连接上被发送的最后的事务日志位置
write_locationtext被这个后备服务器写入到磁盘的最后的事务日志位置
flush_locationtext被这个后备服务器刷入到磁盘的最后的事务日志位置
replay_locationtext被这个后备服务器重放到数据库中的最后的事务日志位置
sync_priorityinteger这个后备服务器被选中为同步后备的优先级
sync_statetext这个后备服务器的同步状态

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

Table 27-12. pg_stat_database_conflicts视图

类型描述
datidoid一个数据库的 OID
datnamename这个数据库的名称
confl_tablespacebigint在这个数据库中由于已删除表空间而被取消的查询数量
confl_lockbigint在这个数据库中由于锁超时而被取消的查询数量
confl_snapshotbigint在这个数据库中由于老旧快照而被取消的查询数量
confl_bufferpinbigint在这个数据库中由于被占用的缓冲区而被取消的查询数量
confl_deadlockbigint在这个数据库中由于死锁而被取消的查询数量

pg_stat_database_conflicts视图将为每一个数据库包含一行,该行显示数据库范围发生的由于与后备服务器上的恢复冲突而取消的查询相关的统计信息。这个视图将只包含在后备服务器上的信息,因为在主服务器上不会发生冲突。

27.2.3. 统计函数

其他查看统计信息的方法是直接使用查询,这些查询使用上述标准视图用到的底层统计信息访问函数。如要了解如函数名等细节,可参考标准视图的定义(例如,在psql中你可以发出\d+ pg_stat_activity)。针对每一个数据库统计信息的访问函数把一个数据库 OID 作为参数来标识要报告哪个数据库。而针对每个表和每个索引的函数要求表或索引 OID。针对每个函数统计信息的函数用一个函数 OID。注意只有在当前数据库中的表、索引和函数才能被这些函数看到。

与统计收集相关的额外函数被列举在Table 27-13中。

Table 27-13. 额外统计函数

函数返回类型描述
pg_backend_pid()integer 处理当前会话的服务器进程的进程 ID
pg_stat_get_activity(integer)setof record 返回具有指定 PID 的后端相关的一个记录,或者在指定NULL的情况下为系统中每一个活动后端返回一个记录。被返回的域是pg_stat_activity视图中的那些域的一个子集。
pg_stat_clear_snapshot()void 抛弃当前的统计快照
pg_stat_reset()void 把用于当前数据库的所有统计计数器重置为零(要求超级用户权限)
pg_stat_reset_shared(text)void 把某些集簇范围的统计计数器重置为零,具体哪些取决于参数(要求超级用户权限)。调用pg_stat_reset_shared('bgwriter')pg_stat_bgwriter视图中显示的所有计数器清零。
pg_stat_reset_single_table_counters(oid)void 把当前数据库中用于单个表或索引的统计数据重置为零(要求超级用户权限)
pg_stat_reset_single_function_counters(oid)void 把当前数据库中用于单个函数的统计信息重置为零(要求超级用户权限)

pg_stat_get_activitypg_stat_activity视图的底层函数,它返回一个行集合,其中包含有关每个后端进程所有可用的信息。有时只获得该信息的一个子集可能会更方便。在那些情况中,可以使用一组更老的针对每个后端的统计访问函数,这些显示在Table 27-14中。这些访问函数使用一个后端 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;

Table 27-14. 针对每个后端的统计函数

函数返回类型描述
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该客户端连接到这个后端的 IP 地址
pg_stat_get_backend_client_port(integer)integer该客户端用来通信的 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_waiting(integer)boolean如果这个后端当前正在等待一个锁,则为真
pg_stat_get_backend_xact_start(integer)timestamp with time zone当前事务被开始的时间