数据监控方法、系统、设备及计算机程序产品与流程

文档序号:26554414发布日期:2021-09-08 00:42阅读:97来源:国知局
数据监控方法、系统、设备及计算机程序产品与流程

1.本发明涉及金融科技(fintech)技术领域,尤其涉及一种数据监控方法、系统、设备及计算机程序产品。


背景技术:

2.随着计算机技术的发展,越来越多的技术(大数据、分布式、人工智能等)应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变,但由于金融行业的安全性、通用性要求,也对数据查询技术提出了更高的要求。
3.对于数据库来说,数据的查询速度是通过对sql查询语句的执行耗时长短进行确定的,超过指定时间的sql语句即为慢查询,为确保数据的查询速度,要找出数据库中的慢查询语句并对其进行分析和优化,以提高数据查询速度。而现有技术只能查询到存在的慢查询的sql语句,但是不能准确定位慢查询的sql语句在代码中的位置,只能通过人工分析进行确定,如果有多处相同的sql语句,通过人工分析进行定位容易产生遗漏。


技术实现要素:

4.本发明的主要目的在于提出一种数据监控方法、系统、设备及计算机程序产品,旨在提供一套数据监控方案,从而提升对慢查询语句的定位和监控效率。
5.为实现上述目的,本发明提供一种数据监控方法,所述数据监控方法包括如下步骤:
6.当检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;
7.当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;
8.根据所述文件标识和所述行信息对所述慢查询语句进行定位告警。
9.可选地,所述根据所述栈信息确定所述慢查询语句对应的文件标识和行信息的步骤,包括:
10.将所述栈信息转化为文本信息,并获取所述栈信息的识别路径的配置信息;
11.根据所述配置信息,对所述文本信息进行字符匹配,以确定所述慢查询语句对应的文件标识和行信息。
12.可选地,所述配置信息中包括匹配字符串,所述根据所述配置信息,对所述文本信息进行字符匹配,以确定所述慢查询语句对应的文件标识和行信息的步骤,包括:
13.将所述配置信息中的匹配字符串的字符与所述文本信息的字符自左向右对齐,以从所述文本信息中确定与所述匹配字符串字符数量相同的目标字符串;
14.对所述匹配字符串中的字符和所述目标字符串中的字符自右向左进行比较,以确定所述目标字符串的字符与所述匹配字符串的字符是否匹配;
15.若不匹配,则确定所述匹配字符串中是否存在与所述目标字符串的尾字符相同的
目标字符;
16.若不存在,则从所述文本信息中所述目标字符串的下一个字符开始与所述匹配字符串的字符自左向右对齐,并返回执行所述从所述文本信息中确定与所述匹配字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述匹配字符串的字符匹配;
17.若存在,则将所述匹配字符串中的目标字符与所述目标字符串的尾字符对齐,并返回执行所述从所述文本信息中确定与所述匹配字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述匹配字符串的字符匹配;
18.根据与所述匹配字符串的字符匹配的目标字符串对应的文件标识和行信息,确定所述慢查询语句对应的文件标识和行信息。
19.可选地,所述根据所述配置信息,对所述文本信息进行字符匹配的步骤之后,还包括:
20.对所述文本信息的字符匹配过程进行检测,当检测到所述文本信息的字符匹配过程存在异常时,根据所述栈信息确定栈参数;
21.根据所述栈参数对所述栈信息进行栈排查处理,以确定所述慢查询语句对应的文件标识和行信息。
22.可选地,所述确定所述查询语句中是否存在慢查询语句的步骤,包括:
23.获取所述查询语句对应的历史执行计划,并从所述历史执行计划中确定所述查询语句对应的历史执行耗时;
24.根据所述历史执行耗时对所述历史执行计划进行归类,以确定所述查询语句中每个语句对应的风险等级;
25.根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
26.可选地,所述确定所述查询语句中是否存在慢查询语句的步骤,包括:
27.对拦截的查询语句的出现频次进行统计,确定所述查询语句对应的语句出现频次;
28.当所述语句出现频次大于预设频次阈值时,获取所述查询语句的计算参数值,并根据所述语句出现频次和所述计算参数值计算所述查询语句对应的权重值,其中,所述计算参数值包括第一计算参数值、执行所述查询语句的设备的性能参数值和所述查询语句要访问的数据库的性能参数值,所述第一计算参数值是对所述查询语句对应的历史执行耗时进行计算得到的;
29.根据所述权重值确定所述查询语句中每个语句对应的风险等级,并根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
30.可选地,所述对查询语句进行拦截的步骤之后,还包括:
31.当检测到所述查询语句被执行时,获取所述查询语句的执行耗时,并根据所述查询语句的执行耗时构建所述查询语句对应的执行时间曲线;
32.根据所述执行时间曲线的趋势对所述查询语句未来的执行耗时进行预测;
33.若根据预测结果确定所述查询语句未来的执行耗时超过预设阈值,对所述查询语句进行定位告警。
34.此外,为实现上述目的,本发明还提供一种数据监控系统,所述数据监控系统包括:
35.语句拦截模块,用于当检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;
36.信息检测模块,用于当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;
37.定位告警模块,用于根据所述文件标识和所述行信息对所述慢查询语句进行定位。
38.此外,为实现上述目的,本发明还提供一种数据监控设备,所述数据监控设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据监控程序,所述数据监控程序被所述处理器执行时实现如上所述的数据监控方法的步骤。
39.此外,为实现上述目的,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的数据监控方法的步骤。
40.本发明通过在检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;根据所述文件标识和所述行信息对所述慢查询语句进行定位告警。通过对查询语句进行拦截,实现对慢查询语句的监控,当检测到存在慢查询语句时,根据慢查询语句的栈信息自动确定慢查询语句所在的文件的标识和行信息,对慢查询语句进行精准定位并告警,从而提高了对慢查询语句的定位和监控效率。
附图说明
41.图1是本发明实施例方案涉及的硬件运行环境的数据监控设备结构示意图;
42.图2为本发明数据监控方法第一实施例的流程示意图;
43.图3为本发明数据监控方法第二实施例中字符匹配的过程示意图;
44.图4本发明数据监控系统的系统模块示意图。
45.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
46.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
47.如图1所示,图1是本发明实施例方案涉及的硬件运行环境的数据监控设备结构示意图。
48.本发明实施例数据监控设备可以是pc机或服务器设备,其上运行有虚拟机。
49.如图1所示,该数据监控设备可以包括:处理器1001,例如cpu,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi

fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non

volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理
器1001的存储装置。
50.本领域技术人员可以理解,图1中示出的数据监控设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
51.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据监控程序。
52.在图1所示的数据监控设备中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的数据监控程序,并执行下述数据监控方法中的操作。
53.基于上述硬件结构,提出本发明数据监控方法实施例。
54.参照图2,图2为数据监控方法第一实施例的流程示意图,所述方法包括:
55.步骤s10,当检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;
56.本实施例基于慢查询语句的数据监控方法运用于数据监控设备中,数据监控设备可以是终端、机器人或者pc设备。
57.本技术中的数据监控方法用于对访问数据库的查询语句进行监控,以确定查询语句中是否存在慢查询语句,该慢查询语句是指执行耗时超过指定时长的查询语句,查询语句的执行耗时较长会影响数据的查询和/或调用速度,因此,需要找出查询语句中的慢查询语句并进行优化以提高数据查询和/或调用的速度。现有技术中,通过查询语句访问数据库时,如果想要查询访问数据库的查询语句中是否存在慢查询时,只能查询到相应的慢查询语句,但是无法对慢查询语句进行精准定位。
58.在此背景下,本实施例提供了一套数据监控方案,从而能够实现对慢查询语句的监控和精准定位。
59.具体地,本实施例中,以sql语句为查询语句为例进行说明,当检测到数据监控指令时,启动数据监控功能并对访问数据库的sql语句进行拦截,进而获取sql语句,并对拦截的sql语句进行缓存,便于对sql语句进行统计分析等集中式处理。其中,数据监控指令可以是用户触发的,也可以是自动触发的,该数据监控功能对数据监控设备上的其他应用程序无代码入侵性,仅需获取用户添加的相应的配置文件,即可在不同的应用程序中接入该功能,而对sql语句的拦截只是获取相应的信息,并不影响sql语句的传输和执行。此外,数据监控功能在接入到不同的应用程序中后,通过获取用户的配置信息控制该功能的开启或关闭,用户的配置信息包括被监控的应用程序列表,以及用户在不同的应用程序中对数据监控功能的启动开关进行的操作信息。在获取到用户的配置信息后,当检测到用户配置的应用程序列表中的应用程序启动时,即启动对该应用程序的数据监控功能,当数据监控功能在应用程序中启动后,用户随时可以通过对应用程序中设置的开关按钮进行操作,进而选择开启或关闭对该应用程序的数据监控功能。
60.由此可知,所述数据监控功能可以同时在多个应用程序中启动,并同时对多个应用程序的sql语句进行拦截,从而获取来自不同应用程序的sql语句,通过拦截的方式获取sql语句,可以对sql语句进行实时监控,提高监控效率。进一步地,获取到的多个sql语句中可能存在相同的语句,也可能存在慢语句,需要说明的是,在拦截查询语句时,并不影响查
询语句的执行,同时也对查询语句的执行结果进行监控,进而确定拦截的慢查询语句中是否存在慢查询语句。
61.步骤s20,当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;
62.根据拦截的sql语句的执行结果,可以确定拦截获取的sql语句中是否存在慢sql,如果存在慢sql,可以及时进行优化。具体分析时,包括但不限于根据相同sql语句的历史执行耗时对拦截的sql语句的执行耗时进行预估,以及根据相同sql语句的历史执行耗时曲线对拦截的sql语句的执行耗时趋势进行分析和预测,根据预估或预测结果,如果sql语句的执行耗时超过预设时长则为慢sql。
63.当检测到存在慢sql时,通过获取的慢sql对应的栈信息并,自动获取该慢sql所在的文件的文件标识和在文件中的行信息,从而对慢sql进行定位,该文件标识包括但不限于文件名称、文件的路径等,若以文件路径作为文件标识,还在文件路径中包含文件所在的设备信息,如设备编号等,以对来自不同终端设备的相同的sql语句进行区分。传统的定位慢sql的方式中,由于sql语句存在的形态各异,或在配置文件中,或被创建在底层,如果按照传统方式通过扫描代码对慢sql进行定位无法做到通用化,实现较为困难,而通过文件名称和行信息进行定位只能依靠人工分析实现,当文件中存在多个相同的sql语句时,人工分析往往会产生遗漏。在本实施例中,通过自动获取慢sql对应的文件标识和行信息,实行对慢sql的自动定位,与人工分析相比,提高了对慢sql定位的效率和准确率。
64.当检测到拦截的sql语句中存在慢sql时,通过确定慢sql对应的文件标识和行信息对慢sql进行定位,具体地,在确定慢sql对应的文件标识和行信息时,首先对应获取慢sql对应的栈信息,该栈信息同样是被拦截获取的,在拦截sql语句时,同时获取到sql语句的当前线程对象,然后通过当前线程对象,获取到sql语句对应的栈信息。由于调用栈一般深度较大,如果将栈信息对应的栈完整保存,则需要占用大量存储空间,对整体性能有较大影响,所以采取对栈信息进行探测的方式从栈信息中获取慢sql对应的文件标识和行信息,从而对慢sql进行定位。
65.步骤s30,根据所述文件标识和所述行信息对所述慢查询语句进行定位告警。
66.进一步地,在根据慢sql对应的文件标识和行信息对慢sql进行定位时,是将获取的文件标识和行信息等与慢sql进行关联绑定,从而实现对慢sql的精准定位。当同一个文件里存在多个慢sql时,利用行信息进行区分,防止对相同的慢sql产生遗漏。例如,若将慢sql以列表的形式显示,则列表的每一行代表一个慢sql的定位信息,该列表至少包括慢sql、文件标识和行信息三列,其中,文件标识和行信息是慢sql的位置信息,在对慢sql进行定位时,首先根据文件标识确定慢sql来自于哪个文件,然后根据行信息进一步确定慢sql在文件中所在的行位置,对于同一个文件中的多个相同的慢sql,文件标识可能是相同的,行信息可能存在不同,因此可以利用行信息对同一个文件中多个相同的慢sql进行区分,防止产生遗漏。在对慢sql进行定位后,对拦截的慢sql进行告警以提示相关技术人员及时处理,告警方式包括邮件发送告警信息、短信发送告警信息、在数据监控功能设置的监控界面中显示告警信息,以及上述方式的任意组合,可知地,对不不同程度的慢sql可以采用不同方式和/或不同等级的告警,例如,对于执行耗时较长的慢sql同时通过邮件和短信发送告警信息进行提醒,对于执行耗时不那么长的慢sql只通过邮件发送告警信息进行提醒,而对
于轻度慢sql不发送告警信息,然后将不同程度的慢sql在数据监控功能的监控界面同时显示,并通过不同的颜色进行区分。其中,告警信息例如“xx文件第y行存在一条慢sql

xxx,该慢sql执行耗时a秒,为重度慢sql,请及时处理”67.更进一步地,在对慢sql进行定位时,是根据栈信息确定慢sql所在的文件的文件标识和行信息的,具体过程包括步骤a1

a2:
68.步骤a1,将所述栈信息转化为文本信息,并获取所述栈信息的识别路径的配置信息;
69.步骤a2,根据所述配置信息,对所述文本信息进行字符匹配,以确定所述慢查询语句对应的文件标识和行信息。
70.在确定慢sql对应的文件标识和行信息时,是对慢sql的栈信息进行探测的,具体过程为,首先将慢sql对应的栈信息转化为文本信息,然后对转化的文本信息进行字符匹配,如上所述,保存完整的栈需要占用大量的存储空间,因此,将栈信息转化为文本信息后再进行字符匹配,可以节省存储空间且有助于提高探测效率。在对转化的文本信息进行字符匹配时,首先要获取栈信息的识别路径的配置信息,即确定配置的识别路径的识别字符串,根据配置的识别字符串对文本信息进行匹配,从而确定慢sql对应的文件标识和行信息。
71.具体地,包括步骤a21

a26:
72.步骤a21,将所述配置信息中的识别字符串的字符与所述文本信息的字符自左向右对齐,以从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串;
73.步骤a22,对所述识别字符串中的字符和所述目标字符串中的字符自右向左进行比较,以确定所述目标字符串的字符与所述识别字符串的字符是否匹配;
74.步骤a23,若不匹配,则确定所述识别字符串中是否存在与所述目标字符串的尾字符相同的目标字符;
75.步骤a24,若不存在,则从所述文本信息中所述目标字符串的下一个字符开始与所述识别字符串的字符自左向右对齐,并返回执行所述从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述识别字符串的字符匹配;
76.步骤a25,若存在,则将所述识别字符串中的目标字符与所述目标字符串的尾字符对齐,并返回执行所述从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述识别字符串的字符匹配;
77.步骤a26,根据与所述识别字符串的字符匹配的目标字符串对应的文件标识和行信息,确定所述慢查询语句对应的文件标识和行信息。
78.其中,在根据配置的识别字符串对文本信息进行字符匹配时,可以利用字符匹配算法,该字符匹配算法可以是bm(boyer

moore)算法,也可以是kmp算法(knuth

morris

pratt,字符串匹配算法),还可以是naive string matching algorithm(朴素字符串匹配算法)算法,在此不作具体限定。
79.本实施例中,以bm算法为例进行说明,配置信息中包括识别字符串,例如若配置信息中配置的识别路径(detectorpath)为“detectorpath=cn.webank.db”,则配置信息中的识别字符串为“cn.webank.db”,将栈信息转化为文本信息为"
java.util.concurrent.executors$runnableadapter.callorg.spring.dbcn.weba nk.db"。需要说明的是,在本实施例中,识别字符串和文本信息中的英文字符串仅仅用于对字符串算法的匹配过程进行说明,英文字符本身并无实际意义。在将识别字符串与文本信息进行匹配时,首先将文本信息与识别字符串自左向右从头部对齐,对齐后如图3中的情形一所示,图3为本实施例中利用bm算法进行字符串匹配的过程示意图,由图3中的情形一可知,识别字符串"cn.webank.db"与文本信息中的“java.util.co”对应,从识别路径字符串"cn.weban k.db"的尾部开始比较,显然文本信息中的"o"和识别路径"b"并不相同,这时,"o"就被称为"坏字符",即不匹配的字符。进一步地,"o"不包含在识别路径字符串"cn.webank.db"之中,则把识别路径直接移到"o"的后一位,移位后如图3中的情形二所示,此时,识别路径字符串与文本信息中的“ncurrent.exe”对应,依然从识别路径字符串的尾部开始比较,"e"与"b"不匹配,所以"e"是"坏字符"。但是,"e"包含在识别路径字符串中,所以将识别路径和中的"e"和文本信息中的"e"对齐,参照图3中的情形三,此时,识别路径字符串与文本信息中的“t.executors$”对应,对齐后发现,文本信息尾部的"$"与识别路径字符串尾部的"b"不匹配,且"$"也没有在识别路径字符串之中,则把识别路径字符串直接移到"$"的后一位,继续匹配。
80.当匹配至图3中情形四所示的后缀字符相同的情况时,识别路径字符串与文本信息中的“rg.spring.db”对应,此时,识别路径字符串尾部的"b"与文本信息字符串尾部的"b"匹配,"d"和"d"匹配,"."和"."匹配,则".db"、"db"、"b"为好后缀,即匹配的字符串。由此总结出识别字符串与文本信息进行匹配时的移位规律,即后移位数=坏字符的位置(或好后缀的位置)

在识别路径字符串中上一次出现的位置。以上述图3情形1至情形四的匹配过程为例:"o"为坏字符,出现在文本信息的第11位(从0开始编号),在识别路径中未出现过,所以后移位数为11

(

1)=12位。再以"e"为例,它出现在文本信息的第11位,在识别路径字符串中上一次出现的位置是4,则整个识别路径字符串后移11

4=7位。而对于"好后缀"".db"、"db"、"b",都未在识别路径字符串"cn.webank.db"中出现过,所以后移的位数为12

(

1)=13位。若按照"坏字符"规则移动的位数,与按照"好后缀"规则移动的位数不同,则取两者中的较大值。按照这个规则继续将上述的识别路径字符串与文本信息进行匹配,直至图3情形五所示的情况,文本信息中的字符串与识别路径字符串能够完全匹配,则完成对栈信息的探测,从而获取到慢sql对应的文件标识和行信息。
81.也即,在机型字符匹配时,将识别字符串与文本信息自左向右对其,从文本信息中选取与识别字符串字符数量相同的目标字符串,然后从识别字符串的尾部开始,自右向左比较,首先确定识别字符串的尾字符与选取的目标字符串的尾字符是否匹配,如果匹配,则继续比较下一位,从而确定目标字符串中与识别字符串对应位置的字符是否都匹配,若不匹配,则确定识别字符串中是否包含目标字符串的尾字符,如果不包含,则直接将识别字符串的首字符与文本信息中,目标识别字符串的下一个字符自左向右对齐,从文本信息中重新选取目标字符串并进行比较,直到选取的目标字符串的字符与识别字符串的字符完全匹配,若不完全匹配且识别字符串中包含选取的目标字符串的尾字符时,则将识别字符串中与目标字符串的尾字符对齐,从文本信息中重新选取目标字符串进行比较,直到选取的目标字符串的字符与是被字符串的字符完全匹配,根据与是被字符串完全匹配的目标字符串对应的文件表示和行信息,确定慢sql对应的文件标识和行信息。
82.步骤a2之后,还包括步骤a3

a4:
83.步骤a3,对所述文本信息的字符匹配过程进行检测,当检测到所述文本信息的字符匹配过程存在异常时,根据所述栈信息确定栈参数;
84.步骤a4,根据所述栈参数对所述栈信息进行栈排查处理,以确定所述慢查询语句对应的文件标识和行信息。
85.更进一步地,在利用字符串匹配算法对栈信息的文本信息进行字符匹配时,对算法的匹配过程进行检测,当检测到算法匹配出现异常,无法获取慢sql对应的文件标识和行信息时,则对栈信息进行栈排查处理,从而对算法的字符匹配进行异常兜底。算法匹配的异常包括算法模型宕机等,在利用栈排查处理对字符匹配进行异常兜底时,具体地,首先根据栈信息的配置信息排除特定的与sql语句不相关的栈,然后根据获取的栈信息识别到慢sql对应的堆栈中并确定栈参数,其中,栈参数包括栈深度和查找路径长度,栈深度对应文本信息的字符串长度,而查找路径的长度即为配置信息中的识别字符串的长度,根据栈深度和查找路径长度,逐一对栈信息进行排查,从而完成对栈信息的探测并从堆栈中确定该慢sql对应的文件标识和行信息。
86.在本实施例中,若栈深度为n,查找路径长度为m,利用预设的bm字符匹配算法对栈信息进行探测的时间复杂度在最好的情况下为(n/m),最坏的情况下是(3n)。而通过栈排查处理对栈信息进行探测的时间复杂度在最好的情况下是(n+m),最坏的情况下是(n*m)。可见,在探测效率上,利用字符匹配算法要优于栈排查处理的方式,但是栈排查处理的稳定性和可靠性较好,因此,采用两者结合的方式进行栈信息探测,利用栈排查处理对字符匹配算法的探测进行异常兜底,提高了信息探测的稳定性,进而提高了数据监控功能的稳定性。
87.本实施例通过在当检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;根据所述文件标识和所述行信息对所述慢查询语句进行定位。通过对查询语句进行拦截,实现对慢查询语句的监控,当检测到存在慢查询语句时,根据慢查询语句对应的栈信息确定慢查询语句对应的文件标识和行信息,进而确定慢查询语句所在的文件,以及在文件中所处的行数,实现对慢查询语句的精准定位,提高了对慢查询语句的定位和监控效率。同时,通过字符匹配和栈排查处理结合的方式对栈信息进行探测,利用栈排查处理对字符匹配进行异常兜底,提高了栈信息探测的稳定性,进而进一步提高了对慢查询语句的监控效率
88.进一步地,基于上述第一实施例,提出本发明数据监控方法第二实施例,本实施例是上述实施例步骤s10中,确定拦截的查询语句中是否存在慢查询语句的细化,包括步骤b1

b3:
89.步骤b1,获取所述查询语句对应的历史执行计划,并从所述历史执行计划中确定所述查询语句对应的历史执行耗时;
90.步骤b2,根据所述历史执行耗时对所述历史执行计划进行归类,以确定所述查询语句中每个语句对应的风险等级;
91.步骤b3,根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
92.基于上述实施例,在本实施例中,同样以sql语句为查询语句为例进行说明。在本
实施例中,主要是对上述实施例中拦截的查询语句进行统计分析,从而确定拦截的查询语句中是否存在慢查询语句,并可以实现对拦截的慢查询语句进行分级告警。现有的查询慢查询语句的技术不能对sql语句进行智能分析,只能依据sql语句的执行耗时来判断该sql语句是否为慢查询的sql语句,只能被动地做事后优化,无法做到事前预警。
93.在本实施例中,对通过拦截缓存的sql语句进行统计分析处理,从而可以对拦截的sql语句进行等级划分,进而确定拦截的sql语句为慢sql的风险等级,对不同等级的sql语句分别进行不同程度和/或不同形式的告警,以便进行区分,可知地,告警的形式包括在特定的监控界面上实时显示和/或以邮件、短信等方式推送提示信息,实现对sql语句的分级告警或预警。
94.具体地,在通过对获取的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语句,其查询语句的执行耗时最长,中风险性语句的执行耗时次之。也即,高风险性语句、中风险性语句、低风险性语句和正常语句的执行耗时依次降低。
95.当然,也可以在高风险性、中风险性、低风险性和无风险性的基础上,对获取的执行计划进一步进行细分,从而将执行计划归类为更多更加细化的等级,或者根据实际需要将历史执行计划的风险等级划分为更少的等级,而对查询语句的等级划分的细化程度,取决于对执行计划归类的细化程度,在此不再赘述。在本实施例中,确定sql语句对应的风险等级后可以发现,高风险sql的查询规则主要包括“关联表数量超过阈值”、“全表扫描,且扫描行数超过预设行数”、“查询语句没有走索引”等,中风险sql的查询规则主要包括“语句没有走主键索引且没有使用limit关键字”、“查询语句使用外排,且扫描行数超过预设行数”等,低风险sql的查询规则主要包括“查询语句使用文件类型”等,而对于被拦截的sql语句,根据其对应的查询规则映射到预先生成的配置清单中,进而确定其风险等级,没拦截到一条查询语句就可以直接通过与配置清单的映射或匹配,及时判断拦截的该查询语句是否为慢查询语句,若是,则对拦截的该慢查询语句继续宁定位和告警,提高了告警的及时性。
96.进一步地,对于中风险sql和低风险sql,大部分可以通过优化索引的方式减少sql语句的执行耗时,进而提高数据的查询速度,而对于高风险sql则需要深入分析原因后采取对应的优化措施。因此,对高风险sql、中风险sql和低风险sql需要分别进行不同形式的告警,例如,在数据监控功能的监控界面上实时显示高风险sql、中风险sql和低风险sql,并以不同的颜色进行区分,此外,高风险sql再分别发送短信、邮件进行提醒,以提示存在高风险sql需要紧急处理,中风险sql则只发送邮件提醒,低风险sql只在监控界面显示即可,正常sql则无需告警或在监控界面显示。也即,通过结合以往相同或相似的sql语句的执行计划,对拦截的sql语句的执行耗时进行实时判断,从而确定拦截的sql语句是否为慢sql,进而可以对拦截的sql语句进行实时告警。
97.在本实施例中,通过基于拦截的查询语句的历史执行计划,生成查询语句的配置清单,根据生成的配置清单对拦截的查询语句进行匹配或映射,可以快速判断拦截的查询语句是否为慢查询语句,若是慢查询语句,则对拦截的慢查询语句进行定位和告警,提高了对慢查询语句告警的及时性。
98.进一步地,基于上述第二实施例,提出本发明数据监控方法第三实施例,本实施例是上述实施例步骤s10中,确定拦截的查询语句中是否存在慢查询语句的细化,包括步骤b4

b6:
99.步骤b4,对拦截的查询语句的出现频次进行统计,确定所述查询语句对应的语句出现频次;
100.步骤b5,当所述语句出现频次大于预设频次阈值时,获取所述查询语句的计算参数值,并根据所述语句出现频次和所述计算参数值计算所述查询语句对应的权重值,其中,所述计算参数值包括第一计算参数值、执行所述查询语句的设备的性能参数值和所述查询语句要访问的数据库的性能参数值,所述第一计算参数值是对所述查询语句对应的历史执行耗时进行计算得到的;
101.步骤b6,根据所述权重值确定所述查询语句中每个语句对应的风险等级,并根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
102.更进一步地,在对获取的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语句,具体可以参照表4。
103.进一步地,计算sql语句的权重值的计算参数值包括第一计算参数值、执行所述查询语句的设备的性能参数值,以及所述查询语句要访问的数据库的性能参数值。在计算sql语句对应的权重值时,首先计算第一计算参数值,该参数值与sql语句本身的查询规则有关。具体地,首先将相同或相似的sql语句出现的频次与预设频次阈值进行比较,其中,sql语句中有高频语句和低频语句之分,不同的sql语句可以对应设置不同的频次阈值,高频语句为减少计算次数和计算量,可以将频次阈值设置为一个较高的值,例如10次,而对于低频语句,由于出现的次数较少,为确保告警及时性,在不影响计算结果准确性的前提下,可以将频次阈值设置为一个较小的值,例如3次或5次。当拦截获取的sql语句中相同的sql语句出现的频次达到预设频次阈值时,则基于上述第二实施例中获取的历史执行计划确定该sql语句对应的历史执行耗时,根据该sql语句对应的历史执行耗时计算该sql语句的平均执行耗时,根据计算出的平均执行耗时确定该sql语句的第一计算参数值。
104.然后获取执行sql语句的设备的性能参数值、以及sql语句要访问的数据库的性能参数值,其中,第一计算参数值是由sql语句本身的执行耗时确定的,而执行sql语句的设备的性能参数值是与执行sql语句的设备的性能参数有关的,sql语句要访问的数据库的性能参数值是与sql语句要访问的数据库的性能参数有关的。在本实施例中,设备性能参数值参数值包括执行sql语句的设备的处理器的核心数目(即cpu核心数目),cpu核心数目表示cpu在某一时刻可以同时并行处理的任务数,cpu核心数目越多,就越有利于同时运行多个程序;数据库的性能参数包括sql语句要访问的数据库的i/o负载,数据库的i/o负载可以侧面反映出数据库当前的性能,在本实施例中,设备的性能参数值和数据库的性能参数值仅以cpu核心数目以及数据库的i/o负载为例进行说明。在确定计算参数值时,不同的参数值对应不同的计算值。
105.具体地,可以参照下列表1至表3,表1是不同的平均执行耗时区间的sql语句对应的计算值,表1中的平均执行耗时是根据10个相同的sql语句的执行耗时进行计算得到的,表2是不同的cpu核心数目对应的计算值,表3是不同的数据库的i/o负载对应的计算值。
106.平均执行耗时(每10条的平均数)计算值10~50ms1051~100ms50101ms以上100
107.表1
108.cpu核心数目计算值4422
109.表2
110.i/o负载计算值0%~30%1031~70%5070%~100%以上100
111.表3
112.基准值sql语句分类0~5正常sql5~10低风险sql10~15中风险sql15以上高风险sql
113.表4
114.上述表1

3中的对应的计算值和表4中的基准值都可以通过对历史sql语句数据进行分析得到,在确定所有计算参数值后,计算sql语句的执行耗时的权重值的方式可以参考公式1:
115.权重值=(平均执行耗时计算值+i/o负载计算值)/cpu核心数目计算值 (1)
116.由公式1可知,若当前某个sql语句的10条语句的平均执行耗时为90ms,则对应的计算值为50,cpu核心数目为4,对应的计算值为4,数据库当前的i/o负载为25%,对应的计算值为10,根据公式1进行计算得到的权重值为15,则参照表4中的基准值,该sql语句为中风险sql,则按照中风险sql的告警方式进行告警。在实际应用时,可以利用更多的计算参数值进行权重值的计算,不同参数的计算值与基准值,以及参与计算的sql语句等数据都可以进行同步或异步的迭代更新,从而保证告警的及时性和准确性。
117.在本实施例中,通过对拦截的查询语句进行统计分析,确定所述查询语句对应的风险等级;根据所述风险等级对所述查询语句进行分级告警,利用两种不同的方式对拦截的查询语句进行异步分析,一方面通过根据历史执行计划的风险等级对拦截的查询语句进行实时告警,另一方面,通过对拦截的查询语句的执行耗时进行预估,确定所述查询语句对应的风险等级,并对所述查询语句未来的执行耗时进行预测,根据预测结果和所述查询语句对应的风险等级进行告警,从而实现对查询语句不同层面的分级告警,提高了告警的准确性。
118.进一步地,基于上述第三实施例,提出本发明数据监控方法第四实施例,本实施例是上述实施例步骤s10中,对查询语句进行拦截之后的步骤,包括步骤s101

s103:
119.步骤s101,当检测到所述查询语句被执行时,获取所述查询语句的执行耗时,并根据所述查询语句的执行耗时构建所述查询语句对应的执行时间曲线;
120.步骤s102,根据所述执行时间曲线的趋势对所述查询语句未来的执行耗时进行预测;
121.步骤s103,若根据预测结果确定所述查询语句未来的执行耗时超过预设阈值,对所述查询语句进行定位告警。
122.在实际应用中,很多sql语句存在潜在问题,如随着数据量的提升、数据结构的变化等,原本正常的sql语句后期可能会转变为慢查询的sql语句,对于可能转化为慢查询的sql语句,对于存在潜在问题的查询语句,现有技术也只能被动地做事后优化,无法做到事前预防。而本实施例提供一种查询语句的告警方案,通过对拦截的查询语句进行智能分析,可以实现对可能转化为慢查询语句的正常语句的预警。
123.具体地,在对查询语句进行拦截之后,当检测到拦截的查询语句被执行时,获取查询语句的执行耗时,并根据获取的执行耗时构建查询语句的执行耗时曲线。需要说明的是,
同一条执行时间曲线是基于多个相同的sql语句的执行耗时构建的,不同的sql语句对应不同的执行时间曲线,根据构建的耗时执行曲线的趋势,对sql语句未来的执行耗时进行预测,根据预测结果,确定sql语句未来的执行耗时是否超过预设阈值,若超过预设阈值,则证明对应的sql语句可能存在转化为慢sql的可能性,但不同的sql语句转化为慢sql的可能性不一定是相同的,因此,也可以根据sql语句转化为慢sql的可能性的大小,对可能转化为慢sql的查询语句进行定位和等级划分,并对不同等级的sql语句进行告警。
124.在本实施例中,通过对拦截的查询语句的执行耗时进行智能分析,能够及时发现存在潜在问题的查询语句,对可能转化为慢查询语句的正常语句提前进行预警,在正常的查询语句转化为慢查询语句之前进行优化,减少慢查询语句的数量,提高数据的响应速度。
125.需要说明的是,上述第二、第三和第四实施例中的三种告警方式中,第二实施例中的告警方式是基于sql语句的执行计划,对拦截获取的sql语句是否为慢sql进行实时判断,不对拦截的sql语句本身的执行耗时进行预估;而第三实施例中的告警方式与第二实施例中的告警方式不同,第三实施例中的告警方式是基于sql语句的执行计划,对拦截的sql语句的执行耗时进行预估后,再判断该sql语句是否为慢sql;第四实施例中,是在拦截的查询语句被执行后,根据查询语句的执行耗时对查询语句未来的执行耗时进行预估,从而可以发现潜在的慢查询语句,三种方式对获取的sql语句进行异步分析,在不同的阶段从不同的角度对拦截的查询语句进行分析,并进行定位告警。在实际应用时,上述实施例中的告警方式可以任意组合地结合使用,也可以单独使用,当将上述告警方式结合使用时可以互为参考,使告警结果更加准确,同时也有利于对慢查询语句的产生原因进行快速分析,而结合使用的告警方式在进行告警时,可以显示在同一个告警界面上,也可以显示在不同的告警界面上由用户触发指令进行切换,在此不作具体限定。
126.本发明还提供一种数据监控系统,参照图4,所述数据监控系统包括:
127.语句拦截模块10,用于当检测到数据监控指令时,对查询语句进行拦截,确定所述查询语句中是否存在慢查询语句;
128.信息检测模块20,用于当所述查询语句中存在慢查询语句时,获取所述慢查询语句对应的栈信息,并根据所述栈信息确定所述慢查询语句对应的文件标识和行信息;
129.定位告警模块30,用于根据所述文件标识和所述行信息对所述慢查询语句进行定位告警。
130.可选地,所述信息检测模块20,用于:
131.将所述栈信息转化为文本信息,并获取所述栈信息的识别路径的配置信息;
132.根据所述配置信息,对所述文本信息进行字符匹配,以确定所述慢查询语句对应的文件标识和行信息。
133.可选地,所述信息检测模块20,还用于:
134.将所述配置信息中的识别字符串的字符与所述文本信息的字符自左向右对齐,以从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串;
135.对所述识别字符串中的字符和所述目标字符串中的字符自右向左进行比较,以确定所述目标字符串的字符与所述识别字符串的字符是否匹配;
136.若不匹配,则确定所述识别字符串中是否存在与所述目标字符串的尾字符相同的目标字符;
137.若不存在,则从所述文本信息中所述目标字符串的下一个字符开始与所述识别字符串的字符自左向右对齐,并返回执行所述从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述识别字符串的字符匹配;
138.若存在,则将所述识别字符串中的目标字符与所述目标字符串的尾字符对齐,并返回执行所述从所述文本信息中确定与所述识别字符串字符数量相同的目标字符串的步骤,直到所述目标字符串的字符与所述识别字符串的字符匹配;
139.根据与所述识别字符串的字符匹配的目标字符串对应的文件标识和行信息,确定所述慢查询语句对应的文件标识和行信息。
140.可选地,所述定位告警模块30,还用于:
141.获取所述查询语句对应的历史执行计划,并从所述历史执行计划中确定所述查询语句对应的历史执行耗时;
142.根据所述历史执行耗时对所述历史执行计划进行归类,以确定所述查询语句中每个语句对应的风险等级;
143.根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
144.可选地,所述定位告警模块30,还用于:
145.对拦截的查询语句的出现频次进行统计,确定所述查询语句对应的语句出现频次;
146.当所述语句出现频次大于预设频次阈值时,获取所述查询语句的计算参数值,并根据所述语句出现频次和所述计算参数值计算所述查询语句对应的权重值,其中,所述计算参数值包括第一计算参数值、执行所述查询语句的设备的性能参数值和所述查询语句要访问的数据库的性能参数值,所述第一计算参数值是对所述查询语句对应的历史执行耗时进行计算得到的;
147.根据所述权重值确定所述查询语句中每个语句对应的风险等级,并根据所述查询语句中每个语句对应的风险等级确定所述查询语句中是否存在慢查询语句。
148.可选地,所述数据监控装置还包括分类预警模块,用于:
149.当检测到所述查询语句被执行时,获取所述查询语句的执行耗时,并根据所述查询语句的执行耗时构建所述查询语句对应的执行时间曲线;
150.根据所述执行时间曲线的趋势对所述查询语句未来的执行耗时进行预测;
151.若根据预测结果确定所述查询语句未来的执行耗时超过预设阈值,对所述查询语句进行定位告警。
152.上述各程序单元所执行的方法可参照本发明数据监控方法各个实施例,此处不再赘述。
153.本发明还提供一种数据监控设备,所述数据监控设备包括:存储器、处理器及存储在存储器上并可在处理器上运行的数据监控程序,所述数据监控程序被处理器执行时所实现的方法可参照本发明数据监控方法各个实施例,此处不再赘述。
154.本发明还提供一种计算机程序产品。
155.本发明计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如
上述的数据监控方法的步骤。
156.其中,在所述处理器上运行的数据监控程序被执行时所实现的方法可参照本发明数据监控方法各个实施例,此处不再赘述。
157.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
158.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
159.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的数据监控方法。
160.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1