pg_stat_activity字段变化过程
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
- 点赞
- 收藏
- 关注作者
评论(0)