pg_stat_activity字段变化过程

举报
dgt 发表于 2023/12/28 09:30:28 2023/12/28
【摘要】 dws的pg_stat_activity是通过函数获取的系统信息,在每个版本会有些许变化,但内部逻辑基本一致,可以在gsql下执行如下命令获取\d+ pg_stat_activitydws8.1.1版本下,pg_stat_activity定义一共20个字段,涉及到两个函数:pg_stat_get_activity_with_conninfo和gs_wlm_session_respoolpg_...

dws的pg_stat_activity是通过函数获取的系统信息,在每个版本会有些许变化,但内部逻辑基本一致,可以在gsql下执行如下命令获取

\d+ pg_stat_activity

dws8.1.1版本下,pg_stat_activity定义一共20个字段,涉及到两个函数:pg_stat_get_activity_with_conninfogs_wlm_session_respool

pg_stat_get_activity_with_conninfo -> pgstat_fetch_stat_beentry(pid) -> pgstat_read_current_status -> BackendStatusArray

pg_stat_get_session_respool -> pgstat_fetch_stat_beentry(pid) -> BackendStatusArray -> st_backstat

 当前是使用beentry记录语句信息,每个pid对应一个beentry,其中的信息基本包含pg_stat_activity所有字段,当实际复用时,实际是复用pid,因此查询时候可能根据复用的pid找到的beentry中上一个语句的信息。

字段更新顺序如下:

#1 初始化阶段:

pid复用,新连接到来时,各个字段更新顺序如下:

1userid  2usename

3pid

4backend_start -> proc_start_timestamp

5datid  6dataname

7client_addr  8client_port

9state->idle 

10waiting -> false(当执行过程中等锁时会置为true,等锁结束回再置为false)

11client_hostname   12application_name   13 connection_info

14queryid -> 0

#2 执行阶段

state->active   15 state_change  16query_start   17query

18xact_start

#3 并发控制阶段

19respool -> user_resourcepool

20)如判断需排队,则更新enqueue字段为waitting in queue,排队完毕更新回null

21query_id生成执行计划,计划重写,在启动执行器阶段设置的query_id

#4 结束阶段

state -> idle

22) 更新state_change时间为idle时间

最后阶段,将query_id -> 0

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。