GBase 8a集群大SQL监控及自动查杀运维监控脚本实现
课题概述
在笔者的GBase 8a集群项目实施经历中,由于大SQL导致集群异常变慢甚至夯住的情况一度是一个令人头疼的问题。
此类大SQL的特征为:无过滤条件的笛卡尔积关联、关联结果集超大、分组聚合组数超大、加载异常记录数异常偏大等会引起系统资源(主要是磁盘IO)的异常占用,存在夯住主机风险的SQL。
当上述SQL导致集群异常变慢或夯住时,常规的做法,需要人为识别引起异常的SQL及异常节点,手动查杀SQL。这种方法,不能在运行时动态监测,及时终止SQL,主动规避集群夯住的风险。
本文根据笔者的项目实施经验,总结大SQL运行时动态监测的方法,以及对应的自动查杀运维监控脚本实现,以提高集群自动化运维能力。
设计思路
根据笔者项目经验,对大SQL进行分类场景分析,整理得到下表所示的监控指标获取及阈值设置方法。
场景类型 | 监控指标 | 指标值获取方法 | 指标阈值 |
多表关联,当关联临时结果集过大时存在IO过载风险 | SQL执行中临时结果集大小 | 获取SQL运行中临时结果集文件大小。获取方法:通过集群层SQL任务ID,在数据节点通过processlist系统视图,获取数据节点任务ID(GNSID),通过GNSID在数据节点临时数据文件目录${gnode_data}/tmpdata/cache/匹配如下特征的文件:*${ GNSID }.express_tmp,并计算其大小。 | 针对单节点设置,取值10G*N(N 取值3至10),对于普通存储大小的节点(10T左右),N值建议取值范围为3至5,对于较大存储大小的节点(20T以上),N值建议取值范围为6至10。 |
group by分组聚合,临时物化文件过大存在IO过载风险 | SQL执行中临时物化文件大小 | 获取SQL运行中临时物化文件大小。获取方法:通过集群层SQL任务ID,在数据节点通过processlist系统视图,获取数据节点任务ID(GNSID),通过GNSID在数据节点临时物化数据文件目录${gnode_data}/tmpdata/tmp_matiralized/匹配如下特征的文件:tmp_${ GNSID }*.GED,并计算其大小。 | 同上 |
开窗OLAP统计类,临时物化文件过大存在IO过载风险 | SQL执行中临时物化文件大小 | 获取SQL运行中临时物化文件大小。获取方法同上。 | 针对单节点设置,取值10G*N*M(N值为3至8,M值为集群节点数) |
加载,加载异常记录数过大存在IO过载风险 | 加载SQL执行中异常记录数 | 获取加载SQL运行中skipped记录数。获取方法:根据SQL任务ID,通过系统视图load_status获取。 | 10万至100万 |
对各分类场景指标设置合理阈值,编写运维监控脚本,实时监测SQL运行,当指标值超过阈值标准,对SQL进行自动查杀,同时将查杀SQL日志记录到相关日志表,便于后期分析。根据需要设置监控扫描频率。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526