一种SQL风险识别方法、装置及设备制造方法及图纸

技术编号:28420692 阅读:42 留言:0更新日期:2021-05-11 18:28
本说明书实施例提供了一种可用于大数据技术领域SQL风险识别方法、装置及设备。所述方法包括获取提交的SQL代码,基于预设代码检查规则判断SQL代码中是否存在风险SQL;确定不存在时,将SQL代码发布至测试环境;调用测试环境中的第一风险识别模型对SQL代码进行风险识别;其中,第一风险识别模型基于测试环境中的SQL特征数据训练获得;在识别结果中不存在风险SQL时,将SQL代码发布至生产环境;调用生产环境中的第二风险识别模型对SQL代码中的慢SQL进行风险识别,获得风险识别结果;其中,第二风险识别模型基于生产环境中的SQL特征数据训练获得。利用本说明书实施例可以全流程、全方位精准识别低效SQL。

【技术实现步骤摘要】
一种SQL风险识别方法、装置及设备
本申请涉及大数据领域,特别涉及一种SQL风险识别方法、装置及设备。
技术介绍
随着大数据技术的广泛兴起,越来越多的银行建立了企业级的大数据技术中台,数据湖及数据仓库的业务日益复杂,数据量呈指数级增长态势,同时数据中台纳入的应用日益增多,性能及稳定性作为大数据技术平台质量的重要指标,受到越来越高的挑战。在大数据技术平台运营过程中,由于低效SQL(StructuredQueryLanguage,结构化查询语言)导致的性能问题日益突出,生产环境上一旦发生性能问题,将导致整个大数据技术平台资源短时间内达到瓶颈,严重影响平台的性能及稳定性。目前对低效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数据本文档来自技高网
...

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

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


2.根据权利要求1所述的方法,其特征在于,所述预设代码检查规则包括以下至少之一:大容量表使用笛卡尔积、大容量表存在全表扫描风险、大容量表存在查询列无裁剪、分区表未加分区限定条件、大容量表使用count(distinct)函数、大容量表使用row_number()函数、大容量表使用orderby排序操作、大容量表使用collect_set函数、大容量表使用collect_list函数、大容量表使用unixtimestamp函数、大容量表使用正则表达式、join字段和groupby字段一致但没打开性能优化开关、大容量表存在非主键关联风险、unionall部分个数超过规范阈值、SQL嵌套次数超过规范阈值。


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


4.根据权利要求3所述的方法,其特征在于,所述特征数据包括基础特征数据、风险特征数据、SQL执行计划特征数据;所述基础特征数据基于元数据对测试环境/生产环境中的SQL语句解析获得;所述风险特征数据基于预设代码检查规则对SQL语句检查获得;所述SQL执行计划特征数据基于对测试环境/生产环境的SQL执行计划解析获得。


5.根据权利要求3所述的方法,其特征在于,所述特征工程包括特征选择、特征变换、特征组合;其中,特征选择中选择的特征字段包括以下至少之一: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命中大容量表使用orderby排序操作次数、SQL命中大容量表使用collect_set函数次数、SQL命中大容量表使用collect_list函数次数、SQL命中大容量表使用unixtimestamp函数次数、SQL命中大容量表使用正则表达式次数、SQL命中join字段和groupby字段一致但没打开性能优化开关次数、SQL命中大容量表存在非主键关联风险次数、SQL命中un...

【专利技术属性】
技术研发人员:李海波夏雯君廖云卫欣音
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1