PostgreSQL数据库查询监控技术——pg_stat_activity简介

网友投稿 2078 2022-10-14

PostgreSQL数据库查询监控技术——pg_stat_activity简介

PostgreSQL数据库查询监控技术——pg_stat_activity简介

pg_stat_activity是PostgreSQL原生工具,官方说明如下:The pg_stat_activity view will have one row per server process, showing information related to the current activity of that process(该pg_stat_activity视图将为每个服务器进程显示一行,显示与该进程的当前活动相关的信息)。pg_stat_activity作为查询监控的视图,其具有如下特点:

服务端事件采集

客户端消费方式

历史查询落地

性能损耗

分布式采集

查询性能数据

实时

主动拉取





pg_stat_activity

​​class="data-table" data-id="t7a7e9d1-Hh8L9KV0" data-transient-attributes="class" data-width="1162px" style="width: 100%; outline: none; border-collapse: collapse;">


类型

描述

datid

oid

连接后端的数据库OID

datname

name

连接后端的数据库名称

pid

integer

后端进程ID

leader_pid

integer

并行组负责人进程 ID,如果此进程是并行查询工作者。NULL如果这个进程是并行组长或者不参与并行查询。

usesysid

oid

登陆后端的用户OID

usename

name

登录到该后端的用户名

application_name

text

连接到后端的应用名

client_addr

inet

连接到此后端的客户端的 IP 地址。如果此字段为空,则表明客户端是通过服务器机器上的 Unix 套接字连接的,或者这是一个内部进程,例如 autovacuum。

client_hostname

text

连接客户端的主机名,通过client_addr的反向DNS查找报告。这个字段将只是非空的IP连接,并且仅在启用log_hostname时。

client_port

integer

客户端用于与此后端通信的 TCP 端口号,或者-1如果使用 Unix 套接字。如果该字段为空,则表明这是一个内部服务器进程。

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

state上次更改的时间

wait_event_type

text

后端正在等待的事件类型(如果有);否则为空。见等待事件类型表

wait_event

text

如果后端当前正在等待,则等待事件名称,否则为 NULL。

state

text

此后端的当前整体状态。可能的值为:active后端正在执行查询;idle后端正在等待新的客户端命令;idle in transaction后端处于事务中,但当前未执行查询;idle in transaction (aborted)此状态类似于idle in transaction,只是事务中的一条语句导致了错误;fastpath function call后端正在执行快速路径功能;disabled如果在此后端禁用track_activities ,则会报告此状态。

backend_xid

xid

此后端的顶级事务标识符(如果有)

backend_xmin

xid

当前后端的xmin范围

query_id

bigint

此后端最近查询的标识符。如果state是active此字段显示当前正在执行的查询的标识符。在所有其他状态下,它显示最后执行的查询的标识符。默认情况下不计算查询标识符,因此该字段将为空,除非启用了compute_query_id参数或配置了计算查询标识符的第三方模块。

query

text

此后端最近查询的文本。如果state是active此字段显示当前正在执行的查询。在所有其他状态下,它显示最后执行的查询。默认情况下,查询文本被截断为 1024 字节;这个值可以通过参数track_activity_query_size改变。

backend_type

text

当前后端的类型。可能的类型有autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, archiver, startup, walreceiver,walsender和walwriter. 此外,通过扩展注册的后台进程可能还有其他类型。

wait_event和state列是独立的。如果后端处于active状态,它可能会或可能不会等待某些事件。如果状态为active且wait_event非空,则表示查询正在执行,但在系统中的某个位置被阻塞。

pg_stat_activity视图在src/backend/catalog/system_views.sql定义,

CREATE VIEW pg_stat_activity AS SELECT S.datid AS datid, D.datname AS datname, S.pid, S.usesysid, U.rolname AS usename, S.application_name, S.client_addr, S.client_hostname, S.client_port, S.backend_start, S.xact_start, S.query_start, S.state_change, S.wait_event_type, S.wait_event, S.state, S.backend_xid, s.backend_xmin, S.query, S.backend_type FROM pg_stat_get_activity(NULL) AS S LEFT JOIN pg_database AS D ON (S.datid = D.oid) LEFT JOIN pg_authid AS U ON (S.usesysid = U.oid);

datid、pid、usesysid、application_name、client_addr、client_hostname、client_port、backend_start、xact_start、query_start、state_change、wait_event_type、wait_event、state、backend_xid、backend_xmin、query、backend_type都从pg_stat_get_activity(NULL)返回的结果中取出。pg_stat_get_activity函数定义在src/backend/utils/adt/pgstatfuncs.c中,代码详情如下所示。

datname是从pg_database中取出

usename是从pg_authid中取出

基本原理

基本原理上来说GP和PG一致,这里以GP为例来说明。GP启动时在共享内存里分配MaxBackends个PgBackendStatus构造体(见pgstat.c)。client连接到GP Master时,fork出QD进程,QD进程接收Client提交的查询,处理过程中调用pgstat_report_activity()(该函数内获取当前QD进程对应的PgBackendStatus,更新查询基本信息)。查询执行期间,QD进程在各个执行节点调用pgstat_report_*()函数,更新PgBackendStatus中的对应的信息项。当另一个客户端查询pg_stat_activity时,全量访问共享内存中的PgBackendStatus数组,返回成为查询结果集(见pgstatfuncs.c pg_stat_get_activity()函数)

优点:更新共享内存,性能影响小;预分配每个Backend进程的槽位,每个进程都可以无锁地同步存取信息,无锁竞争;提供资源组排队、数据库对象被锁的信息 缺点:扩展性差,增加功能必须修改内核代码;没有历史记录;仅支持主动拉取;没有查询性能数据;非分布式架构,无法从一点观测GP上查询执行全貌

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入了解SparkSQL的运用及方法
下一篇:eweb4j- web开发框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~