一种SQL脚本的异常检测方法及其终端与流程

文档序号:14156968阅读:157来源:国知局
本发明属于数据处理
技术领域
,尤其涉及一种sql脚本的异常检测方法及其终端。
背景技术
:sql脚本被广泛应用于网络服务领域,因此sql脚本运行效率的高低决定着服务请求的反应速率,若sql脚本运行发生异常,将导致用户发起的服务请求需要较长时间进行处理以及请求堆积的情况。因此,如何对sql脚本的异常情况进行快速检测显得尤为重要。而现有的sql脚本的异常检测技术,需要管理员对sql语言进行人工分析,检测效率较低,并且依赖管理员具有较高的技术水平,从而提高了维护的成本。技术实现要素:有鉴于此,本发明实施例提供了一种sql脚本的异常检测方法及其终端,以解决现有的sql脚本的异常检测技术,需要管理员对sql语言进行人工分析,检测效率较低,并且依赖管理员具有较高的技术水平,从而提高了维护的成本的问题。本发明实施例的第一方面提供了一种sql脚本的异常检测方法,所述sql脚本的异常检测方法包括:获取各个sql脚本的运行状态参数;根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况;将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数;根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本;获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线;若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间;若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值;若存在一所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。本发明实施例的第二方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取各个sql脚本的运行状态参数;根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况;将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数;根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本;获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线;若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间;若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值;若存在一个所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。本发明实施例的第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取各个sql脚本的运行状态参数;根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况;将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数;根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本;获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线;若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间;若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值;若存在一个所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。实施本发明实施例提供的一种sql脚本的异常检测方法及其终端具有以下有益效果:本发明实施例通过获取sql脚本的运行状态参数,并通过该运行状态参数确定该sql脚本在预设的时间段内的消耗情况,得到第一消耗特征值,继而终端设备选取消耗最大的n个sql脚本,进一步确定上述sql脚本是否存在异常情况,因而终端设备将根据消耗较大的n个sql脚本生成脚本消耗异常列表,并从脚本异常消耗列表中提取接收到的目标脚本选取指令对应的sql脚本作为目标sql脚本,进而获取该目标sql脚本对应的历史消耗情况,生成历史消耗特征曲线,并通过相关的判定阈值,识别该历史消耗特征曲线是否反映出该目标sql脚本存在异常情况,若是,则识别该脚本为异常脚本。与现有的sql脚本的异常检测方法相比,本发明实施例无需数据库的管理员对sql脚本的异常情况进行手动排查,终端设备自动生成一个存在异常几率较大的脚本异常消耗列表,缩小了管理员的检测范围,并根据管理员的选择的目标sql脚本,输出是否异常的检测结果,无需用户进行异常识别,大大提高了异常检测的准确率以及响应速率。另一方面,由于异常检测的过程主要通过终端设备完成,对于管理员的技术水平要求较低,从而也降低了数据库的维护成本。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本发明第一实施例提供的一种sql脚本的异常检测方法的实现流程图;图2是本发明第二实施例提供的一种sql脚本的异常检测方法的具体实现流程图;图3是本发明第三实施例提供的一种sql脚本的异常检测方法s101的具体实现流程图;图4是本发明第四实施例提供的一种sql脚本的异常检测方法s102的具体实现流程图;图5是本发明第五实施例提供的一种sql脚本的异常检测方法s103的具体实现流程图;图6是本发明一实施例提供的一种sql脚本的异常检测终端的结构框图;图7是本发明一实施例提供的一种终端设备的示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例通过获取sql脚本的运行状态参数,并通过该运行状态参数确定该sql脚本在预设的时间段内的消耗情况,得到第一消耗特征值,继而终端设备选取消耗最大的n个sql脚本,进一步确定上述sql脚本是否存在异常情况,因而终端设备将根据消耗较大的n个sql脚本生成脚本消耗异常列表,并从脚本异常消耗列表中提取接收到的目标脚本选取指令对应的sql脚本作为目标sql脚本,进而获取该目标sql脚本对应的历史消耗情况,生成历史消耗特征曲线,并通过相关的判定阈值,识别该历史消耗特征曲线是否反映出该目标sql脚本存在异常情况,若是,则识别该脚本为异常脚本,解决了现有的sql脚本的异常检测技术,需要管理员对sql语言进行人工分析,检测效率较低,并且依赖管理员具有较高的技术水平,从而提高了维护的成本的问题。在本发明实施例中,流程的执行主体为sql脚本的异常检测终端,终端设备包括手机、计算机设备、平板电脑、服务器等终端,特别地,该终端设备具体为一部放于数据库系统中的sql脚本的检测终端,通过获取各个sql脚本在数据库中的运行情况,并执行异常检测操作。图1示出了本发明第一实施例提供的sql脚本的异常检测方法的实现流程图,详述如下:在s101中,获取各个sql脚本的运行状态参数。在本实施例中,异常检测的触发条件包括手动触发以及自动触发两种模式。其中,手动触发具体为:管理员在终端设备上生成一个异常检测启动指令,或通过用户终端向终端设备发送一个异常检测启动指令,终端设备若接收到该异常检测启动指令后,则执行s101的相关操作。而自动触发具体为:终端设备设置有异常检测启动时机,若终端设备检测到当前状态与预设的异常检测启动时机匹配,则执行s101的相关操作。可选地,在本实施中,所述异常检测启动时机可以为一预设的检测周期,终端设备在监测到当前时刻满足该检测周期,则执行s101的相关操作。所述异常检测启动时机还可以为一运行消耗阈值,例如资源占用率,终端设备在监测到当前时刻待检测终端的运行消耗值大于或等于预设的运行消耗阈值,则执行s101的相关操作。由于设备的消耗过大,一般是由于sql脚本异常而导致的,因此可通过运行消耗的情况作为触发条件,与周期触发的方式相比,可减少不必要的检测流程,从而提高设备的资源利用率。在本实施例中,sql脚本可运行与终端设备的数据库内,该情况下,待检测的终端即为本发明实施例提供的终端设备,即检测本地数据库中各个sql脚本是否存在异常情况;sql脚本也可以运行与终端设备外的其他数据库服务器中,在该情况下,终端设备即作为一独立的检测终端,监控该数据库服务器中的sql脚本是否存在异常情况。特别地,终端设备还可以检测一数据库系统,该数据库系统中包含多个数据库服务器,且各个数据库服务器均从同一个sql脚本资源库中提取对应的sql脚本进行查询操作。其中,sql脚本资源库中存储有多个sql脚本,用于满足不同用户的查询需求,例如用户需要查询季度奖金相关的数据,则通过调用第一sql脚本进行查询;用户需要统计车险客户的续保情况,则通过调用第二sql脚本进行查询。在本实施例中,终端设备在接收到用户的检测指令或满足对应的检测触发条件时,将分别获取各个sql脚本的运行状态参数,特别地,该sql脚本的运行状态参数中包含多个参数项,每个参数项对应一个参数值,分别表征不同的运行特征。其中,该sql脚本的运作状态参数包括但不限于:运算资源占用参数、平均运行时间参数、内容占用参数以及调用次数。运行资源占用参数具体为调用该sql脚本时,执行一次查询流程,所需消耗的运算资源,可选地,该运行资源占用参数可用cpu的平均占用个数来表示。在s102中,根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况。在本实施例中,终端设备在获取了各个sql脚本的运行状态参数后,将根据各个运行状态参数获取sql脚本的消耗情况,因此将sql脚本对应的运行状态参数中包含的多个参数值,导入到预设的消耗特征转换模型中,以通过运行状态参数计算其对应的第一消耗特征值,通过该第一消耗特征值表征该sql脚本的消耗情况。可选地,在本实施例中,该消耗特征转换模型可以为一哈希函数,终端设备将所述sql脚本的运作状态参数输入到该哈希函数中,继而根据各个参数值所在的参数范围,得到一个对应的第一消耗特征值。可选地,在本实施例中,该第一消耗特征值具体为一消耗等级。在该情况下,终端设备除了获取用户当前sql脚本的运行状态参数外,该获取该sql脚本的平均运行状态参数,将当前的运行状态参数与平均状态参数进行比对,确定当前的消耗等级。该消耗等级包括但不限于:“远低于平均消耗”、“低于平均消耗”、“维持正常水平”、“高于平均消耗”以及“远高于平均消耗”,终端设备通过显示该消耗等级,可直观获知各个sql脚本的消耗情况,提高了用户的信息获取效率。在s103中,将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数。在本实施例中,终端设备在计算了各个sql脚本对应的第一消耗特征值后,将根据第一消耗特征值的大小进行排序,其中该第一消耗特征值数值越大,则表示其资源占用越多,消耗越大,而该第一消耗特征值数值越小,则表示其资源占用越小,消耗也较小,特别地,第一消耗特征值较大的sql脚本其对应的运行时间越长。因此,经过上述排序后,终端设备将得到一个sql资源消耗序列,并根据预设的n值,从该序列中截取数值较大的n个sql脚本,即上述的前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表,并通过显示模块进行显示,或直接将该脚本消耗列表发送给数据库管理员对应的用户终端。在本实施例中,该n的数值可根据用户的需求进行设置,可以根据系统中包含的sql脚本的数量确定该n的数值。例如,从sql脚本资源库中,提取10%的sql脚本生成异常消耗列表,则终端设备首先获取该sql脚本资源中包含的脚本数量,并通过预设的比例值,计算该n值。特别地,该n值可根据当前监测时间的不同,配置对应的n值。对于繁忙时间,可能需要进行精细sql脚本异常检测,则该n值较大;而对于空闲时间,系统的空闲资源较大,因此可进行粗略sql脚本异常检测,则该n值较小。在本实施例中,若存在多个sql脚本的第一消耗特征值相同,因而选取的sql脚本数m大于预设的n值,在该情况中,终端设备可将上述m个sql脚本生成脚本消耗异常列表,且该列表中包含消耗特征较大的m个sql脚本;终端设备还可以将根据用户设置的检测模式,从m个sql脚本中,选取n个sql脚本。具体地,由于不同的sql脚本中的运行状态参数包含多个参数项,因此可根据参数项的数值的大小进行排序,确定n个sql脚本。例如,该n值为3,而消耗值第三大的sql脚本有2个,因此选取得到的sql脚本数为4,第一大的sql脚本、第二大的sql脚本以及两个并列第三大的sql脚本。此时,终端设备获取当前的检测模式为运行时间优先模式,则根据两个并列第三大的sql脚本中运行状态参数的运行时间值,选取数值较大的一个sql脚本,作为异常消耗的sql脚本,与前两个sql脚本生成脚本消耗异常列表。在s104中,根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本。在本实施例中,用户可通过终端设备的显示模块,查看该脚本消耗异常列表,从该列表中选取一个或多个sql脚本作为目标sql脚本,其中,该目标sql脚本具体为预判该sql脚本为异常脚本,但需要进一步进行检测确认的脚本。当然,终端设备也可以通过预设的脚本选取算法,从脚本异常消耗列表中,选取目标sql脚本,也可以依次对上述脚本异常消耗列表中的所有sql脚本一一进行排查。具体地,该预设的脚本选取算法可以为:根据各个sql脚本的历史消耗特征值,确定脚本消耗异常列表中各个sql脚本的方差,继而计算本次获取的第一消耗特征值与该脚本的历史消耗特征值的差值,将该差值与方差进行比对,若差值小于或等于该方差,则证明本次第一消耗特征值在正常的浮动范围之内,识别为非目标sql脚本;反之,若该差值大于该方差,则识别为目标sql脚本。在本实施例中,终端设备在接收到目标脚本选取指令后,将获取该目标脚本选取指令中包含的脚本标识,并将该脚本标识与脚本消耗异常列表中的各个sql脚本的脚本标识进行匹配,确定该选取指令对应的sql脚本,识别为目标sql脚本。在本实施例中,该脚本标识可以为sql脚本的文件名、脚本编号、列表中的序列号,还可以是用户在终端设备的触控模块上从脚本消耗异常列表中选取目标sql脚本时,触发的位置坐标。在s105中,获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线。在本实施例中,终端设备记录有各个sql脚本的历史运行情况。终端设备将以预设的时间间隔获取各个sql脚本的运行状态参数,并存储于各个sql脚本对应的历史运行记录中。当用户需要获取该sql脚本的历史运行情况,可以通过直接获取该历史运行记录,确定其对应的运行状态参数的变化情况。在本实施例中,终端设备将根据该预存的sql脚本的历史运行记录,获取各个预设的时间节点对应的运行状态参数,并将运行状态参数转换为第一消耗特征值,从而得到该sql脚本对应的第一消耗特征值的历史消耗记录。特别地,该预设的时间节点可以为预设的参数采集周期,即各个预设的时间间隔对应的时间点。在本实施例中,终端设备将以第一消耗特征值为纵坐标,时间点为横坐标,生成一个坐标轴,并根据各个时间节点对应的第一消耗特征值,绘制出历史消耗特征曲线,并通过显示模块输出该历史消耗特征曲线,以便用户查看。可选地,终端设备除了生成该关于第一消耗特征值的历史消耗特征曲线外,还可以根据各个运行状态参数,生成不同运行状态参数对应的特征曲线。例如,该运行状态参数包含平均运行时长,则终端设备可生成一条关于平均运行时长对应的历史运行时间特征曲线。继而终端设备可通过所述运行状态参数对应的曲线判别算法,确定该目标sql脚本是否为异常脚本。在s106中,判断历史消耗特征曲线中是否存在所述第一消耗特征值大于预设的消耗阈值的坐标点。在s107中,若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间。在本实施例中,终端设备首先会判定该历史消耗特征曲线中是否存在第一消耗特征值大于预设的消耗阈值的坐标点。若该历史消耗特征曲线中存在上述坐标点,则表示目标sql脚本的消耗已经超出正常的消耗范围,需要断定该异常情况是因为网络环境等外界因素而产生的抖动,还是因为目标sql脚本本身处于异常导致的,即需要进一步判定,并执行s108的相关操作;反之,若历史消耗特征曲线中,任一坐标点对应的第一消耗特征值均小于该预设的消耗阈值,则表示该目标sql脚本一直处于正常的工作状态,因此识别该sql脚本为正常的sql脚本。在本实施例中,该预设的消耗阈值可通过用户自行设置,可以为系统的默认值。优选地,该预设的消耗阈值与该目标sql脚本的平均消耗值相关。具体地,终端设备首先获取该目标sql脚本的在各个检测点中得到的第一消耗特征值,并得到平均消耗值,通过预设的加权系数以及平均消耗值,得到该消耗阈值。通过上述方式,该消耗阈值通过历史的第一消耗特征值进行迭代计算,从而实现了消耗阈值的动态调整,继而提高了异常检测的准确率。在s108中,判断持续时间是否大于预设的跳变时间阈值。在s109中,若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值。在本实施例中,终端设备在确定该目标sql脚本存在消耗异常的坐标点后,将检测该异常消耗的持续时间,判断该异常消耗是否为跳变抖动。因此将获取该历史消耗特征曲线中第一消耗特征值大于预设的消耗阈值的持续时间,并将该持续时间与预设的跳变时间阈值进行比较。若该持续时间小于或等于跳变时间阈值,则表示该消耗异常属于跳变抖动,并非目标sql脚本异常而导致的,由于脚本异常一般是一个持续消耗异常的过程;若该持续时间大于跳变时间阈值,则表示该消耗异常的情况是一个持续消耗异常的过程,因此将进行下一步的阈值判定。在本实施例中,该持续时间具体指的是连续的坐标点的第一消耗阈值均大于预设的消耗阈值对应的持续时间,若历史消耗曲线中存在两段不连续的曲线,且其中坐标点的第一消耗值均大于消耗阈值,则分别计算两段曲线对应的持续时间,即得到第一持续时间以及第二持续时间。并将第一持续时间以及第二持续时间分别与跳变时间阈值进行判定。因此,若历史消耗特征曲线对应多个持续时间,则任一持续时间大于预设的跳变时间阈值,则执行s110的相关操作。在s110中,判断是否存在一个所述坐标点对应的导数值大于预设的导数阈值。在s111中,若存在一个所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。在本实施例中,终端设备将获取该持续时间内各个坐标点对应的导数值,由于导数值可以表示该目标sql脚本的消耗变化速度,从而确定该第一消耗特征值是缓慢的变化抑或是急速的突变。若该导数值较小,则表示该目标sql文件的消耗情况是缓慢攀升或缓慢下降,则可能是由于调用该目标sql文件对应的终端设备的处于满载状态或硬件发热,而导致消耗逐渐增加,而并非目标sql文件异常导致的;若该导数值较大,则表示该目标sql文件的消耗情况是急剧攀升抑或是急剧下降,导致该情况出现较大可能是由于sql文件发生突变,由正常状态转变为异常状态导致的。因此,若该持续时间内存在一坐标点的导数值大于预设的导数阈值,则表示该sql脚本为异常脚本;反之,若该目标sql脚本的持续时间对应的曲线中,不存在任一坐标点的导数值大于预设的导数阈值,则表示该目标sql为正常脚本。特别地,若s109中存在多段不连续的曲线的第一消耗值大于预设的消耗阈值,则只选取持续时间大于预设的跳变时间对应的曲线执行s110的相关操作。以上可以看出,本发明实施例提供的一种sql脚本的异常检测方法通过获取sql脚本的运行状态参数,并通过该运行状态参数确定该sql脚本在预设的时间段内的消耗情况,得到第一消耗特征值,继而终端设备选取消耗最大的n个sql脚本,进一步确定上述sql脚本是否存在异常情况,因而终端设备将根据消耗最大的n个sql脚本生成脚本消耗异常列表,并从脚本异常消耗列表中提取接收到的目标脚本选取指令对应的sql脚本作为目标sql脚本,进而获取该目标sql脚本对应的历史消耗情况,生成历史消耗特征曲线,并通过相关的判定阈值,识别该历史消耗特征曲线是否反映出该目标sql脚本存在异常情况,若是,则识别该脚本为异常脚本。与现有的sql脚本的异常检测方法相比,本发明实施例无需数据库的管理员对sql脚本的异常情况进行手动排查,终端设备自动生成一个存在异常几率较大的脚本异常消耗列表,缩小了管理员的检测范围,并根据管理员的选择的目标sql脚本,输出是否异常的检测结果,无需用户进行异常识别,大大提高了异常检测的准确率以及响应速率。另一方面,由于异常检测的过程主要通过终端设备完成,对于管理员的技术水平要求较低,从而也降低了数据库的维护成本。图2示出了本发明第二实施例提供的一种sql脚本的异常检测方法的具体实现流程图。参见图2所示,相对于图1所述实施例,本实施例提供的一种sql脚本的异常检测方法中还包括s201以及s202,具体详述如下:进一步地,在所述若存在一所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本之后,还包括:在s201中,获取所述持续时间内所述目标sql脚本的版本变更文件。在本实施例中,终端设备在判定目标sql脚本为异常脚本后,需要对其异常情况进行修复。对于sql脚本而言,导致脚本发生异常一般是由于脚本的内容变更后,与数据库的版本或其他应用存在处理逻辑冲突,从而导致脚本无法正常运行,因此,可通过获取变更文件并还原变更文件中的变更内容,实现对sql脚本进行异常修复。在本实施例中,终端设备检测到sql脚本在持续时间内发生消耗异常,即表示该时间段内很可能由于目标sql脚本发生了版本变更,从而致使数据库在调用变更后的sql脚本时,会出现消耗异常的情况。因而,终端设备将获取在持续时间内该目标sql脚本对应的版本变更文件。需要说明的是,该版本变更文件的数量可以为一个,即在持续时间段内只发生了一次版本变更,也可以至少两个,即在持续时间段内发生了多次版本变更。其中,一个版本变更文件中可包含多个变更内容,即用户进行一次版本变更对应该sql脚本中的多个内容进行调整或优化。可选地,在本实施例中,若持续时间内并没有对应的版本变更文件,此时终端设备可获取所述持续时间前的预设时间区间内,该目标sql脚本对应的版本变更文件。终端设备在判定持续时间内不存在版本变更文件时,即可能是在持续时间之前发生了版本变更,因此,终端设备将以该持续时间为基准,往前推移预设的时间区间,获取该时间区间内是否存在该目标sql脚本的版本变更文件,若存在,则获取该版本变更文件并执行s202的操作。在s202中,依所述版本变更文件的创建时间的倒序逐次还原所述版本变更文件的变更内容,并监测所述目标sql脚本当前的运行状态参数,直到所述当前的运行状态参数对应的第一消耗特征值小于或等于所述消耗阈值。在本实施例中,终端设备在获取到版本变更文件时,需要对该版本变更文件中包含的变更内容逐步进行修复,并且还原过程是变更过程对应的逆过程,因而需要根据版本变更文件的创建时间的倒序,依次对其中的变更内容逐一进行还原,以保持还原过程文件处理逻辑的合理性。在本实施例中,终端设备在每还原一个变更内容后,将获取还原后目标sql文件在预设时间内的运行状态参数,并根据该运行状态参数计算其对应的第一消耗特征值,若该第一消耗特征值小于或等于预设的消耗阈值,则表示异常情况已修复成功,终止s202的相关操作;反之,若该第一消耗特征值仍大于预设的消耗阈值,则进行下一个变更内容的还原,重复执行上述操作。在本实施例中,若对多有变更文件的变更内容均进行还原操作后,该目标sql文件的消耗特征值仍处于较高的水平,此时,终端设备可生成一条人工修复支援指令推送至该数据库系统对应的处理账户,以便该处理账户对目标sql脚本进行异常修复。在本发明实施例中,终端设备通过还原目标sql脚本中的变更内容,实现对异常的sql脚本进行修复的目的,从而实现自动异常检测并自动对异常进行修复,提高了异常的处理效率以及响应速度。图3了本发明第三实施例提供的一种sql脚本的异常检测方法s101的具体实现流程图。参见图3所示,相对于图1所述实施例,本实施例提供的一种sql脚本的异常检测方法中s101包括s301~s303,具体详述如下:进一步地,所述获取各个sql脚本的运行状态参数,包括:在s301中,监测当前时间是否满足预设的异常检测触发时机。终端设备在获取各个sql脚本之前,需要对其触发时机进行判定,在本实施例中,终端设备采用时机触发以及消耗触发相结合的检测触发方式。首先,终端设备将获取监测当前时间是否与预设的异常检测触发时机匹配,特别地,该异常检测触发时机为一周期触发时机,也可以为用户预先设置的多个时间点。当终端设备判定当前时间与异常检测触发时机相匹配,则执行s302的相关操作,反之,则保持待机状态,以减少电量的消耗。在s302中,若当前时间满足预设的异常检测触发时机,则获取待检测终端当前的资源占用率。在本实施例中,终端设备在获知当前时间与异常检测触发时机相匹配时,则获取该待检测终端的当前的资源占用率。其中,待检测终端具体为:调用各个sql脚本的终端。若本实施例的终端设备集成于数据库服务器中,且该数据库服务器调用各个sql脚本,则在该情况下,待检测终端即为本实施例提供的终端设备;若终端设备为一独立的检测终端,则该待检测终端即为调用各个sql脚本的数据库服务器。在本实施例中,终端设备将获取待检测终端当前的资源占用率,若待检测终端为单独一个终端,即调用各个sql脚本的数据库服务器均为同一个服务器,则可直接将该终端的资源占用率作为该待检测终端对应的资源占用率;若待检测终端为多个数据库服务器组成的数据库系统,则该资源占用率为整个数据库系统的资源占用率。特别地,若终端设备集成于数据库服务器内,则获取该终端设备本地的资源占用率。在本实施例中,终端设备设置有一占用率阈值,当获取到的资源占用率大于该占用率阈值时,则表示可能存在sql脚本异常的情况,执行s303的操作;反之,若获取到的资源占用率小于或等于占用率阈值,则表示当前sql脚本运行基本处于正常状态,并未达到需进行异常处理的级别,因此将返回s301,等待下一个检测时机的到达。可选地,在本实施例中,该占用率阈值可根据时间的推移而变化,例如空闲时段,调用sql脚本的次数以及个数较少,因此其对应的占用率阈值可以较低,而满分时段,调用sql脚本的次数以及个数均较多,因此其对应的占用率阈值可以较高。在s303中,判断资源占用率是否大于预设的占用率阈值。在s304中,若所述资源占用率大于预设的占用率阈值,则获取各个所述sql脚本的运行状态参数。在本实施例中,终端设备在检测到资源占用率大于预设的占用率阈值时,则判定当前sql脚本中可能存在异常脚本,因此将执行异常检测的操作。在本发明实施例中,通过设置异常检测时机以及占用率阈值,从而在可能存在异常的情况时,自动执行异常检测操作,从而避免不必要的检测流程,提高了终端的资源利用率。图4示出了本发明第四实施例提供的一种sql脚本的异常检测方法s102的具体实现流程图。参见图4所示,相对于图1至3所述实施例,本实施例提供的一种sql脚本的异常检测方法中所述根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值第一消耗特征值第一消耗特征值,包含s401以及s402,详述如下:进一步地,所述运行状态参数包括:运算资源占用参数、平均运行时间参数、内存占用参数以及运行次数;所述根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值,包括:在s401中,确定各个所述运行状态参数对应的权重值。在本实施例中,终端设备获取各个sql脚本的运行状态参数包含多种类型的参数,分别为运算资源占用参数、平均运行时间参数、内存占用参数以及运行次数,不同的运作状态参数对应的权重值均不相同,因此终端设备首先需要确定各个运行状态参数对应的权重值,并根据上述权重值生成与之对应的消耗特征转换模型。可选地,在本实施例中,终端设备可根据当前的检测模式,调整各个运行状态参数对应的权重值。例如,若当前的检测模式为运行时间优先模式,则平均运行时间参数对应的权重值较大,并适当调整其他运行状态参数的权重值;若当前的检测模式为内存优先模式,则内存占用参数对应的权重值较大,从而使得第一消耗特征值能够更有效表示对应检测模式的消耗情况。在s402中,将各个所述sql脚本对应的所述运算资源占用参数、所述平均运行时间参数、所述内存占用参数以及所述运行次数,导入至消耗特征值转换模型,分别计算出各个所述sql脚本对应的第一消耗特征值,所述消耗特征值转换模型具体为:ex=α1ct(sql)+α2t(sql)+α3buff(sql)+α4q(sql)其中,ex为sql脚本的第一消耗特征值,α1、α2、α3和α4为各个运行状态参数对应的权重值,ct(sql)为sql脚本的运算资源占用参数,t(sql)为sql脚本的平均运行时间参数,buff(sql)为sql脚本的内存占用参数,q(sql)为sql脚本的运行次数。在本实施例中,终端设备将s101中获取得到的多个运行状态参数对应的参数值导入到消耗特征转换模型中对应的位置中,并通过该消耗特征值转换模型,通过运行状态参数计算对应的第一消耗特征值。在本发明实施例中,通过将获取得到的多个运行状态参数导入到预设的消耗特征转换模型中,实现由运行状态参数到第一消耗特征值的转换,提高了第一消耗特征值的计算效率。图5示出了本发明第五实施例提供的一种sql脚本的异常检测方法s103的具体实现流程图。参见图5所示,相对于图1所述实施例,本实施例提供的一种sql脚本的异常检测方法s103包括以下步骤,详述如下:进一步地,所述选取第一消耗特征值最大的n个sql脚本,生成脚本消耗异常列表,包括:在s501中,获取当前时刻的时间点。在本实施例中,终端设备除了获取显示当前时刻对应的第一消耗特征值外,还会对比显示不同日期当前时间点对应的的第二消耗特征值,以便用户可根据第一消耗特征值以及第二消耗特征值确定该第一消耗特征值是否为异常消耗。在本实施例中,该时间点具体为一时间数值,如16:30,则表示为当天16点30分这一检测时刻。当然,终端设备可以通过其他形式表示该时间点,如4:30pm等形式,在此不一一限定。在s502中,提取所述n个sql脚本在不同日期的所述时间点对应的第二消耗特征值。在本实施例中,终端设备将获取该时间点在不同日期时对应的第一消耗特征值,并基于多个第一消耗特征值计算得到平均消耗特征值作为第二消耗特征值,用于表示在该时间点,数据库服务器在调用该sql脚本时的常规消耗情况。其中,选取的日期数可由用户设置,也可以为一系统默认值。例如,当前时间为8月10日的16:30,则终端设备可获取8月1日至8月9日期间,各个16:30时对应的sql脚本的消耗特征值,并根据上述标准特征值计算第二消耗特征值。在s503中,根据所述n个sql脚本的第一消耗特征值以及所述第二消耗特征值,分别计算所述n个sql脚本的消耗浮动等级。在本实施例中,终端设备将根据各个sql脚本的第一消耗特征值以及与之对应的第二消耗特征值,计算该sql脚本对应的消耗浮动等级,从而得到n个sql脚本的消耗浮动等级,判断当前的第一消耗特征值是否处于合理的浮动范围内,方便用户确定该sql脚本是否为异常的sql脚本。可选地,该浮动等级的计算方式为:计算第一消耗特征值以及第二特征值之间的比值,将比值识别为sql脚本的消耗浮动等级。在s504中,根据所述消耗浮动等级以及所述第一消耗特征值生成所述脚本消耗异常列表。在本实施例中,终端设备将根据各个sql脚本的浮动等级以及对应的第一消耗特征值,生成脚本消耗异常列表,其中每个第一消耗特征值与其消耗浮动等级位于同一消耗异常记录中,进行比对显示。表1给出了本实施例提供的一种消耗异常列表。可见,脚本名为wazd_saqs的sql脚本超出平均消耗的900%,则很大可能该脚本处于异常状态,可执行进一步的异常判定。序号sql脚本名第一消耗特征值浮动等级1wazsd_saqs42900%2kuwaq_wqs_138250%3qlewwa_wakw_a3452%4swqas_wqq13498%5pkeusz_q2873%6ijwazw_x15120%7awnal_254_wqa920%表1在本发明实施例中,通过将第一消耗值以及浮动等级进行对比显示,从而可以方便用户快速判定该sql脚本是否在正常浮动范围内,提高了异常检测的效率。应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。图6示出了本发明一实施例提供的一种sql脚本的异常检测终端的结构框图,该sql脚本的异常检测终端包括的各单元用于执行图1对应的实施例中的各步骤。具体请参阅图1与图1所对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图6,所述sql脚本的异常检测终端包括:运行状态参数获取单元61,用于获取各个sql脚本的运行状态参数;第一消耗值计算单元62,用于根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况;消耗异常列表生成单元63,用于将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数;目标sql脚本确定单元64,用于根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本;历史消耗特征曲线生成单元65,用于获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线;持续时间获取单元66,用于若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间;曲线导数获取单元67,用于若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值;异常脚本判定单元68,用于若存在一个所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。可选地,所述sql脚本的异常检测终端,还包括:版本变更文件获取单元,用于获取所述持续时间内所述目标sql脚本的版本变更文件;变更内容还原单元,用于依所述版本变更文件的创建时间的倒序逐次还原所述版本变更文件的变更内容,并监测所述目标sql脚本当前的运行状态参数,直到所述当前的运行状态参数对应的第一消耗特征值小于或等于所述消耗阈值。可选地,所述运行状态参数获取单元61包括:触发时间监测单元,用于监测当前时间是否满足预设的异常检测触发时机;资源占用率获取单元,用于若当前时间满足预设的异常检测触发时机,则获取待检测终端当前的资源占用率;检测启动判定单元,用于若所述资源占用率大于预设的占用率阈值,则获取各个所述sql脚本的运行状态参数。可选地,,所述运行状态参数包括:运算资源占用参数、平均运行时间参数、内存占用参数以及运行次数;所述第一消耗值计算单元62包括:运行参数权重确定单元,用于确定各个所述运行状态参数对应的权重值;消耗特征值转换模型导入单元,用于将各个所述sql脚本对应的所述运算资源占用参数、所述平均运行时间参数、所述内存占用参数以及所述运行次数,导入至消耗特征值转换模型,分别计算出各个所述sql脚本对应的第一消耗特征值,所述消耗特征值转换模型具体为:ex=α1ct(sql)+α2t(sql)+α3buff(sql)+α4q(sql)其中,ex为sql脚本的第一消耗特征值,α1、α2、α3和α4为各个运行状态参数对应的权重值,ct(sql)为sql脚本的运算资源占用参数,t(sql)为sql脚本的平均运行时间参数,buff(sql)为sql脚本的内存占用参数,q(sql)为sql脚本的运行次数。可选地,所述脚本消耗异常列表生成63,包括:当前时间获取单元,用于获取当前时刻的时间点;第二消耗特征值获取单元,用于提取所述n个sql脚本在不同日期的所述时间点对应的第二消耗特征值;消耗浮动等级获取单元,用于根据所述n个sql脚本的第一消耗特征值以及所述第二消耗特征值,分别计算所述n个sql脚本的消耗浮动等级;脚本消耗异常列表封装单元,用于根据所述消耗浮动等级以及所述第一消耗特征值生成所述脚本消耗异常列表。因此,本发明实施例提供的sql脚本的异常检测终端同样可以通过获取sql脚本的运行状态参数,并通过该运行状态参数确定该sql脚本在预设的时间段内的消耗情况,得到第一消耗特征值,继而终端设备选取消耗最大的n个sql脚本,进一步确定上述sql脚本是否存在异常情况,因而终端设备将根据消耗较大的n个sql脚本生成脚本消耗异常列表,并从脚本异常消耗列表中提取接收到的目标脚本选取指令对应的sql脚本作为目标sql脚本,进而获取该目标sql脚本对应的历史消耗情况,生成历史消耗特征曲线,并通过相关的判定阈值,识别该历史消耗特征曲线是否反映出该目标sql脚本存在异常情况,若是,则识别该脚本为异常脚本。与现有的sql脚本的异常检测方法相比,本发明实施例无需数据库的管理员对sql脚本的异常情况进行手动排查,终端设备自动生成一个存在异常几率较大的脚本异常消耗列表,缩小了管理员的检测范围,并根据管理员的选择的目标sql脚本,输出是否异常的检测结果,无需用户进行异常识别,大大提高了异常检测的准确率以及响应速率。另一方面,由于异常检测的过程主要通过终端设备完成,对于管理员的技术水平要求较低,从而也降低了数据库的维护成本。图7是本发明另一实施例提供的一种终端设备的示意图。如图7所示,该实施例的终端设备7包括:处理器70、存储器71以及存储在所述存储器71中并可在所述处理器70上运行的计算机程序72,例如sql脚本的异常检测程序。所述处理器70执行所述计算机程序72时实现上述各个sql脚本的异常检测方法实施例中的步骤,例如图1所示的s101至s108。或者,所述处理器70执行所述计算机程序72时实现上述各装置实施例中各单元的功能,例如图6所示模块61至68功能。示例性的,所述计算机程序72可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器71中,并由所述处理器70执行,以完成本发明。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序72在所述终端设备7中的执行过程。例如,所述计算机程序72可以被分割成运行状态参数获取单元、第一消耗值计算单元、消耗异常列表生成单元、目标sql脚本确定单元、历史消耗特征曲线生成单元、持续时间获取单元、曲线导数获取单元以及异常脚本判定单元,各单元具体功能如下:运行状态参数获取单元,用于获取各个sql脚本的运行状态参数;第一消耗值计算单元,用于根据各个所述sql脚本的运行状态参数,计算各个所述sql脚本对应的第一消耗特征值;其中,所述第一消耗特征值用于表示所述sql脚本对设备资源的占用情况;消耗异常列表生成单元,用于将各个所述sql脚本对应的第一消耗特征值按从大到小进行排序,并选取前n个第一消耗特征值对应的所述第一消耗特征值最大的n个sql脚本,生成脚本消耗异常列表;其中,所述n为小于sql脚本个数的正整数;目标sql脚本确定单元,用于根据接收到的目标脚本选取指令,从所述脚本消耗异常列表中确定目标sql脚本;历史消耗特征曲线生成单元,用于获取所述目标sql脚本在多个预设的时间节点对应的第一消耗特征值,并生成历史消耗特征曲线;持续时间获取单元,用于若所述历史消耗特征曲线中存在所述第一消耗特征值大于预设的消耗阈值的坐标点,则基于所述历史消耗特征曲线,确定所述第一消耗特征值大于预设的消耗阈值的持续时间;曲线导数获取单元,用于若所述持续时间大于预设的跳变时间阈值,则获取所述持续时间内各个坐标点对应的导数值;异常脚本判定单元,用于若存在一个所述坐标点对应的导数值大于预设的导数阈值,则判定所述目标sql脚本为异常脚本。所述终端设备7可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器70、存储器71。本领域技术人员可以理解,图7仅仅是终端设备7的示例,并不构成对终端设备7的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。所称处理器70可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述存储器71可以是所述终端设备7的内部存储单元,例如终端设备7的硬盘或内存。所述存储器71也可以是所述终端设备7的外部存储设备,例如所述终端设备7上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器71还可以既包括所述终端设备7的内部存储单元也包括外部存储设备。所述存储器71用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1