PostgreSQL 9.3.4 文档 | ||||
---|---|---|---|---|
Prev | Up | Chapter 27. 监控数据库活动 | Next |
PostgreSQL的统计收集器是一个支持收集和报告服务器活动信息的子系统。 目前,这个收集器可以对表和索引的访问计数,计数可以按磁盘块和个体行来进行。它还跟踪每个表中的总行数、每个表的清理和分析动作的信息。它也统计调用用户定义函数的次数以及在每次调用中花费的总时间。
PostgreSQL还支持报告当前其它服务器进程正在执行的命令。这是独立于收集器进程的功能。
因为统计收集给查询执行增加了一些负荷,系统可以被配置为收集或不收集信息。这由配置参数控制,它们通常在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子目录中,这样在服务器重启后统计信息能被保持。
Table 27-1中列出了一些预定义视图可以用来显示统计收集的结果。你也可以使用底层统计函数(在Section 27.2.3中讨论)来建立自定义的视图。
在使用统计信息监控当前活动时,你必须了解这些信息并非是实时更新的。每个独立的服务器进程只在进入闲置状态之前才向收集器传送新的统计计数;因此正在进行的查询或事务并不影响显示出来的总数。同样,收集器本身也最多每PGSTAT_STAT_INTERVAL毫秒(缺省为 500ms,除非在编译服务器的时候修改过)发送一 次新的报告。因此显示的信息总是落后于实际活动。但是由track_activities收集的当前查询信息总是最新的。
另一个重点是当一个服务器进程被要求显示任何这些统计信息时,它首先取得收集器进程最近发出的报告并且接着为所有统计视图和函数使用这个快照,直到它的当前事务的结尾。因此只要你继续当前事务,统计数据将会一直显示静态信息。相似地,当任何关于所有会话的当前查询的信息在一个事务中第一次被请求时,这样的信息将被收集。并且在整个事务期间将显示相同的信息。这是一种特性而非缺陷,因为它允许你在该统计信息上执行多个查询并且关联结果而不用担心那些数字会在你不知情的情况下改变。但是如果你希望用每个查询都看到新结果,要确保在任何事务块之外做那些查询。或者,你可以调用pg_stat_clear_snapshot
(),那将丢弃当前事务的统计快照(如果有)。下一次对统计性信息的使用将导致获取一个新的快照。
一个事务也可以在视图pg_stat_xact_all_tables、pg_stat_xact_sys_tables、pg_stat_xact_user_tables和pg_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_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 | 当前数据库中的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。详见pg_stat_all_indexes。 |
pg_stat_sys_indexes | 和pg_stat_all_indexes一样,但只显示系统表上的索引。 |
pg_stat_user_indexes | 和pg_stat_all_indexes一样,但只显示用户表上的索引。 |
pg_statio_all_tables | 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。 当前数据库中的每个表一行,显示有关在指定表上 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 | 当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。 当前数据库中的每个索引一行,显示与指定索引上的 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 | 当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。 当前数据库中的每个序列一行,显示与指定序列上的 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 | 对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。详见pg_stat_user_functions。 |
pg_stat_xact_user_functions | 和pg_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 视图
列 | 类型 | 描述 |
---|---|---|
datid | oid | 这个后端连接到的数据库的OID |
datname | name | 这个后端连接到的数据库的名称 |
pid | integer | 这个后端的进程 ID |
usesysid | oid | 登录到这个后端的用户的 OID |
usename | name | 登录到这个后端的用户的名称 |
application_name | text | 连接到这个后端的应用的名称 |
client_addr | inet | 连接到这个后端的客户端的 IP 地址。如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)。 |
client_hostname | text | 已连接的客户端的主机名,由client_addr的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有log_hostname被启用时才会非空。 |
client_port | integer | 客户端用以和这个后端通信的 TCP 端口号,如果使用 Unix 套接字则为-1 |
backend_start | timestamp with time zone | 这个进程被启动的时间,即客户端是什么时候连接到服务器的 |
xact_start | timestamp with time zone | 这个进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于query_start。 |
query_start | timestamp with time zone | 当前活动查询被开始的时间,如果state不是active,这个域为上一个查询被开始的时间 |
state_change | timestamp with time zone | state上一次被改变的时间 |
waiting | boolean | 如果这个后端正在等待一个锁则为真 |
state | text | 这个后端的当前总体状态。可能的值是:
|
query | text | 这个后端最近查询的文本。如果state为active,这个域显示当前正在执行的查询。在所有其他状态下,它显示上一个被执行的查询。 |
pg_stat_activity视图将为每一个服务器进程有一行,显示与该进程的当前活动相关的信息。
Note: waiting和state列是独立的。如果一个后端处于active状态,它可能是也可能不是waiting。如果状态是active并且waiting为真,它意味着一个查询正在被执行,但是它被系统中某处的一个锁所阻塞。
Table 27-3. pg_stat_bgwriter视图
列 | 类型 | 描述 |
---|---|---|
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视图将总是只有单独的一行,它包含集簇的全局数据。
Table 27-4. pg_stat_database视图
列 | 类型 | 描述 |
---|---|---|
datid | oid | 一个数据库的 OID |
datname | name | 这个数据库的名称 |
numbackends | integer | 当前连接到这个数据库的后端数量。这是在这个视图中唯一一个返回反映当前状态值的列。所有其他列返回从上次重置以来积累的值。 |
xact_commit | bigint | 在这个数据库中已经被提交的事务的数量 |
xact_rollback | bigint | 在这个数据库中已经被回滚的事务的数量 |
blks_read | bigint | 在这个数据库中被读取的磁盘块的数量 |
blks_hit | bigint | 磁盘块被发现已经在缓冲区中的次数,这样不需要一次读取(这只包括 PostgreSQL 缓冲区中的命中,而不包括在操作系统文件系统缓冲区中的命中) |
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视图将为集簇中的每一个数据库包含有一行,每一行显示数据库范围的统计信息。
Table 27-5. pg_stat_all_tables视图
列 | 类型 | 描述 |
---|---|---|
relid | oid | 一个表的 OID |
schemaname | name | 这个表所在的模式的名称 |
relname | name | 这个表的名称 |
seq_scan | bigint | 在这个表上发起的顺序扫描的次数 |
seq_tup_read | bigint | 被顺序扫描取得的活着的行的数量 |
idx_scan | bigint | 在这个表上发起的索引扫描的次数 |
idx_tup_fetch | bigint | 被索引扫描取得的活着的行的数量 |
n_tup_ins | bigint | 被插入的行数 |
n_tup_upd | bigint | 被更新的行数 |
n_tup_del | bigint | 被删除的行数 |
n_tup_hot_upd | bigint | 被更新的 HOT 行数(即不要求独立索引更新的行更新) |
n_live_tup | bigint | 活着的行的估计数量 |
n_dead_tup | bigint | 死亡行的估计数量 |
last_vacuum | timestamp with time zone | 上次这个表被手动清理的时间(不统计VACUUM FULL) |
last_autovacuum | timestamp with time zone | 上次这个表被自动清理守护进程清理的时间 |
last_analyze | timestamp with time zone | 上次这个表被手动分析的时间 |
last_autoanalyze | timestamp with time zone | 上次这个表被自动清理守护进程分析的时间 |
vacuum_count | bigint | 这个表已被手工清理的次数(不统计VACUUM FULL) |
autovacuum_count | bigint | 这个表已被自动清理守护进程清理的次数 |
analyze_count | bigint | 这个表已被手工分析的次数 |
autoanalyze_count | bigint | 这个表已被自动清理守护进程分析的次数 |
pg_stat_all_tables视图将为当前数据库中的每一个表(包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。pg_stat_user_tables和pg_stat_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户和系统表。
Table 27-6. pg_stat_all_indexes视图
列 | 类型 | 描述 |
---|---|---|
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统计从表取得的或者的行。如果使用该索引取得了任何死亡行或还未提交的行,或者如果通过一次只用索引扫描的方式避免了任何堆获取,后者将较小。
Table 27-7. pg_statio_all_tables视图
列 | 类型 | 描述 |
---|---|---|
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视图包含相同的信息,但是被过滤得分别只显示用户表和系统表。
Table 27-8. pg_statio_all_indexes视图
列 | 类型 | 描述 |
---|---|---|
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视图包含相同的信息,但是被过滤得分别只显示用户索引和系统索引。
Table 27-9. pg_statio_all_sequences视图
列 | 类型 | 描述 |
---|---|---|
relid | oid | 一个序列的 OID |
schemaname | name | 这个序列所在的模式的名称 |
relname | name | 这个序列的名称 |
blks_read | bigint | 从这个序列中读取的磁盘块数 |
blks_hit | bigint | 在这个序列中的缓冲区命中数量 |
pg_statio_all_sequences视图将为当前数据库中的每个序列包含一行,该行显示在指定序列上有关 I/O 的统计信息。
Table 27-10. pg_stat_user_functions视图
列 | 类型 | 描述 |
---|---|---|
funcid | oid | 一个函数的 OID |
schemaname | name | 这个函数所在的模式的名称 |
funcname | name | 这个函数的名称 |
calls | bigint | 这个函数已经被调用的次数 |
total_time | double precision | 在这个函数以及它所调用的其他函数中花费的总时间,以毫秒计 |
self_time | double precision | 在这个函数本身花费的总时间,不包括被它调用的其他函数,以毫秒计 |
pg_stat_user_functions视图将为每一个被追踪的函数包含一行,该行显示有关该函数执行的统计信息。track_functions参数控制到底哪些函数被跟踪。
Table 27-11. pg_stat_replication视图
列 | 类型 | 描述 |
---|---|---|
pid | integer | 一个 WAL 发送者进程的进程 ID |
usesysid | oid | 登入到这个 WAL 发送者进程的用户 OID |
usename | name | 登入到这个 WAL 发送者进程的用户名 |
application_name | text | 连接到这个 WAL 发送者的应用名称 |
client_addr | inet | 连接到这个 WAL 发送者的客户端的 IP 地址。如果这个域为空,它指示该客户端是通过一个服务器机器上的 Unix 套接字连接的。 |
client_hostname | text | 已连接客户端的主机名,由client_addr的一次反向 DNS 查找报告。这个域对于 IP 连接将只为非空,并且只有当log_hostname被启用时才为非空。 |
client_port | integer | 客户端用来和这个 WAL 发送者通信的 TCP 端口号,或者在使用一个 Unix 套接字时为-1 |
backend_start | timestamp with time zone | 这个进程被启动的时间,即当客户端连接到这个 WAL 发送者时 |
state | text | 当前 WAL 发送者的状态 |
sent_location | text | 在这个连接上被发送的最后的事务日志位置 |
write_location | text | 被这个后备服务器写入到磁盘的最后的事务日志位置 |
flush_location | text | 被这个后备服务器刷入到磁盘的最后的事务日志位置 |
replay_location | text | 被这个后备服务器重放到数据库中的最后的事务日志位置 |
sync_priority | integer | 这个后备服务器被选中为同步后备的优先级 |
sync_state | text | 这个后备服务器的同步状态 |
pg_stat_replication视图将为每个 WAL 发送者进程包含一行,该行显示连接到发送者的后备服务器的复制的统计信息。只列出直接连接的后备服务器,关于下游后备服务器的信息不可用。
Table 27-12. pg_stat_database_conflicts视图
列 | 类型 | 描述 |
---|---|---|
datid | oid | 一个数据库的 OID |
datname | name | 这个数据库的名称 |
confl_tablespace | bigint | 在这个数据库中由于已删除表空间而被取消的查询数量 |
confl_lock | bigint | 在这个数据库中由于锁超时而被取消的查询数量 |
confl_snapshot | bigint | 在这个数据库中由于老旧快照而被取消的查询数量 |
confl_bufferpin | bigint | 在这个数据库中由于被占用的缓冲区而被取消的查询数量 |
confl_deadlock | bigint | 在这个数据库中由于死锁而被取消的查询数量 |
pg_stat_database_conflicts视图将为每一个数据库包含一行,该行显示数据库范围发生的由于与后备服务器上的恢复冲突而取消的查询相关的统计信息。这个视图将只包含在后备服务器上的信息,因为在主服务器上不会发生冲突。
其他查看统计信息的方法是直接使用查询,这些查询使用上述标准视图用到的底层统计信息访问函数。如要了解如函数名等细节,可参考标准视图的定义(例如,在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_activity
是pg_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 | 当前事务被开始的时间 |