pg_stat_activity字段变化过程
【摘要】 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_conninfo和gs_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复用,新连接到来时,各个字段更新顺序如下:
1)userid 2)usename
3)pid
4)backend_start -> proc_start_timestamp
5)datid 6)dataname
7)client_addr 8)client_port
9)state->idle
10)waiting -> false(当执行过程中等锁时回置为true,等锁结束回置为false)
11)client_hostname 12)application_name 13) connection_info
14)queryid -> 0
#2 执行阶段
state->active 15) state_change 16)query_start 17)query
18)xact_start
#3 并发控制阶段
19)respool -> user_resourcepool
20)如判断需排队,则更新enqueue字段为waitting in queue,排队完毕更新回null
21)query_id:生成执行计划,计划重写,在启动执行器阶段设置的query_id
#4 结束阶段
state -> idle
22) 更新state_change时间为idle时间
最后阶段,将query_id -> 0
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)