统计信息查看

PolarDB PostgreSQL轻量版提供丰富的系统视图和系统表,可查看监控收集的统计信息。

系统视图

视图名称

描述

pg_stat_activity

每个服务器进程一行,显示与该进程的当前活动相关的信息,例如状态和当前查询。

pg_stat_replication

每个WAL发送进程一行,显示有关到该发送进程连接的备服务器的复制的统计信息。

pg_stat_wal_receiver

只有一行,显示来自WAL接收器所连接服务器的有关该接收器的统计信息。

pg_stat_subscription

每个订阅至少一行,显示有关该订阅的工作者的信息。

pg_stat_ssl

每个连接(常规的或者复制)一行,显示在这个连接上使用的SSL的信息。

pg_stat_progress_vacuum

每个正在运行VACUUM后台进程(包括autovacuum工作进程)一行,并显示当前的进度。

统计收集结果视图

视图名称

描述

pg_stat_archiver

只有一行,显示有关WAL归档进程活动的统计信息。

pg_stat_bgwriter

只有一行,显示有关后台写进程的活动的统计信息。

pg_stat_database

每个数据库一行,显示数据库范围的统计信息。

pg_stat_database_conflicts

每个数据库一行,显示数据库范围的统计信息,其内容是关于由于与备节点恢复过程发生冲突而被取消的查询。

pg_stat_all_tables

当前数据库中每个表一行,显示有关访问指定表的统计信息。

pg_stat_sys_tables

显示有关访问系统表的统计信息。

pg_stat_user_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_sys_indexes

pg_stat_all_indexes一样,但只显示系统表上的索引。

pg_stat_user_indexes

pg_stat_all_indexes一样,但只显示用户表上的索引。

pg_statio_all_tables

当前数据库中每个表一行(包括TOAST表),显示有关在指定表上I/O的统计信息。返回以下字段:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读取总数、TOAST表的索引的缓冲区命中总数。

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_sys_indexes

pg_statio_all_indexes一样,但只显示系统表上的索引。

pg_statio_user_indexes

pg_statio_all_indexes一样,但只显示用户表上的索引。

pg_statio_all_sequences

当前数据库中每个序列对象一行,返回以下字段:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。当前数据库中的每个序列一行,显示与指定序列上的I/O有关的统计信息。

pg_statio_sys_sequences

pg_statio_all_sequences一样,但只显示系统序列。

说明

目前没有定义系统序列,因此这个视图为空。

pg_statio_user_sequences

pg_statio_all_sequences一样,但只显示用户序列。

pg_stat_user_functions

每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。对于所有跟踪功能,返回以下字段:函数OID、模式、名称、数量、通话总时间和自我时间。自我时间是在函数本身所花费的时间量,通话总时间包括它调用函数所花费的时间。时间值单位为毫秒。

pg_stat_xact_user_functions

pg_stat_user_functions相似,但是只统计在当前事务期间的调用(还没有被包括在pg_stat_user_functions中)。

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

系统表

PolarDB PostgreSQL轻量版提供pg_locks系统表用于监控数据库活动,允许数据库管理员查看在锁管理器里面未解决的锁的信息。

该表可以用于以下常见场景:

  • 查看当前所有未解决的锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上所有的锁,或者由一个特定PostgreSQL会话持有的所有的锁。

  • 判断当前数据库中带有最多未被授予锁的关系(很可能是数据库客户端的竞争源)。

  • 判断锁竞争给数据库总体性能带来的影响,以及随着整个数据库流量变化的锁竞争情况。

附录

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查找报告。

client_port

INTEGER

客户端的端口号,如果使用Unix套接字则为-1。

backend_start

TIMESTAMP WITH TIME ZONE

该会话进程的启动时间,表示该会话连接到数据库的时间戳。

xact_start

TIMESTAMP WITH TIME ZONE

当前事务的开启时间,如果没有活动事务则为NULL。如果当前查询是它的第一个事务,这一列等于query_start

query_start

TIMESTAMP WITH TIME ZONE

当前正在执行的查询的开始时间,如果state不是active,则为上一个查询开始时间。

state_change

TIMESTAMP WITH TIME ZONE

会话状态最近一次的更改时间。

wait_event_type

TEXT

会话当前正在等待的事件类型,如果不存在则为NULL。可能的取值包括:

  • LWLock:会话正在等待一个轻量级锁。每一个这样的锁保护着共享内存中的一个特殊数据结构。wait_event将含有一个标识该轻量级锁目的的名称(一些锁具有特定的名称,其他是一组具有类似目的的锁中的一部分)。

  • Lock:会话正在等待一个重量级锁。重量级锁,也称为锁管理器锁或者简单锁,主要保护SQL可见的对象,例如表。不过,它们也被用于确保特定内部操作的互斥,例如关系扩展。wait_event将标识等待的锁的类型。

  • BufferPin:服务器进程正在等待访问一个数据缓冲区,而此时没有其他进程正在检查该缓冲区。如果另一个进程持有一个最终从要访问的缓冲区中读取数据的打开的游标,缓冲区pin等待可能会被拖延。

  • Activity:服务器进程处于闲置状态。这被用于在其主处理循环中等待活动的系统进程。wait_event将标识特定的等待点。

  • Extension:服务器进程正在一个扩展模块中等待活动。这一个分类被用于要跟踪自定义等待点的模块。

  • Client:服务器进程正在一个套接字上等待来自客户端应用的某种活动,并且该服务器预期某种与其内部处理无关的事情发生。wait_event将标识特定的等待点。

  • IPC:服务器进程正在等待来自服务器中另一个进程的某种活动。wait_event将标识特定的等待点。

  • Timeout:服务器进程正在等待一次超时发生。wait_event将标识特定的等待点。

  • IO:服务器进程正在等待一次IO完成。wait_event将标识特定的等待点。

wait_event

TEXT

会话当前正在等待的具体事件,如果没有等待,则为NULL。

state

TEXT

会话的当前状态。可能的取值包括:

  • active:会话当前正在执行一个查询。

  • idle:会话当前正在等待一个新的客户端命令。

  • idle in transaction:会话处于事务中,但是当前没有执行任何任务。

  • idle in transaction (aborted):会话处于一个已中止的事务,该事务未能完成,通常是因为语句发生错误。

  • fastpath function call:会话正在执行fast-path函数,例如PL/pgSQL函数。

  • disabled:该会话被禁用,通常是由于会话限制导致(例如连接限制)。

backend_xid

XID

该会话的顶层事务标识符(如果存在)。

backend_xmin

XID

该会话的xmin范围。

query

TEXT

该会话最近查询的文本。如果stateactive,这个域显示当前正在执行的查询,对于其他状态,显示上一个被执行的查询。默认情况下,查询文本会被截断至1024个字符,可通过参数track_activity_query_size更改。

backend_type

TEXT

该会话的类型。可能的取值包括:autovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel workerbackground writerclient backendcheckpointerstartupwalreceiverwalsenderwalwriter。除此以外,由插件注册的后台Worker可能存在额外类型。