GBase 8a
运维管理
文章

GBase 8a集群大SQL监控及自动查杀运维监控脚本实现

发表于2024-06-21 14:58:28104次浏览1个评论

课题概述

在笔者的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日志记录到相关日志表,便于后期分析。根据需要设置监控扫描频率。

评论

登录后才可以发表评论
崔哥发表于 7个月前
韩信在淮阴,少年相欺凌。屈体若无骨,壮心有所凭。一遭龙颜君,啸咤从此兴。千金答漂母,万古共嗟称。而我竟何为,寒苦坐相仍。长风入短袂,内手如怀冰。故友不相恤,新交宁见矜?摧残槛中虎,羁绁韝上鹰。何时腾风云,搏击申所能?