处理缓存中sql查询结果的方法、装置、设备和存储介质
技术领域
1.本技术涉及金融核心系统的查询优化技术领域,特别是涉及一种处理缓存中sql查询结果的方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术:
2.利用缓存可以实现sql((structured query language,结构化查询语言)优化。具体来说,进入sql数据库查询花费较长的sql查询语句,可以将从数据库查询到的结果放在缓存中,后续再出现该sql查询语句,则可以不用进入sql数据库,从缓存中查找对应的结果。
3.但是,长此以往,缓存里的查询结果越来越多,占用缓存的空间。因此,有必要适当删除缓存里的查询结果。
技术实现要素:
4.基于此,有必要针对上述技术问题,提供一种处理缓存中sql查询结果的方法、装置、计算机设备、存储介质和计算机程序产品。
5.本技术提供一种处理缓存中sql查询结果的方法,方法包括:
6.获取sql优化中被识别出来的慢sql查询语句;
7.根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句;
8.获取各目标慢sql查询语句从sql优化完成时至当前的被用次数;
9.根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
10.在一个实施中,在获取sql优化中被识别出来的慢sql查询语句之前,方法还包括:
11.获取慢查询设定值;
12.获取曾在sql数据库进行查询的若干个sql查询语句;
13.在若干个sql查询语句中,确定查询结果返回时长超过慢查询设定值的sql查询语句,得到慢sql查询语句。
14.在一个实施中,根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,包括:
15.验证各目标慢sql查询语句分别直接在sql数据库和在缓存中进行查询,得到查询结果从sql数据库返回与从缓存返回间的时差,以得到各目标慢sql查询语句对应的查询时差;
16.基于目标慢sql查询语句各自对应的查询时差以及被用次数,得到各目标慢sql查询语句的结果删除不宜度;结果删除不宜度用于评估从缓存中删除相应目标慢sql查询语句对应的sql查询结果对sql优化后的整体性能的影响;
17.根据各目标慢sql查询语句的结果删除不宜度,确定在缓存中待删除的目标慢sql
查询语句对应的sql查询结果。
18.在一个实施中,
19.查询时差越大且被用次数越高,对sql优化整体性能的影响为:sql优化后的整体性能被降低的显著度高;
20.查询时差越大且被用次数越低,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低;
21.查询时差越小且被用次数越高,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低;
22.查询时差越小且被用次数越低,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低。
23.在一个实施中,基于目标慢sql查询语句各自对应的查询时差以及被用次数,得到各目标慢sql查询语句的结果删除不宜度,包括:
24.基于目标慢sql查询语句各自对应的查询时差以及被用次数之间的乘积,得到各目标慢sql查询语句的结果删除不宜度。
25.在一个实施中,根据各目标慢sql查询语句的结果删除不宜度,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,包括:
26.在各目标慢sql查询语句中,将结果删除不宜度低于阈值的目标慢sql查询语句,作为待删除的目标慢sql查询语句;
27.确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
28.本技术提供一种处理缓存中sql查询结果的装置,装置包括:
29.语句获取模块,用于获取sql优化中被识别出来的慢sql查询语句;
30.语句分析模块,还用于根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句;
31.次数获取模块,用于获取各目标慢sql查询语句从sql优化完成时至当前的被用次数;
32.删除确定模块,用于根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
33.本技术提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行上述方法。
34.本技术提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行上述方法。
35.本技术提供一种计算机程序产品,其上存储有计算机程序,计算机程序被处理器执行上述方法。
36.上述处理缓存中sql查询结果的方法、装置、计算机设备、存储介质和计算机程序产品,获取sql优化中被识别出来的慢sql查询语句;根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句;获取各目标慢sql查询语句从sql优化完成时至当前的被用次数;根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,释放缓存被占用的空间,且根据目标慢sql查询语句被用次数的高低确定待删除的目标慢sql查询语句对应的sql查询结
果,可以避免对sql优化整体性能的降低。
附图说明
37.图1为一个实施例中sql优化的主要模块示意图;
38.图2为一个实施例中处理缓存中sql查询结果的方法的流程示意图;
39.图3为一个实施例中处理缓存中sql查询结果的方法的流程示意图;
40.图4为一个实施例中处理缓存中sql查询结果的装置的结构框图;
41.图5为一个实施例中计算机设备的内部结构图。
具体实施方式
42.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
43.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本技术所描述的实施例可以与其它实施例相结合。
44.sql优化主要包括如下步骤:1)确定慢sql查询语句;2)执行慢sql查询语句的执行计划,分析sql执行过程;3)总结慢sql执行性能低的原因;4)针对原因进行sql优化;5)测试对比验证优化sql的性能,选择最佳的处理策略。如图1所示,sql优化主要包括查询sql模块、分析sql模块、重构优化模块和验证对比模块。
45.其中,1)查询慢sql模块,主要用于查询sql数据库中慢sql查询语句。其中,oracle利用视图v$sql查询慢sql,mysql利用日志解析工具mysqldumpslow解析慢查询日志查询慢sql。
[0046][0047]
2)分析慢sql模块,主要用于分析1)中查询的慢sql的执行速度慢的原因。sql执行计划是其在数据库中执行时的表现情况,通过执行计划可获取sql的表、索引、数据等信息,用于分析sql。综合分析慢sql,常见的问题可总结为以下几类:
[0048]
①
索引:未建索引、索引未命中、索引不合适
[0049]
②
非必要字段的搜索,导致回表
[0050]
③
排序、聚合等使用
[0051]
④
相同内容频繁查询数据库
[0052]
⑤
不合理筛选条件导致全表扫描
[0053][0054]
3)重构优化模块,主要结合2)解析的原因优化sql,生成新的sql查询语句。主要从以下几个方面考虑:
[0055]
①
优化sql:考虑不必要查询字段、过滤条件等
[0056]
②
优化索引:增加或修改当前索引(包括组合索引)
[0057]
③
加缓存:利用redis等缓存,减少查询次数
[0058]
④
分库分表:对于数据量较大(如:交易类)表考虑分库分表
[0059]
4)验证对比模块,主要用于测试验证慢sql优化前后性能对比。
[0060]
在一个实施例中,如图2所示,提供了一种处理缓存中sql查询结果的方法,包括以下步骤:
[0061]
步骤s201,获取sql优化中被识别出来的慢sql查询语句。
[0062]
其中,慢sql查询语句是在未按照规定的时间返回对应查询结果的sql查询语句。
[0063]
进一步地,在获取sql优化中被识别出来的慢sql查询语句之前,本技术提供的方法还包括图3示出的步骤:步骤s301,获取慢查询设定值;步骤s302,获取曾在sql数据库进行查询的若干个sql查询语句;步骤s303,在若干个sql查询语句中,确定查询结果返回时长超过慢查询设定值的sql查询语句,得到慢sql查询语句。
[0064]
上述实施例中,慢查询设定值可以是3秒,计算机设备在得到慢查询设定值之后,可以在曾在sql数据库进行查找的若干个sql查询语句中,确定慢sql查询语句。
[0065]
步骤s202,根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句。
[0066]
进行一次慢sql分析后,可以采取相应的处理措施,进行sql优化,该处理措施可以称为sql优化处理措施,sql优化处理措施可以包括:
①
优化sql:考虑不必要查询字段、过滤条件等;
②
优化索引:增加或修改当前索引(包括组合索引);
③
加缓存:利用redis等缓存,减少查询次数;
④
分库分表:对于数据量较大(如:交易类)表考虑分库分表。
[0067]
如果某一sql查询语句被识别为慢sql查询语句之后,慢的原因主要是在sql数据库查询耗时较多,语句本身没有太大的优化空间,可以采用加缓存的方式,当出现该慢sql查询语句时,可以在缓存中查询对应的结果,而不是在sql数据库中查询结果。
[0068]
步骤s203,获取各目标慢sql查询语句从sql优化完成时至当前的被用次数。
[0069]
在完成一次sql优化、采取对应的处理措施后,用户可以利用sql查询语句获得对应的结果,在用户使用的这些sql查询语句中,可以确定目标慢sql查询语句出现的次数,该次数视为目标慢sql查询语句从sql优化完成时至当前的被用次数。
[0070]
步骤s204,根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0071]
其中,如果目标慢sql查询语句被用次数较低,则可以在缓存中删除该目标慢sql查询语句对应的sql查询结果;如果目标慢sql查询语句被用次数较高,则可以在缓存中不
删除该目标慢sql查询语句对应的sql查询结果。
[0072]
本技术中,获取sql优化中被识别出来的慢sql查询语句;根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句;获取各目标慢sql查询语句从sql优化完成时至当前的被用次数;根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,释放缓存被占用的空间,且根据目标慢sql查询语句被用次数的高低确定待删除的目标慢sql查询语句对应的sql查询结果,可以避免对sql优化整体性能的降低。
[0073]
在得到目标慢sql查询语句的被用次数后,可以结合其他特征,来确定哪些目标慢sql查询语句对应的查询结果要从缓存中删除。基于此,本技术还提供一种实施方式,根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,具体包括如下步骤:验证各目标慢sql查询语句分别直接在sql数据库和在缓存中进行查询,得到查询结果从sql数据库返回与从缓存返回间的时差,以得到各目标慢sql查询语句对应的查询时差;基于目标慢sql查询语句各自对应的查询时差以及被用次数,得到各目标慢sql查询语句的结果删除不宜度;结果删除不宜度用于评估从缓存中删除相应目标慢sql查询语句对应的sql查询结果对sql优化后的整体性能的影响;根据各目标慢sql查询语句的结果删除不宜度,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0074]
可以验证某一目标慢sql查询语句分别直接在sql数据库和在缓存中进行查询,得到查询结果从sql数据库返回花费的时长,以及查询结果从缓存返回花费的时长,得到这两个时长间的时差,该时差作为该目标慢sql查询语句对应的查询时差。查询时差越小,表明从sql数据库返回花费的时长与从缓存返回花费的时长相差不大。
[0075]
根据该目标慢sql查询语句对应的查询时差以及被用次数,得到目标慢sql查询语句的结果删除不宜度,该结果删除不宜度的大小反映:从缓存中删除该目标慢sql查询语句对应的查询结果后,对sql优化后的整体性能的影响。比如,如果从缓存中删除该目标慢sql查询语句对应的查询结果后,需到sql数据库中查询,若在sql数据库中查询比从缓存中查询花费的时间多1s,如果该目标慢sql查询语句被查询10次,从整体上来看,多花费10s,降低sql优化后的性能。
[0076]
在得到该目标慢sql查询语句的结果删除不宜度后,若结果删除不宜度大于阈值,则不在缓存中删除该目标慢sql查询语句对应的sql查询结果,若结果删除不宜度小于阈值,则在缓存中删除该目标慢sql查询语句对应的sql查询结果。
[0077]
上述实施例中,不仅根据被用次数,还结合结果删除不宜度来确定是否从缓存中删除对应的查询结果,在释放缓存被占用的空间的同时,保证sql优化后的整体性能不受太大影响。
[0078]
进一步地,查询时差越大且被用次数越高,对sql优化整体性能的影响为:sql优化后的整体性能被降低的显著度高,也即显著降低sql优化后的整体性能;查询时差越大且被用次数越低,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低,也即未显著降低sql优化后的整体性能;查询时差越小且被用次数越高,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低,,也即未显著降低sql优化后的整体性能;查询时差越小且被用次数越低,对
sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低,也即未显著降低sql优化后的整体性能。
[0079]
进一步地,基于目标慢sql查询语句各自对应的查询时差以及被用次数,得到各目标慢sql查询语句的结果删除不宜度,包括:基于目标慢sql查询语句各自对应的查询时差以及被用次数之间的乘积,得到各目标慢sql查询语句的结果删除不宜度。
[0080]
本实施例中,将目标慢sql查询语句各自对应的查询时差以及被用次数之间进行相乘,将得到的乘积结果作为各目标慢sql查询语句的结果删除不宜度。
[0081]
上述实施例中,利用查询时差以及被用次数间的乘积结果,得到结果删除不宜度,无需进行复杂处理,提高处理效率。
[0082]
进一步地,根据各目标慢sql查询语句的结果删除不宜度,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果,包括:在各目标慢sql查询语句中,将结果删除不宜度低于阈值的目标慢sql查询语句,作为待删除的目标慢sql查询语句;确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0083]
若结果删除不宜度低于阈值,则说明从缓存中删除该目标慢sql查询语句的sql查询结果后,不会显著降低sql优化后的整体性能,此时可以在缓存中删除该目标慢sql查询语句的sql查询结果。
[0084]
上述实施例中,根据结果删除不宜度和阈值之间的相对大小关系,确定待删除的目标慢sql查询语句的sql查询结果,保证删除准确性。
[0085]
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0086]
在一个实施例中,如图4所示,提供了一种处理缓存中sql查询结果的装置,包括:
[0087]
语句获取单元401,用于获取sql优化中被识别出来的慢sql查询语句;
[0088]
语句分析单元402,还用于根据sql优化处理措施,确定利用缓存进行sql优化的慢sql查询语句,以得到若干个目标慢sql查询语句;
[0089]
次数获取单元403,用于获取各目标慢sql查询语句从sql优化完成时至当前的被用次数;
[0090]
删除确定单元404,用于根据目标慢sql查询语句被用次数的高低,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0091]
在一个实施例中,装置还包括慢语句确定单元,用于:获取慢查询设定值;获取曾在sql数据库进行查询的若干个sql查询语句;在若干个sql查询语句中,确定查询结果返回时长超过慢查询设定值的sql查询语句,得到慢sql查询语句。
[0092]
在一个实施例中,删除确定单元404,还用于:验证各目标慢sql查询语句分别直接在sql数据库和在缓存中进行查询,得到查询结果从sql数据库返回与从缓存返回间的时差,以得到各目标慢sql查询语句对应的查询时差;基于目标慢sql查询语句各自对应的查
询时差以及被用次数,得到各目标慢sql查询语句的结果删除不宜度;结果删除不宜度用于评估从缓存中删除相应目标慢sql查询语句对应的sql查询结果对sql优化后的整体性能的影响;根据各目标慢sql查询语句的结果删除不宜度,确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0093]
在一个实施例中,
[0094]
查询时差越大且被用次数越高,对sql优化整体性能的影响为:sql优化后的整体性能被降低的显著度高;
[0095]
查询时差越大且被用次数越低,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低;
[0096]
查询时差越小且被用次数越高,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低;
[0097]
查询时差越小且被用次数越低,对sql优化整体性能的影响为:降低sql优化整体性能为:sql优化后的整体性能被降低的显著度低。
[0098]
在一个实施例中,删除确定单元404,还用于:基于目标慢sql查询语句各自对应的查询时差以及被用次数之间的乘积,得到各目标慢sql查询语句的结果删除不宜度。
[0099]
在一个实施例中,删除确定单元404,还用于:在各目标慢sql查询语句中,将结果删除不宜度低于阈值的目标慢sql查询语句,作为待删除的目标慢sql查询语句;确定在缓存中待删除的目标慢sql查询语句对应的sql查询结果。
[0100]
关于处理缓存中sql查询结果的装置的具体限定可以参见上文中对于处理缓存中sql查询结果的方法的限定,在此不再赘述。上述处理缓存中sql查询结果的装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0101]
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储处理缓存中sql查询结果的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机设备还包括输入输出接口,输入输出接口是处理器与外部设备之间交换信息的连接电路,它们通过总线与处理器相连,简称i/o接口。该计算机程序被处理器执行时以实现一种处理缓存中sql查询结果的方法。
[0102]
本领域技术人员可以理解,图5中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0103]
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述各个方法实施例中的步骤。
[0104]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各个方法实施例中的步骤。
[0105]
在一个实施例中,提供了一种计算机程序产品,其上存储有计算机程序,计算机程序被处理器执行上述各个方法实施例中的步骤。
[0106]
需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
[0107]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
[0108]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0109]
以上的实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。