掌桥专利:专业的专利平台
掌桥专利
首页

一种SQL风险识别方法、装置及设备

文献发布时间:2023-06-19 10:57:17


一种SQL风险识别方法、装置及设备

技术领域

本申请涉及大数据领域,特别涉及一种SQL风险识别方法、装置及设备。

背景技术

随着大数据技术的广泛兴起,越来越多的银行建立了企业级的大数据技术中台,数据湖及数据仓库的业务日益复杂,数据量呈指数级增长态势,同时数据中台纳入的应用日益增多,性能及稳定性作为大数据技术平台质量的重要指标,受到越来越高的挑战。在大数据技术平台运营过程中,由于低效SQL(Structured Query Language,结构化查询语言)导致的性能问题日益突出,生产环境上一旦发生性能问题,将导致整个大数据技术平台资源短时间内达到瓶颈,严重影响平台的性能及稳定性。

目前对低效SQL导致的性能问题仅能在事后分析排查解决,存在发现问题不及时、解决问题周期长等问题,从而影响业务正常运营。

因此,业内亟需一种可以解决上述技术问题的技术方案。

发明内容

本说明书实施例提供了一种SQL风险识别方法、装置及设备,可以全流程、全方位、精准地识别低效SQL并进行性能优化,从而有效解决发现问题不及时、解决问题周期长等问题,使业务正常运营。

本说明书提供的一种SQL风险识别方法、装置及设备是包括以下方式实现的。

一种SQL风险识别方法,包括:获取提交的SQL代码,基于预设代码检查规则判断所述SQL代码中是否存在风险SQL;确定不存在时,将所述SQL代码发布至测试环境;调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别;其中,所述第一风险识别模型基于测试环境中的SQL特征数据训练获得;在识别结果中不存在风险SQL时,将所述SQL代码发布至生产环境;调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,所述第二风险识别模型基于生产环境中的SQL特征数据训练获得;所述慢SQL为超过预设阈值的SQL。

一种SQL风险识别装置,包括:获取模块,用于获取提交的SQL代码,基于预设代码检查规则判断所述SQL代码中是否存在风险SQL;第一发布模块,用于确定不存在时,将所述SQL代码发布至测试环境;第一识别模块,用于调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别;其中,所述第一风险识别模型基于测试环境中的SQL特征数据训练获得;第二发布模块,用于在识别结果中不存在风险SQL时,将所述SQL代码发布至生产环境;第二识别模块,用于调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,所述第二风险识别模型基于生产环境中的SQL特征数据训练获得;所述慢SQL为超过预设阈值的SQL。

一种SQL风险识别设备,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现本说明书实施例中任意一个方法实施例方法的步骤。

一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现本说明书实施例中任意一个方法实施例的步骤。

本说明书提供的一种SQL风险识别方法、装置及设备。一些实施例中可以获取提交的SQL代码,基于预设代码检查规则判断SQL代码中是否存在风险SQL,在确定不存在时,可以将SQL代码发布至测试环境,然后调用测试环境中的第一风险识别模型对SQL代码进行风险识别。还可以在识别结果中不存在风险SQL时,将SQL代码发布至生产环境,调用生产环境中的第二风险识别模型对SQL代码中的慢SQL进行风险识别,从而获得风险识别结果。采用本说明书提供的实施方案,可以全流程、全方位、精准地识别低效SQL并进行性能优化,从而有效解决发现问题不及时、解决问题周期长等问题,使业务正常运营。

附图说明

此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,并不构成对本说明书的限定。在附图中:

图1是本说明书提供的一种SQL风险识别方法的一个实施例的流程示意图;

图2是本说明书提供的一种SQL风险识别方法的一个具体实施例的流程示意图;

图3是本说明书提供的一种SQL风险识别装置的一个实施例的模块结构示意图;

图4是本说明书提供的一种SQL风险识别服务器的一个实施例的硬件结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书中的一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例保护的范围。

下面以一个具体的应用场景为例对本说明书实施方案进行说明。具体的,图1是本说明书提供的一种SQL风险识别方法的一个实施例的流程示意图。虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者部分合并后更少的操作步骤或模块单元。

本说明书提供的一种实施方案可以应用到客户端、服务器等中。所述客户端可以包括终端设备,如智能手机、平板电脑等。所述服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式系统的服务器结构等。

需要说明的是,下述实施例描述并不对基于本说明书的其他可扩展到的应用场景中的技术方案构成限制。具体的一种实施例如图1所示,本说明书提供的一种SQL风险识别方法的一种实施例中,所述方法可以包括以下步骤。

S0:获取提交的SQL代码,基于预设代码检查规则判断所述SQL代码中是否存在风险SQL。

一些实施例中,研发人员在完成SQL代码的编写后,可以通过SQL代码提交器将SQL代码提交。SQL代码提交器可以用于提交SQL代码,例如,研发人员可以通过Git提交SQL代码。Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

一些实施例中,服务器可以在研发人员提交SQL代码时,获取提交的SQL代码,基于预设代码检查规则判断SQL代码中是否存在风险SQL。其中,预设代码检查规则也可以称为SQL相关性能风险规则,其可以用于提供SQL代码规则检查服务。SQL代码规则检查服务可以利用预设代码检查规则检查SQL代码中是否存在风险SQL。

一些实施例中,可以通过分析生产性能问题,结合业界大数据性能案例,创建预设代码检查规则。例如一些实施场景中,创建预设代码检查规则时,可以结合元数据对SQL进行解析。其中,元数据可以包括数据字典(如,数据库、数据表、表字段、主键定义)、数据容量(如,数据库容量大小,数据表容量大小,数据表分区容量大小)、统计信息(如,数据表记录数、数据表分区及分布键、数据分布情况)等。

一些实施场景中,在创建预设代码检查规则后,可以将其存放在代码规则库中,这样,后续在需要的时候可以直接从代码规则库中调取,从而可以有效提高数据处理效率。代码规则库可以用于存放预设代码检查规则,其可以是Oracle数据库、MySQL数据库等。

一些实施例中,所述预设代码检查规则可以包括以下至少之一:大容量表使用笛卡尔积、大容量表存在全表扫描风险、大容量表存在查询列无裁剪、分区表未加分区限定条件、大容量表使用count(distinct)函数、大容量表使用row_number()函数、大容量表使用order by排序操作、大容量表使用collect_set函数、大容量表使用collect_list函数、大容量表使用unixtimestamp函数、大容量表使用正则表达式、join字段和group by字段一致但没打开性能优化开关、大容量表存在非主键关联风险、union all部分个数超过规范阈值、SQL嵌套次数超过规范阈值。

一些实施例中,研发人员在提交SQL代码时,可以自动触发SQL代码规则检查服务判断SQL代码中是否存在风险SQL。

一些实施例中,基于预设代码检查规则判断SQL代码中是否存在风险SQL可以包括:利用规则匹配算法对SQL代码进行解析,然后将解析结果与预设代码检查规则进行匹配,当匹配成功时,可以说明SQL代码中存在风险SQL,反正,则不存在。一些实施场景中,可以基于代码规则库及元数据构建与代码规则库对应的规则匹配算法。规则匹配算法可以用于识别存在性能风险的SQL。

一些实施例中,当确定SQL代码中存在风险SQL时,可以拦截存在风险的SQL,拒绝提交,并返回风险信息,以便研发人员进行性能优化。其中,风险信息可以包括风险编号、风险描述信息、风险名称、风险行号、风险等级、优化建议等。

一些实施场景中,在研发人员对风险SQL进行性能优化后,可以重新通过SQL代码提交器提交优化后的SQL。

本说明书实施例中,通过预设代码检查规则在SQL代码预提交时进行风险识别,可以在发布生产前及时发现有性能风险的低效SQL,规避风险。

S2:确定不存在时,将所述SQL代码发布至测试环境。

本说明书实施例中,在确定提交的SQL代码中不存在风险SQL时,可以将其发布至测试环境进行风险识别。其中,测试环境可以理解为是SQL代码上线前进行性能测试的环境。测试环境一般是复制一份生产环境的配置,一个程序在测试环境工作不正常,就不会将其发布到生产机上。

一些实施场景中,测试环境中可以包括监控程序,监控程序可以用于调用第一风险识别模型。

S4:调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别;其中,所述第一风险识别模型基于测试环境中的SQL特征数据训练获得。

其中,第一风险识别模型可以在测试环境中进行SQL风险预测识别。第一风险识别模型也可以称为测试环境SQL风险识别预测模型。第一风险识别模型可以提供测试环境SQL风险识别预测服务。

一些实施例中,第一风险识别模型可以通过下述方式获得:获取测试环境中与SQL关联的特征数据;根据测试环境的运维诊断信息为所述SQL分配类别标签;所述类别标签包括低效SQL和非低效SQL;利用所述SQL的特征数据和类别标签对XGBoost模型进行训练,获得第一风险识别模型;其中,训练过程中,基于特征工程不断优化模型的参数。

一些实施场景中,与SQL关联的每条特征数据可以包括基础特征数据、风险特征数据、SQL执行计划特征数据等。其中,基础特征数据可以基于元数据对测试环境/生产环境中的SQL语句解析获得。风险特征数据可以基于预设代码检查规则对SQL语句检查获得。SQL执行计划特征数据可以基于对测试环境/生产环境的SQL执行计划解析获得。

一些实施场景中,可以获取测试环境中的SQL语句,然后结合元数据及相应环境的统计信息解析SQL语句,生成SQL性能相关的特征基础数据。如,SQL语句嵌套次数、SQL语句分区访问次数、SQL语句分区访问容量大小、SQL语句表访问次数、SQL语句分区访问个数、SQL语句非主键关联次数、SQL语句表访问个数、SQL语句表容量大小等。

一些实施场景中,可以调用SQL代码规则检查器,将SQL语句作为参数传入SQL代码规则检查器,获取SQL代码规则检查的风险特征数据。如,SQL中是否大容量表使用了笛卡尔积、SQL中是否大容量表查询列无裁剪、SQL中是否大容量表存在全表扫描风险、高风险数量、中风险数量、低风险数量等。其中,SQL代码规则检查器可以通过对预设代码检查规则封装获得。

一些实施场景中,可以获取测试环境的SQL执行计划,然后解析SQL执行计划,生成SQL执行计划特征数据。如SQL执行计划cost值等。当然,上述只是进行示例性说明,与SQL关联的特征数据不限于上述举例,所属领域技术人员在本申请技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本申请相同或相似,均应涵盖于本申请保护范围内。

一些实施场景中,在获取测试环境中与SQL关联的特征数据后,可以对SQL进行标注。其中,标注可以理解为为每条SQL分配类别标签,如1或0。一些实施场景中,可以依据测试环境中的运维诊断信息,如SQL运行时间是否超过预设值,判断相关SQL是否是低效SQL。其中,预设值可以根据实际场景进行设定,本说明书对此不作限定。例如一些实施场景中,可以将运行时间超过预设值的SQL类别标记为1,将运行时间没有超过预设值的SQL类别标记为0。其中,1可以表示SQL为低效SQL,0可以表示SQL为非低效SQL。其中,一些实施场景中,在对SQL进行标注后,可以将类别标记作为一个特征字段存储到对应的特征数据中。

一些实施场景中,在获取测试环境中与SQL关联的特征数据并为每条SQL分配类别标签后,可以将与SQL关联的特征数据进行结构化处理,获得后续用于模型训练的特征数据集,然后存入数据库。其中,与SQL关联的每条特征数据可以包括多个特征字段,每个特征字段可以对应一个特征因子重要性。其中,特征字段可以理解为是描述SQL性能的指标。特征因子重要性可以标识特征字段对SQL性能的影响程度。

一些实施场景中,在获得用于模型训练的特征数据集后,可以将特征数据集划分为训练集和测试集,然后利用训练集对XGBoost模型进行训练,利用测试集对训练获得的模型进行验证。例如一些实施场景中,在获得用于模型训练的特征数据集后,可以将特征训练集中80%的数据作为训练集,剩余数据作为测试集。其中,XGBoost是一种集成学习算法,基模型一般选择树模型,但也可以选择其它类型的模型如逻辑回归等。当然,上述只是进行示例性说明,本说明书实施例中还可以利用训练集对其它机器学习模型进行训练,获得第一风险识别模型,所属领域技术人员在本申请技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本申请相同或相似,均应涵盖于本申请保护范围内。

一些实施场景中,在利用训练集对XGBoost模型进行训练过程中,可以通过特征工程不断优化训练模型的参数,从而使获得的第一风险识别模型的风险识别准确度更高。

一些实施场景中,特征工程优化方法可以包括:特征选择、特征变换、特征组合等。其中,特征选择中选择的特征字段可以为导致低效SQL的字段。例如一些实施场景中,特征选择中选择的特征字段包括以下至少之一:SQL运行时间、SQL执行开始时间、SQL执行结束时间、SQL长度、SQL嵌套次数、SQL分区访问次数、SQL访问表分区容量大小、SQL访问表分区个数、SQL访问表次数、SQL访问表个数、SQL访问表容量大小、非主键关联次数、SQL执行计划cost值、SQL命中高风险次数、SQL命中中风险次数、SQL命中低风险次数、SQL命中的风险类别、SQL命中大容量表使用笛卡尔积次数、SQL命中大容量表存在全表扫描风险次数、SQL命中大容量表存在查询列无裁剪次数、SQL命中分区表未加分区限定条件次数、SQL命中大容量表使用count(distinct)函数次数、SQL命中大容量表使用row_number()函数次数、SQL命中大容量表使用order by排序操作次数、SQL命中大容量表使用collect_set函数次数、SQL命中大容量表使用collect_list函数次数、SQL命中大容量表使用unixtimestamp函数次数、SQL命中大容量表使用正则表达式次数、SQL命中join字段和group by字段一致但没打开性能优化开关次数、SQL命中大容量表存在非主键关联风险次数、SQL命中union all部分个数超过规范阈值次数、SQL命中SQL嵌套次数超过规范阈值次数。当然,上述只是进行示例性说明,训练过程中选择的特征字段不限于上述举例,所属领域技术人员在本申请技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本申请相同或相似,均应涵盖于本申请保护范围内。需要说明的是,每次训练选择的特征字段可以相同,也可以不同。

特征变换可以理解为是对特征字段进行变换,衍生出新的特征字段,如对“SQL执行开始时间”进行特征变换,将日期转换为周,生成新的特征字段“SQL执行开始时间(周)”,取值举例:周三、周六。特征组合可以理解为是对两个或两个以上特征字段进行组合计算,衍生出新的特征字段,如对“SQL命中高风险次数”、“SQL命中中风险次数”、“SQL命中低风险次数”组合为新的特征字段“SQL命中风险总数”,作为新的特征字段。

本说明书实施例中,通过不断地特征选择、特征变换、特征组合,对XGBoost模型进行参数调整,不断地对模型优化,可以使获得的模型精确度更高。

一些实施例中,在获得第一识别风险模型后,可以将其存储,这样,在需要时可以直接调用,从而提高处理效率。

本说明书实施例中,将SQL代码发布至测试环境后,可以调用测试环境中的第一风险识别模型对SQL代码进行风险识别。

一些实施例中,在提交的SQL代码通过预设代码检查规则的检查且不存在风险SQL时,可以将SQL代码发布至测试环境,测试环境中监控程序可以自动检测版本变动的SQL,调用测试环境中第一风险识别模型对SQL代码进行风险识别,并返回识别结果。其中,识别结果中可以包括是否存在风险SQL、存在风险SQL时对应的特征因子重要性等。

一些实施例中,所述调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别,可以包括:解析所述SQL代码,获得所述SQL代码中包括SQL语句;基于元数据对所述SQL语句进行解析,获得与所述SQL代码对应的基础特征数据;基于预设代码检查规则对所述SQL语句进行检查,获得与所述SQL代码对应的风险特征数据;对所述SQL语句的SQL执行计划进行解析,获得与所述SQL代码对应的SQL执行计划特征数据;将与所述SQL代码对应的基础特征数据、风险特征数据、SQL执行计划特征数据输入所述第一风险识别模型进行风险识别。

一些实施例中,在获得第一风险识别模型对SQL代码进行风险识别的结果后,可以将识别结果推送给研发人员,以便研发人员根据识别结果进行有针对性地性能调优。

一些实施场景中,在研发人员根据识别结果对风险SQL进行性能优化后,可以重新通过SQL代码提交器提交优化后的SQL。

本说明书实施例中,通过在测试阶段利用第一风险识别模型对SQL代码进行风险识别,可以在发布生产前及时发现有性能风险的低效SQL,规避风险。

S6:在识别结果中不存在风险SQL时,将所述SQL代码发布至生产环境。

本说明书实施例中,在调用测试环境中的第一风险识别模型对SQL代码进行风险识别后,获得的识别结果中不存在风险SQL时,可以将SQL代码发布至生产环境。其中,生产环境可以理解为是将SQL代码发布上线后的环境。生产环境可以正式提供对外服务,一般会关掉错误报告,打开错误日志。生产环境可以理解为包含所有的功能的环境。

一些实施场景中,测试环境中可以包括监控预警程序,监控预警程序可以用于调用第二风险识别模型。

一些实施场景中,通过调用测试环境的SQL风险识别预测服务对SQL代码进行风险识别后,若预测无性能风险,则可以将SQL代码发布生产上线。

S8:调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,所述第二风险识别模型基于生产环境中的SQL特征数据训练获得;所述慢SQL为超过预设阈值的SQL。

其中,第二风险识别模型可以在生产环境中进行SQL风险预测识别。第二风险识别模型也可以称为生产环境SQL风险识别预测模型。第二风险识别模型可以提供生产环境SQL风险识别预测服务。

一些实施例中,第二风险识别模型可以通过下述方式获得:获取生产环境中与SQL关联的特征数据;根据生产环境的运维诊断信息为所述SQL分配类别标签;所述类别标签包括低效SQL和非低效SQL;利用所述SQL的特征数据和类别标签对XGBoost模型进行训练,获得第二风险识别模型;其中,训练过程中,基于特征工程不断优化模型的参数。

需要说明的是,第二风险识别模型的训练过程与第一风险识别模型的训练过程类似,具体可以参照步骤S4中对第一风险识别模型训练过程的实施例,对此不作赘述。

本说明书实施例中,在将SQL代码发布至生产环境后,可以调用生产环境中的第二风险识别模型对SQL代码中的慢SQL进行风险识别。

一些实施例中,在将SQL代码发布至生产环境后,生产环境中监控预警程序可以自动检测版本变动的SQL,调用生产环境中第二风险识别模型对SQL代码中的慢SQL进行风险识别,并返回识别结果。其中,识别结果中可以包括是否存在风险SQL、存在风险SQL时对应的特征因子重要性等。

一些实施例中,所述调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,可以包括:解析所述SQL代码,获得所述SQL代码中包括SQL语句;从所述SQL语句中选择超过预设阈值的SQL语句,获得慢SQL;基于元数据对所述慢SQL进行解析,获得与所述SQL代码对应的基础特征数据;基于预设代码检查规则对所述慢SQL进行检查,获得与所述SQL代码对应的风险特征数据;对所述慢SQL的SQL执行计划进行解析,获得与所述SQL代码对应的SQL执行计划特征数据;将与所述SQL代码对应的基础特征数据、风险特征数据、SQL执行计划特征数据输入所述第二风险识别模型进行风险识别。其中,慢SQL可以理解为超过预设阈值的SQL。预设阈值可以根据实际场景设定,例如,不同应用不同业务场景的SQL,可以设置合适的阈值,对于超过阈值的SQL可以定义为慢SQL。

一些实施例中,在获得第二风险识别模型对SQL代码中的慢SQL进行风险识别的结果后,可以将识别结果推送给研发人员,以便研发人员根据识别结果进行有针对性地性能调优。

本说明书实施例中,通过在生产阶段利用第二风险识别模型对SQL代码中慢SQL进行风险识别,可以在生产运行中及时发现有性能风险的低效SQL,规避风险。

本说明书实施例中,当基于预设代码检查规则或第一风险识别模型或第二风险识别模型识别出所述SQL代码存在风险SQL时,可以获取风险SQL及对应的特征字段;基于所述特征字段对应的特征因子重要性对所述风险SQL进行调优,获得优化SQL。

一些实施例中,所述获得优化SQL后,可以将所述优化SQL提交至仿真环境;在所述仿真环境调用预设代码检查规则、第一风险识别模型、第二风险识别模型对所述优化SQL进行风险识别;确认不存在风险时,调度风险SQL和优化SQL;比较风险SQL和优化SQL的运行时间,基于比较结果确定优化SQL是否达到预期目标;确认达到预期目标时,将所述优化SQL发布至生产环境。其中,仿真环境可以用于模拟真实环境,例如,测试环境、生产环境等。

一些实施场景中,对风险SQL进行调优后,为了验证其是否还存在风险,可以将获得的优化SQL提交至仿真环境,仿真环境识别到SQL版本变更后,可以自动调用预设代码检查规则、第一风险识别模型、第二风险识别模型进行风险识别。

一些实施场景中,在对优化SQL进行风险识别后,若识别结果显示无风险,此时可以获取优化前SQL(风险SQL)的SQL运行时间和优化后SQL的SQL运行时间,然后通过对比对应的SQL运行时间,确定优化后SQL的性能是否得到提升。当然,上述只是进行示例性说明,表示SQL性能的参数不限于SQL运行时间,所属领域技术人员在本申请技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本申请相同或相似,均应涵盖于本申请保护范围内。

一些实施场景中,可以利用SQL比对验证调度器验证调优后SQL的性能是否比优化前SQL性能表现好。其中,SQL比对验证调度器可以自动调整集群环境参数、分配队列资源,并通过数据同步工具自动将生产数据同步至测试环境,在运行低效SQL及优化后SQL过程中保持一致,分别调度运行低效SQL、优化后SQL。其中,低效SQL可以理解为是风险SQL。

一些实施场景中,在确定优化后SQL的性能得到提升后,可以进一步判断其对应的性能是否达到预期目标。一些实施场景中,确定达到预期目标后,可以将其发布版本在生产环境上线。一些实施场景中,确定未达到预期目标时,则可以继续进行性能优化并对比优化前后性能,直至优化后的性能达到预期目标发布生产上线。

本说明书实施例,利用特征数据对机器学习模型训练过程中,通过开展包括特征选择、特征变换、特征组合等的特征工程,不断地对训练模型参数进行迭代优化,分别构建测试环境及生产环境的风险识别模型,不仅可以为测试环境和生产环境的SQL风险预测识别服务提供保证,而且可以提高风险识别的准确度。

本说明书实施例,不仅可以高度自动化的落地实际应用,实现对低效SQL的精确识别,而且还支持高效快速的对优化前后SQL进行比对测试验证,从而可以有效提升风险SQL测试的效率。

本说明书实施例,基于预设代码检查规则及测试环境中的风险识别模型对SQL代码进行风险识别,可以在研发测试阶段就对SQL进行风险识别,从而避免发布生产,提前规避风险。在SQL发布生产上线后,通过生产监控预警措施及时对慢SQL进行预警,从而实现在生产环境运行阶段的风险识别。可见,本说明书实施例可以全流程、全方位在事前事中事后对存在性能风险的低效SQL进行识别,规避生产性能隐患,从而守护大数据应用的性能及稳定性。

本说明书实施例,基于预设代码检查规则及风险识别模型识别低效SQL,不仅可以推送是否存在性能代码风险,还会推送性能调优建议,便于研发人员能够精确定位问题SQL的调优方向,并制定相应的调优策略。

本说明书实施例,提供仿真环境对SQL性能进行自动化测试,很大程度上可以规避在生产环境发生因低效SQL导致的性能问题,有效守护大数据技术平台的性能和稳定性。

本说明书实施例,研发测试人员仅需将SQL提交至调度服务器,调度框架会自动调整集群参数配置、分配队列资源,从生产环境同步数据至测试环境,自动调度SQL运行,记录运行指标结果及资源监控信息,并保存至数据库。

当然,上述只是进行示例性说明,本说明书实施例不限于上述举例,所属领域技术人员在本申请技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本申请相同或相似,均应涵盖于本申请保护范围内。

下面结合一个具体实施例对上述方法进行说明,然而,值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。如图2所示,图2是本说明书提供的一种SQL风险识别方法的一个具体实施例的流程示意图。具体的,本实施例中,可以预先基于测试环境、生产环境的SQL特征数据集,通过特征选择、特征转换、特征组合方法对特征数据开展特征优化工程,使用机器学习算法对特征数据集进行不断训练,获得符合条件的SQL风险识别预测模型。SQL风险识别预测模型包括测试环境SQL风险识别预测模型和生产环境SQL风险识别预测模型。

本实施例中,用户在提交SQL代码时,可以自动触发SQL代码规则检查服务判断提交的SQL代码中是否存在性能风险SQL。其中,对存在性能风险的SQL进行拦截,拒绝提交,并推送其性能风险及性能调优建议,在进行代码优化后可以重新提交。

进一步,基于SQL代码规则检查服务确定提交的SQL代码中不存在性能风险SQL时,发布SQL代码到测试环境,测试环境中的SQL版本变更识别工具可以自动识别新发布的SQL代码,并生成SQL特征数据,然后调用测试环境SQL风险识别预测服务判断SQL代码中是否存在性能风险SQL。其中,若存在性能风险,则将预测识别出的风险结果及特征因子重要性推送给研发人员,进行性能调优。若不存在性能风险,则发布生产上线。

进一步,发布生产上线后,生产环境中的生产监控预警工具可以对SQL的运行进行监控,并自动调用生产环境SQL风险识别预测服务判断SQL代码中慢SQL是否存在性能风险SQL。其中,若存在性能风险,则将预测识别出的风险结果及特征因子重要性推送给研发人员,进行性能调优。其中,对SQL的运行进行监控时,可以根据不同应用不同业务场景的SQL,设置合适的阈值,将超过阈值的SQL诊断为慢SQL。

本实施例中,对于SQL风险预测识别模型识别出的风险SQL进行性能调优后,可以在仿真环境开展SQL性能对比测试验证,判断性能优化是否达到预期效果,若达不到预期,则推送给研发人员,进行迭代优化并对比测试验证;若调优后SQL对比调优前SQL,性能有提升且达到性能预期,则发布生产上线。

从以上的描述中,可以看出,本申请实施例可以获取提交的SQL代码,基于预设代码检查规则判断SQL代码中是否存在风险SQL,在确定不存在时,可以将SQL代码发布至测试环境,然后调用测试环境中的第一风险识别模型对SQL代码进行风险识别。还可以在识别结果中不存在风险SQL时,将SQL代码发布至生产环境,调用生产环境中的第二风险识别模型对SQL代码中的慢SQL进行风险识别,从而获得风险识别结果。相比现有技术中对低效SQL导致的性能问题仅能在事后分析排查解决,本说明书实施例可以全流程、全方位、精准地识别低效SQL并进行性能优化,从而有效解决发现问题不及时、解决问题周期长等问题,使业务正常运营。

本说明书中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参加即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。

基于上述所述一种SQL风险识别方法,本说明书一个或多个实施例还提供一种SQL风险识别装置。所述的装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本说明书实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

具体地,图3是本说明书提供的一种SQL风险识别装置的一个实施例的模块结构示意图,如图3所示,本说明书提供的一种SQL风险识别装置可以包括:获取模块120,第一发布模块122,第一识别模块124,第二发布模块126,第二识别模块128。

获取模块120,可以用于获取提交的SQL代码,基于预设代码检查规则判断所述SQL代码中是否存在风险SQL;

第一发布模块122,可以用于确定不存在时,将所述SQL代码发布至测试环境;

第一识别模块124,可以用于调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别;其中,所述第一风险识别模型基于测试环境中的SQL特征数据训练获得;

第二发布模块126,可以用于在识别结果中不存在风险SQL时,将所述SQL代码发布至生产环境;

第二识别模块128,可以用于调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,所述第二风险识别模型基于生产环境中的SQL特征数据训练获得;所述慢SQL为超过预设阈值的SQL。

需要说明的,上述所述的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。

本说明书还提供一种SQL风险识别设备的实施例,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:获取提交的SQL代码,基于预设代码检查规则判断所述SQL代码中是否存在风险SQL;确定不存在时,将所述SQL代码发布至测试环境;调用所述测试环境中的第一风险识别模型对所述SQL代码进行风险识别;其中,所述第一风险识别模型基于测试环境中的SQL特征数据训练获得;在识别结果中不存在风险SQL时,将所述SQL代码发布至生产环境;调用所述生产环境中的第二风险识别模型对所述SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,所述第二风险识别模型基于生产环境中的SQL特征数据训练获得;所述慢SQL为超过预设阈值的SQL。

需要说明的,上述所述的设备根据方法或装置实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。

本说明书所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图4是本说明书提供的一种SQL风险识别服务器的一个实施例的硬件结构框图,该服务器可以是上述实施例中的SQL风险识别装置或SQL风险识别设备。如图4所示,服务器10可以包括一个或多个(图中仅示出一个)处理器100(处理器100可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器200、以及用于通信功能的传输模块300。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器10还可包括比图4中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如数据库或多级缓存、GPU,或者具有与图4所示不同的配置。

存储器200可用于存储应用软件的软件程序以及模块,如本说明书实施例中的SQL风险识别方法对应的程序指令/模块,处理器100通过运行存储在存储器200内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器200可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器200可进一步包括相对于处理器100远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输模块300用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输模块300包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块300可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

本说明书提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本说明书实施例所描述方案的效果。所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。

本说明书提供的上述SQL风险识别方法或装置实施例可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作系统的c++语言在PC端实现、linux系统实现,或其他例如使用android、iOS系统程序设计语言在智能终端实现,以及基于量子计算机的处理逻辑实现等。

需要说明的是说明书上述所述的装置、设备、系统根据相关方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照对应方法实施例的描述,在此不作一一赘述。

本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把部分模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。

本发明是参照根据本发明实施例的方法、装置、设备、系统的流程图和/或方框图来描述的。应理解可由计算机程序指令实现,可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。

以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

相关技术
  • 一种SQL风险识别方法、装置及设备
  • 风险识别方法、风险识别装置和电子设备
技术分类

06120112740306