数据库隐患SQL的预测方法、装置、终端及存储介质
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据库隐患SQL的预测方法、装置、终端及存储介质。
背景技术
随着企业信息系统日益庞大、数据量与日俱增,就会出现数据访问、运算等方面的性能问题,例如,某个企业的SQL server可能会运行几万个SQL脚本,而这些脚本如设计不能满足当前实时的业务需求则可能会占用大量数据库服务器的CPU和IO资源,从而拖累数据库服务器的响应和处理速度。
由于每个企业的数据架构、数据分布、使用方式、使用场景等方面存在巨大差异,所以现在主流数据库管理软件基本只提供一些通用的数据性能监控方面的功能。
但有些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语句暴露出性能问题之后再处理,避免影响到数据库的运行。
附图说明
图1是本发明第一实施例的数据库隐患SQL的预测方法的流程示意图;
图2是本发明第二实施例的数据库隐患SQL的预测方法的流程示意图;
图3是本发明第三实施例的数据库隐患SQL的预测方法的流程示意图;
图4是本发明实施例的数据库隐患SQL的预测装置的功能模块示意图;
图5是本发明实施例的终端的结构示意图;
图6是本发明实施例的存储介质的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。本申请实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
图1是本发明第一实施例的数据库隐患SQL的预测方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。如图1所示,该方法包括步骤:
步骤S101:获取SQL语句执行时所处理的历史数据量随时间的变化关系,构建SQL语句执行时所处理的数据量在未来时间的变化趋势。
通常地,SQL语句分为四大类,分别是数据定义语言DDL、数据查询语言DQL、数据操纵语言DML、数据控制功能DCL,其执行时的处理的对象通常是数据库中的数据表,当一条SQL查询语句执行时,其可以查询一张数据表的所有数据,则该数据表的所有数据即该SQL查询语句执行时所需要处理的数据量。
在步骤S101中,当SQL语句上线后,确认该条SQL语句执行时所需要处理的对象,按时间点记录该对象的数据量随时间的变化关系,例如,该SQL语句用于查询数据表A,则每间隔两小时记录一次数据表A的数据量,从而获取数据表A的数据量随时间的变化关系,再根据该变化关系构建该数据表A的数据量在未来时间的变化趋势。需要理解的是,一张数据库中的数据表再被创建之后,其中存储的数据量通常随时间增长,并与时间呈线性变化关系。
步骤S102:将变化趋势输入至预先训练好的性能预测模型中进行预测,得到SQL语句在未来时间的性能变化趋势。
需要说明的是,SQL语句的性能从多方面进行体现,例如SQL语句的执行频率、执行时间、CPU消耗、内存占用、扫描方式等,SQL语句执行时间长、CPU消耗大、内存占用多、以全表扫描的方式扫描数据表而不是通过索引方式,都是属于SQL语句低性能的表现。需要理解的是,SQL语句的性能在很大程度上与其执行时所处理的数据量有关,当其所处理的数据量少时,其存在的问题通常都难以暴露,例如,在数据量少时,全表扫描方式所消耗的时间与索引扫描方式所消耗的时间非常接近,以致用户难以感受到这种差别,而当数据量较多时,全表扫描方式所需要的执行时间比索引扫描方式所需要的执行时间长很多,用户能够明显感受到这种差别。
在步骤S102中,在得到SQL语句执行时处理的数据量的变化趋势之后,将变化趋势输入至性能预测模型中,以对SQL语句在未来时间的运行性能进行预测,得到性能变化趋势,该性能变化趋势记录了在未来各个时间点SQL语句执行时可能的运行性能。
具体地,该步骤S102具体包括:
1、识别SQL语句的类别,并选取与类别对应的目标性能预测模型,每种类别对应一个性能预测模型。
具体地,SQL语句的类别通常划分为数据定义语言DDL、数据查询语言DQL、数据操纵语言DML、数据控制功能DCL四大类,根据功能的不同,所采用的性能预测模型也不相同,每个类别对应一个性能预测模型。本实施例中,通过识别SQL语句的类型,选取对应的目标性能预测模型。
2、通过变化趋势获取多个未来时间点的预测数据量。
具体地,该变化趋势记录了SQL语句执行时处理的数据量随时间的变化关系,从而通过该变化趋势预测出在未来时间点的SQL语句执行时所需要处理的预测数据量。
3、将预测数据量输入至目标性能预测模型进行预测,得到在多个未来时间点SQL语句的预测运行性能,构成性能变化趋势。
具体地,按照时间点从前往后的顺序,依次将预测数据量输入至目标性能预测模型中进行预测,从而得到多个未来时间点的预测运行性能,该多个预测运行性能即构成SQL语句在未来时间点的性能变化趋势。
进一步的,本实施例中,在使用该性能预测模型进行预测之前,还需要预先训练该性能预测模型,该预先训练性能预测模型的步骤,包括:
1、为每个类别选取多条样本SQL语句,并设定数据量大小不同的多个数据表。
具体地,针对于SQL语句的四个类别,分别为每一个类别选取多条样本SQL语句,该样本SQL语句可以数据库中直接获取。需要说明的是,各个类别的样本SQL语句包括有性能好的SQL语句,也包括有性能差的SQL语句,以保证样本数据的全面性。同时,还需设定数据量大小不同的多个数据表作为这些样本SQL语句执行时处理的对象。
2、分别执行每条样本SQL语句以处理每个数据表,得到不同数据量下样本SQL语句的样本运行性能。
具体地,以一个例子进行说明:假设数据查询语言有A、B、C三条样本SQL语句,数据表共有11张,数据量分别为1Mb、100Mb、200Mb、300Mb、400Mb、500Mb、600Mb、700Mb、800Mb、900Mb、1000Mb,则需要分别将该11张数据表作为A样本SQL语句的执行对象来执行A样本SQL语句,从而得到A样本SQL语句在处理不同大小的数据表时的样本运行性能,同理B、C样本SQL语句也按照上述方式处理,从而获取到足够数量的样本运行性能。
3、将样本运行性能和对应的数据量按类别分别输入至未训练的性能预测模型中进行训练,得到每个类别对应的第二模型参数。
具体地,每一类别的SQL语句的性能预测模型,只通过该类别的样本SQL语句来进行训练,四个类别的性能预测模型是分开进行的。
需要说明的是,性能预测模型可以通过线性回归模型、逻辑回归模型、决策树模型、神经网络模型、最近邻模型等来实现,本申请不进行限定。
4、根据第二模型参数构建每个类别的性能预测模型。
具体地,根据每个类别对应的第二模型参数来构建每个类别的性能预测模型。
步骤S103:当按照预设条件分析性能变化趋势以确认SQL语句有成为隐患SQL的可能性时,生成隐患报告。
在步骤S4中,在得到性能变化趋势之后,根据预设条件来分析SQL语句是否有变成隐患SQL的可能性,若有,则生成该SQL语句的隐患报告,以提前告知用户,从而提前对该隐患SQL进行优化。
本发明第一实施例的数据库隐患SQL的预测方法通过在SQL语句上线后,基于该SQL语句执行时所处理的数据量随时间的变化关系,分析SQL语句执行时所处理的数据量的变化趋势,利用该变化趋势来预测未来时间点该SQL语句执行时需要处理的预测数据量,再将该预测数据量输入至预先训练好的性能预测模型中进行预测,从而得到SQL语句在未来的性能变化趋势,最后利用该性能变化趋势来分析该SQL语句是否有变成隐患SQL的可能性,若有,则生成该SQL语句的隐患报告,其通过预测的方式来分析SQL语句是否可能是潜在的隐患SQL,提前帮助开发人员对隐患SQL进行识别和处理,而不需要等SQL语句暴露出性能问题之后再处理,避免影响到数据库的运行。
图2是本发明第二实施例的数据库隐患SQL的预测方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图2所示的流程顺序为限。如图2所示,该方法包括步骤:
步骤S201:选取多个历史时间点,获取每个历史时间点时SQL语句执行时所处理的对象的数据量。
在步骤S201中,需要说明的是,在SQL语句上线后,每间隔预设时间段,记录每一个SQL语句的运行情况,该运行情况中包括有每个SQL语句在执行时所处理的对象以及对象的数据量,该对象通常为数据表。需要理解的是,为了保证后续训练结果的准确性,在选取历史时间点SQL语句执行时所处理的对象的数据量时,选取最近一段时间内的数据。
步骤S202:将多个历史时间点和对应的数据量按时间先后顺序输入至未训练的数据量预测模型中进行训练,得到第一模型参数。
需要说明的是,在数据库在平稳运行后,数据库中数据表的数据增长情况通常是比较稳定的,且与时间呈线性关系,因此,本实施例中优选利用一元线性回归模型来构建数据量的变换趋势。具体地,一元线性回归模型的公式如下:
E(yi)=α+βxi;
其中,E(yi)表示给定自变量值xi时因变量的均值或期望值,即E(yi)为本实施例中的数据量,xi为时间,α、β统称为模型的参数即第一模型参数,α是常数项,β是回归系数。
通过将多个历史时间点和对应的数据量按时间先后顺序输入至未训练的数据量预测模型中进行训练,从而得到该第一模型参数。
步骤S203:根据第一模型参数构建训练好的数据量预测模型,并以所述训练好的数据量预测模型预测对象的数据量随时间的变化趋势。
在步骤S203中,在得到第一模型参数之后,以该第一模型参数构建数据量预测模型,从而对未来的数据量进行预测,以得到数据量随时间的变化趋势。
步骤S204:将变化趋势输入至预先训练好的性能预测模型中进行预测,得到SQL语句在未来时间的性能变化趋势。
在本实施例中,图2中的步骤S204和图1中的步骤S102类似,为简约起见,在此不再赘述。
步骤S205:当按照预设条件分析性能变化趋势以确认SQL语句有成为隐患SQL的可能性时,生成隐患报告。
在本实施例中,图2中的步骤S205和图1中的步骤S103类似,为简约起见,在此不再赘述。
本发明第二实施例的数据库隐患SQL的预测方法在第一实施例的基础上,通过根据SQL语句在多个历史时间点执行时所处理的数据量来构建数据量预测模型,从而对SQL语句在未来执行时需要处理的数据量进行预测,以构建出SQL语句执行时所处理数据量的变化趋势,再利用该变化趋势来预测SQL语句的性能变化趋势,方便用户分析该SQL语句是否有成为隐患SQL的可能性,其中,SQL语句所处理的数据量的变化趋势是根据该SQL语句在历史时间点执行时所处理的数据量构建的,而不是采用样本SQL语句的来预测,使得构建的数据量预测模型与该SQL语句的真实情况更为接近。并且,为了保证预测结果,在每次实施本实施例的数据库隐患SQL的预测方法时,均需要建立一次SQL语句所处理数据量的数据量预测模型,以保证该数据量预测模型的时效性。
图3是本发明第三实施例的数据库隐患SQL的预测方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图3所示的流程顺序为限。如图3所示,该方法包括步骤:
步骤S301:获取SQL语句执行时所处理的历史数据量随时间的变化关系,构建SQL语句执行时所处理的数据量在未来时间的变化趋势。
在本实施例中,图3中的步骤S301和图1中的步骤S101类似,为简约起见,在此不再赘述。
步骤S302:将变化趋势输入至预先训练好的性能预测模型中进行预测,得到SQL语句在未来时间的性能变化趋势。
在本实施例中,图3中的步骤S302和图1中的步骤S102类似,为简约起见,在此不再赘述。
步骤S303:通过性能变化趋势获取SQL语句在多个未来时间点对应的预测运行性能。
在步骤S303中,在得到性能变化趋势之后,根据该性能变化趋势即可获取在未来多个时间点时,SQL语句执行时的预测运行性能。
步骤S304:比较每一个预测运行性能与预设性能阈值的大小。
需要说明的是,该预设性能阈值预先设置,用于判断SQL语句的运行性能的高低,当预测运行性能高于该预设性能阈值时,说明SQL语句出现了低性能运行的情况,当预测运行性能低于该预设性能阈值时,说明SQL语句未出现低性能运行的情况。
在步骤S304中,预测运行性能、预测数据量和未来时间点是一一对应的关系,因此,在得到多个未来时间点的预测运行性能之后,按照未来时间点从前往后的顺序,依次将预测运行性能与预设性能阈值进行比较,从而确认预测运行性能是否超过预设性能阈值。
步骤S305:当存在目标预测运行性能超过预设性能阈值时,确认目标预测运行性能对应的目标时间点。
在步骤S305中,当存在目标预测运行性能超过预设性能阈值时,获取该目标预测运行性能对应的预测数据量,再获取该预测数据量与未来时间点的对应关系,从而确认目标预测运行性能对应的目标时间点,即在该目标时间点时,目标预测运行性能超过了预设性能阈值。
步骤S306:将目标时间点作为SQL语句首次出现低运行性能的时间,并将SQL语句作为隐患SQL。
在步骤S306中,SQL语句的目标预测运行性能超过了预设性能阈值,因此,将SQL语句划归为隐患SQL,记录其出现低性能运行的情况的目标时间点。
步骤S307:生成SQL语句的隐患报告。
在步骤S307中,通过生成该SQL语句的隐患报告,从而告知用户该SQL语句时隐患SQL,并且,还告知用户,该SQL语句在目标时间点可能会出现低性能运行的情况。
进一步的,该步骤S307具体包括:
1、计算目标预测运行性能与预设性能阈值的差值,并确认差值所属的区间范围。
2、获取区间范围对应的隐患级别,区间范围与隐患级别预先设定且一一对应,区间范围的数值越大,隐患级别越高。
需要说明的是,该区间范围由用户预先设定的。具体地,目标预设运行性能与预设性能阈值的差值越大,说明该SQL语句造成的影响就越大,为了方便警示开发人员,因此,本实施例中,用户可以提前设定多个区间范围,例如,(0,1]、(1,2]、(2,3],而每个区间范围均对应一个预设的隐患级别,例如(0,1]对应第一隐患级别,(1,2]对应第二隐患级别,(2,3]对应第三隐患级别,并且,每个隐患级别的重要程度不相同,区间范围数值越大的,对应的隐患级别越高,例如(2,3]的数值大于(1,2]的数值,则第三隐患级别高于第二隐患级别。
3、根据隐患级别生成关于SQL语句的隐患报告并输出。
具体地,通过根据该隐患级别生成关于SQL语句的隐患报告,用户可以通过查看SQL语句的隐患级别即可确认其重要程度,可以优先处理掉隐患级别高的隐患SQL。
进一步的,在根据隐患级别生成关于SQL语句的隐患报告并输出的步骤之前,还包括:通过预设隐患规则分析SQL语句所属的隐患类别。
需要说明的是,该预设隐患规则预先设定,例如:隐患SQL可以划分为高频慢SQL、高频全表扫描SQL、高频未使用绑定变量SQL等,其中,“高频”是指在一段时间内的执行次数;“慢”是指SQL语句的平均执行时间超过预设时间;“全表扫描”是指执行计划出现全表扫描的方式,其还涉及数据表的大小,例如当数据表超过500Mb时发生全变扫描,“绑定变量”是指为了减少SQL语句的解析次数,使用绑定变量则不需要每次都执行SQL语句的解析。
而根据隐患级别生成关于SQL语句的隐患报告并输出的步骤,包括:根据隐患级别和隐患类别生成关于SQL语句的隐患报告并输出。
具体地,通过提前确认出该SQL语句的隐患类别,从而方便用户快速制定出优化该SQL的方案。
进一步的,在一些实施例中,还可根据隐患级别和目标时间点来生成隐患报告,其中,隐患级别和目标时间点分别占据不同的权重系数,在得到隐患级别和目标时间点之后,分别乘以各自对应的权重系数再累加,根据累加值来确认该隐患SQL的重要程度,方便用户制定优化方案。
本发明第三实施例的数据库隐患SQL的预测方法在第一实施例的基础上,通过分析性能变化趋势得到多个未来时间点的预测运行性能,再利用预测运行性能与预设性能阈值进行比较,从而确认是否为低性能运行情况,若是,则生成隐患报告。并且,在生成隐患报告时,还会为SQL语句按照预测运行性能与预设性能阈值的差值的大小来划定隐患级别,再根据隐患级别生成隐患报告,从而用户在查看隐患报告之后,可以优先处理隐患级别高的隐患SQL,然后处理隐患级别低的隐患SQL,避免出现隐患级别高的隐患SQL未及时处理而影响到数据库的运行。
图4是本发明实施例的数据库隐患SQL的预测装置的功能模块示意图。如图4所示,该装置40包括构建模块41、预测模块42和分析模块43。
构建模块41,用于获取SQL语句执行时所处理的历史数据量随时间的变化关系,构建SQL语句执行时所处理的数据量在未来时间的变化趋势。
预测模块42,用于将变化趋势输入至预先训练好的性能预测模型中进行预测,得到SQL语句在未来时间的性能变化趋势。
分析模块43,用于当按照预设条件分析性能变化趋势以确认SQL语句有成为隐患SQL的可能性时,生成隐患报告。
可选地,构建模块41获取SQL语句执行时所处理的历史数据量随时间的变化关系,构建SQL语句执行时所处理的数据量在未来时间的变化趋势的操作可以为:构建模块41选取多个历史时间点,获取每个历史时间点时SQL语句执行时所处理的对象的数据量;将多个历史时间点和对应的数据量按时间先后顺序输入至未训练的数据量预测模型中进行训练,得到第一模型参数;根据第一模型参数构建训练好的数据量预测模型,并以所述训练好的数据量预测模型预测对象的数据量随时间的变化趋势。
可选地,预测模块42将变化趋势输入至预先训练好的性能预测模型中进行预测,得到SQL语句在未来时间的性能变化趋势的操作还可以为:预测模块42识别SQL语句的类别,并选取与类别对应的目标性能预测模型,每种类别对应一个性能预测模型;通过变化趋势获取多个未来时间点的预测数据量;将预测数据量输入至目标性能预测模型进行预测,得到在多个未来时间点SQL语句的预测运行性能,构成性能变化趋势。
可选地,该装置40还包括训练模块,用于预先训练性能预测模型。训练模块预先训练性能预测模型的操作具体为:训练模块为每个类别选取多条样本SQL语句,并设定数据量大小不同的多个数据表;分别执行每条样本SQL语句以处理每个数据表,得到不同数据量下样本SQL语句的样本运行性能;将样本运行性能和对应的数据量按类别分别输入至未训练的性能预测模型中进行训练,得到每个类别对应的第二模型参数;根据第二模型参数构建每个类别的性能预测模型。
可选地,分析模块43当按照预设条件分析性能变化趋势以确认SQL语句有成为隐患SQL的可能性时,生成隐患报告的操作还可以为:分析模块43通过性能变化趋势获取SQL语句在多个未来时间点对应的预测运行性能;比较每一个预测运行性能与预设性能阈值的大小;当存在目标预测运行性能超过预设性能阈值时,确认目标预测运行性能对应的目标时间点;将目标时间点作为SQL语句首次出现低运行性能的时间,并将SQL语句作为隐患SQL;生成SQL语句的隐患报告。
可选地,分析模块43生成SQL语句的隐患报告的操作还可以为:分析模块43计算目标预测运行性能与预设性能阈值的差值,并确认差值所属的区间范围;获取区间范围对应的隐患级别,区间范围与隐患级别预先设定且一一对应,区间范围的数值越大,隐患级别越高;根据隐患级别生成关于SQL语句的隐患报告并输出。
可选地,分析模块43根据隐患级别生成关于SQL语句的隐患报告并输出的操作之前,还包括:分析模块43通过预设隐患规则分析SQL语句所属的隐患类别;分析模块43根据隐患级别生成关于SQL语句的隐患报告并输出,包括:分析模块43根据隐患级别和隐患类别生成关于SQL语句的隐患报告并输出。
请参阅图5,图5为本发明实施例的终端的结构示意图。如图5所示,该终端50包括处理器51及和处理器51耦接的存储器52。
存储器52存储有用于实现上述任一实施例所述的数据库隐患SQL的预测方法的程序指令。
处理器51用于执行存储器52存储的程序指令以预测SQL语句是否会成为隐患SQL。
其中,处理器51还可以称为CPU(Central Processing Unit,中央处理单元)。处理器51可能是一种集成电路芯片,具有信号的处理能力。处理器51还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
参阅图6,图6为本发明实施例的存储介质的结构示意图。本发明实施例的存储介质存储有能够实现上述所有方法的程序文件61,其中,该程序文件61可以以软件产品的形式存储在上述存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。
在本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。