本文分享自华为云社区《GaussDB(DWS)如何查看作业运行信息》,作者:幕后小黑爪。
用户反馈,出现连接数告警,作业并发数高,超过资源池限制,与实际配置不符。经过了解,用户使用 pgxc_stat_activity 视图进行作业并发数判断。
该视图显示用户查询相关信息,是以连接线程为基础来进行统计的,因而使用此视图进行查询会存在几个问题:
实际现网环境中,用户使用的是第三方工具连接的数据库,这些工具为了提高运行效率,会先建立连接,在下发作业,作业执行完成后返回,再下发作业运行,直到作业全部执行完成,才会断开连接,这样就导致 pgxc_stat_activity 会残留上次作业运行的信息,记录不准。
该视图中包含大量内部线程信息,如内部连接(CN-CN),这种连接已经在主 CN 管控过,所以理论上不需要管控。但是 pgxc_stat_activity 会进行记录,导致显示的活跃会话数增多,造成从 pgxc_stat_activity 视图中的并发数超限的现象。
为此,我们提供以作业基本单位的作业统计视图 pgxc_session_wlmstat。便于用户观察运行作业和排队作业信息,以下给出推荐的查询语句。
注:该视图在 GaussDB(DWS)8.1.3 以上版本生效,且用户需要关闭 guc 参数 enable_gtm_free,如果该参数开启,会存在统计不准确情况。
参数字段说明
pgxc_session_wlmstat 中字段说明:
1、语句当前的状态 status,包括:
2、语句的属性 attribute
1 分 CN 查询结果:
1.1 分 CN 查询用户的作业运行与排队统计:
select nodename,usename, enqueue,status,count(1) as query_count,sum(statement_mem) as estimate_mem from pgxc_session_wlmstat where status in ('pending','running') and attribute!='Internal' and usename!='Ruby' and usename <> 'omm' group by 1,2,3,4 limit 100;
复制代码
查询结果如下:
1.2 分 CN 查询用户作业运行与排队详细信息
如果需要其他信息也可从 pgxc_session_wlmstat 和 pgxc_stat_activity 中进行获取
select s.nodename, s.resource_pool,s.usename, a.query_start, s.enqueue,s.status, substr(s.query,1,30) as query, statement_mem as estimate_mem,a.query_id from pgxc_session_wlmstat s, pgxc_stat_activity a where s.threadid=a.pid and status in ('pending','running') and s.attribute!='Internal' and s.usename!='Ruby' and s.usename <> 'omm' order by 1,2,3,5,6 limit 100;
复制代码
查询结果如下:
1.3 分 CN 查询资源池内的作业运行与排队统计信息
select resource_pool,nodename, enqueue,status,count(1) as query_count,sum(statement_mem) as estimate_mem from pgxc_session_wlmstat where status in ('pending','running') and attribute!='Internal' and usename!='Ruby' and usename <> 'omm' group by 1,2,3,4 limit 100;
复制代码
查询结果如下:
2 集群整体查询
2.1 整个集群用户的作业运行和排队统计
select usename, enqueue,status,count(1) from pgxc_session_wlmstat where status in ('pending','running') and attribute!='Internal' and usename!='Ruby' and usename <> 'omm' group by 1,2,3 limit 100;
复制代码
查询结果如下:
2.2 整个集群查询用户作业运行与排队详细信息
select s.resource_pool,s.usename, a.query_start, s.enqueue,s.status, substr(s.query,1,30) as query, statement_mem as estimate_mem,a.query_id from pgxc_session_wlmstat s, pgxc_stat_activity a where s.threadid=a.pid and status in ('pending','running') and s.attribute!='Internal' and s.usename!='Ruby' and s.usename <> 'omm' order by 1,2,4,5 limit 100;
复制代码
查询结果如下:
2.3 整个集群资源池内的作业运行与排队统计信息
select resource_pool, enqueue,status,count(1) as query_count,sum(statement_mem) as estimate_mem from pgxc_session_wlmstat where status in ('pending','running') and attribute!='Internal' and usename!='Ruby' and usename <> 'omm' group by 1,2,3 limit 100;
复制代码
查询结果如下:
2.4 整个集群资源池内的作业运行和排队的统计信息
SELECT s.resource_pool AS rpname, COUNT(1) AS session_cnt,SUM(CASE WHEN a.state = 'active' THEN 1 ELSE 0 END) AS active_cnt,SUM(CASE WHEN s.enqueue ='Global' THEN 1 ELSE 0 END) AS global_wait,SUM(CASE WHEN s.lane = 'fast' and s.status = 'running' THEN 1 ELSE 0 END) AS fast_run,SUM(CASE WHEN s.lane = 'fast' and s.status = 'pending' and s.enqueue not in ('Global','None') THEN 1 ELSE 0 END) AS fast_wait,SUM(CASE WHEN s.lane = 'slow' and s.status = 'running' THEN 1 ELSE 0 END) AS slow_run,SUM(CASE WHEN s.lane = 'slow' and s.status = 'pending' and s.enqueue not in ('Global','None') THEN 1 ELSE 0 END) AS slow_wait,SUM(CASE WHEN s.status = 'running' THEN s.statement_mem ELSE 0 END) AS est_mem FROM pg_catalog.pgxc_session_wlmstat s,pg_catalog.pgxc_stat_activity a WHERE s.threadid=a.pid(+) AND s.attribute != 'Internal' AND s.resource_pool != 'root' GROUP BY 1;
复制代码
查询结果如下:
7 月 7 日,华为开发者大会 2023 ( Cloud )将拉开帷幕,并将在国内 30 多个城市、海外 10 多个国家开设分会场,诚邀您参加这场不容错过的年度开发者盛会,让我们一起开启探索之旅!
我们将携手开发者、客户、合作伙伴,为您呈现华为云系列产品服务与丰富的创新实践,并与您探讨 AI、大数据、数据库、PaaS、aPaaS、媒体服务、云原生、安全、物联网、区块链、开源等技术话题,展开全面深入的交流。
大会将汇聚全球科学家、行业领袖、技术专家、社区大咖,开设 200 多场开发者专题活动,为全球开发者提供面对面交流与合作的机会,共同探讨技术创新和业务发展。
大会官网:https://developer.huaweicloud.com/HDC.Cloud2023.html
参会购票:https://www.vmall.com/product/10086352254099.html?cid= 211761
点击参与开发者社区活动,观赏技术大咖秀、玩转技术梦工厂,有机会赢取 4000 元开发者礼包!
欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。
点击关注,第一时间了解华为云新鲜技术~
评论