9.3 9.4 9.5 9.6 10 11 12
阿里云PostgreSQL 问题报告 纠错本页面

27.2. 统计收集器

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

PostgreSQL还支持报告关于系统中正在发生什么的动态信息, 比如当前其它服务器进程正在执行的命令,系统中存在的其他链接。这是独立于收集器进程的功能。

27.2.1. 统计收集配置

因为统计收集给查询执行增加了一些负荷,系统可以被配置为收集或不收集信息。 这是由配置参数控制的,它们通常在postgresql.conf中设置 (关于设置配置参数的细节请见第 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 需求。 当服务器干净地关闭时,一份统计数据的永久拷贝被存储在pg_stat 子目录中,这样统计数据可以在服务器重新启动时保留。当在服务器启动时执行恢复时 (例如立即关闭、服务器崩溃以及时间点恢复之后),所有统计计数器会被重置。

27.2.2. 查看统计信息

表 27-1中列出了一些预定义视图, 可以用来显示系统的当前状态,在表 27-2 中还列出了几个其他视图可以用来显示统计收集的结果。你也可以使用底层统计函数 (在第 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中看到自己的统计信息 (还没有被传送给收集器)。这些数字并不像上面所说的那样行动, 相反它们在整个事务中持续更新。

表 27-1. 动态统计视图

视图名称描述
pg_stat_activity 每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。 详见pg_stat_activity
pg_stat_replication 每个 WAL 发送者进程一行,显示与到该发送者连接到的后备服务器的复制相关的统计信息。 详见pg_stat_replication
pg_stat_ssl每个连接(普通或复制)一行,显示关于该连接中使用的SSL的信息。 详细信息请参阅pg_stat_ssl

表 27-2. 收集的统计视图

视图名称描述
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_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 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。 详见pg_stat_all_indexes
pg_stat_sys_indexespg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexespg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中的每个表一行,显示有关指定表上 I/O 的统计信息。 详见pg_statio_all_tables
pg_statio_sys_tablespg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tablespg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中的每个索引一行,显示有关指定索引上 I/O 的统计信息。 详见pg_statio_all_indexes
pg_statio_sys_indexespg_statio_all_indexes一样,但只显示系统表上的索引。
pg_statio_user_indexespg_statio_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_sequences 当前数据库中的每个序列一行,显示有关指定序列上 I/O 的统计信息。 详见pg_statio_all_sequences
pg_statio_sys_sequencespg_statio_all_sequences一样,但只显示系统序列 (目前没有定义系统序列,因此这个视图总是为空)。
pg_statio_user_sequencespg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。 详见pg_stat_user_functions
pg_stat_xact_user_functionspg_stat_user_functions相似, 但是只统计在当前事务期间的调用(还没有被包括在 pg_stat_user_functions中)。

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

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

表 27-3. 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:后端正在执行一个快速路径函数。

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

backend_xidxid这个后端的顶层事务标识符(如果存在)。
backend_xminxid当前后端的xmin范围。
querytext这个后端最近查询的文本。如果stateactive, 这个域显示当前正在执行的查询。在所有其他状态下,它显示上一个被执行的查询。

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

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

表 27-4. pg_stat_replication视图

类型描述
pidintegerWAL 发送者进程的进程 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 发送者时
backend_xminxidhot_standby报告的这个后备机的xmin范围。
statetext当前 WAL 发送者的状态
sent_locationpg_lsn在这个连接上被发送的最后的事务日志位置
write_locationpg_lsn被这个后备服务器写入到磁盘的最后的事务日志位置
flush_locationpg_lsn被这个后备服务器刷入到磁盘的最后的事务日志位置
replay_locationpg_lsn后备服务器上重放到数据库中的最后的事务日志位置
sync_priorityinteger这个后备服务器被选中为同步后备的优先级
sync_statetext这个后备服务器的同步状态

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

表 27-5. pg_stat_ssl 视图

类型描述
pidinteger后端或WAL发送者进程的进程ID
sslboolean如果在此连接上使用SSL,则为true
versiontext正在使用的SSL版本,如果SSL未在此连接上使用,则为NULL
ciphertext正在使用的SSL密码的名称,如果此连接上未使用SSL,则为NULL
bitsinteger所使用的加密算法中的位数,如果此连接上未使用SSL,则为NULL
compressionboolean如果正在使用SSL压缩,则为true,否则为false, 如果SSL未在此连接上使用,则为NULL
clientdntext来自所使用的客户端证书的可分辨名称(DN)字段, 如果未提供客户端证书或者SSL未在此连接上使用,则为NULL。 如果DN字段长于NAMEDATALEN(标准构建中为64个字符), 则此字段将被截断

pg_stat_ssl视图将为每个后端或WAL发送者进程包含一行, 显示有关此连接上的SSL使用情况的统计信息。它可以连接到pid 列上的pg_stat_activitypg_stat_replication, 以获取有关连接的更多详细信息。

表 27-6. pg_stat_archiver视图

类型描述
archived_countbigint已被成功归档的 WAL 文件数量
last_archived_waltext最后一个被成功归档的 WAL 文件名称
last_archived_timetimestamp with time zone最后一次成功归档操作的时间
failed_countbigint尝试归档 WAL 文件失败的次数
last_failed_waltext最后一次失败的归档操作的 WAL 文件名称
last_failed_timetimestamp with time zone最后一次失败的归档操作的时间
stats_resettimestamp with time zone这些统计信息最后一次被重置的时间

pg_stat_archiver视图将总是只有一行, 该行包含着有关集簇的归档进程的数据。

表 27-7. 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视图将总是只有一行,它包含集簇的全局数据。

表 27-8. 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视图将为集簇中的每一个数据库包含有一行, 显示数据库范围的统计信息。

表 27-9. pg_stat_database_conflicts视图

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

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

表 27-10. 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死亡行的估计数量
n_mod_since_analyzebigint自从这个表最后被分析后,修改的行数的估计
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 视图包含相同的信息,但是被过滤得分别只显示用户和系统表。

表 27-11. 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。 优化器还访问索引以检查其值超出优化器统计信息的记录范围的提供的常量, 因为优化器统计信息可能已过时。

注意: 即使不用位图扫描,idx_tup_readidx_tup_fetch 计数也可能不同,因为idx_tup_read统计从该索引取得的索引项而 idx_tup_fetch统计从表取得的活的行。 如果使用该索引取得了任何死亡行或还未提交的行, 或者如果通过一次只用索引扫描的方式避免了任何堆获取,后者将较小。

表 27-12. 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视图包含相同的信息, 但是被过滤得分别只显示用户表和系统表。

表 27-13. 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视图包含相同的信息, 但是被过滤得分别只显示用户索引和系统索引。

表 27-14. pg_statio_all_sequences视图

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

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

表 27-15. pg_stat_user_functions视图

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

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

27.2.3. 统计函数

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

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

表 27-16. 额外统计函数

函数返回类型描述
pg_backend_pid()integer 处理当前会话的服务器进程的进程 ID
pg_stat_get_activity(integer)setof record 返回具有指定 PID 的后端相关的一个信息记录,或者在指定NULL 的情况下为系统中每一个活动后端返回一个记录。被返回的域是 pg_stat_activity视图中的那些域的一个子集。
pg_stat_get_snapshot_timestamp()timestamp with time zone 返回当前统计快照的时间戳
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_shared('archiver') 将会把pg_stat_archiver视图中展示的所有计数器清零。
pg_stat_reset_single_table_counters(oid)void 把当前数据库中用于单个表或索引的统计数据重置为零(要求超级用户权限)
pg_stat_reset_single_function_counters(oid)void 把当前数据库中用于单个函数的统计信息重置为零(要求超级用户权限)

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

表 27-17. 针对每个后端的统计函数

函数返回类型描述
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当前事务开始的时间
<
/BODY >