一种基于数据库中间件针对高危查询SQL的方法与流程

allin2022-07-12  235


一种基于数据库中间件针对高危查询sql的方法
技术领域
1.本发明涉及数据库中间件技术领域,具体为一种基于数据库中间件针对高危查询sql的方法。


背景技术:

2.现有数据库中间件的主要作用是实现读写分离、分库分表、高可用等功能,但对业务系统生成的高危查询sql对数据库的攻击是没有做到很好的管理作用。在现有5g、ai人工智能和大数据时代,高并发场景对数据库的压力很大,如果数据库中间件只能做到业务数据层的管理,那完全是不够的。高危查询sql一方面会造成数据库的宕机,从而造成业务系统无法响应使用,最终会对这些互联网公司产生极大的负面影响。我们常常在生活中会看到某某互联网公司因为网站或app宕机,所以说对数据库中间件添加数据库高危sql的智能管理是非常重要的。
3.因此本技术就是基于以上问题由设计的,主要目的就是强化数据库中间接的功能,可以智能化的对高危查询sql进行统计、分析、优化管理,从而对公司数据库进行保护,提高公司业务系统的稳定性。


技术实现要素:

4.本发明的目的在于提供一种基于数据库中间件针对高危查询sql的方法,以解决上述背景技术中提出的问题。
5.为实现上述目的,本发明提供如下技术方案:
6.一种基于数据库中间件针对高危查询sql的方法,所述方法主要目的就是强化数据库中间件的功能,可以对高危查询sql进行统计、分析、优化管理,从而对公司数据库进行保护,提高公司业务系统的稳定性,具体来说,包括以下步骤:
7.s1、中间件接收业务程序发来的查询sql,并判断该查询sql是否为慢sql查询;
8.其中,在中间件预先设定慢sql查询的阈值,若接收到的sql查询时长大于这个值判定为慢sql查询;
9.s2、对慢sql查询进行统计并缓存记录;
10.所述s2中,统计数据包括该慢sql查询的执行次数、平均执行时长、查询条件、以及关联数据表等数据信息;
11.s3、请求获得此慢sql查询的执行计划,并对执行计划中是否走索引的情况进行分析;若是则进入s6,若不是则进入s4;
12.s4、分析出慢sql的查询条件,并对该慢sql查询进行优化;
13.其中,s41、从s2统计出来的信息里获取该慢sql查询条件,若能获取该慢sql查询条件,则进入下一步,若否则进入s6中;
14.s42、对获取的该慢sql查询条件对应sql字段进行数据采样分析,计算字段重复率,并根据sql的数据库总量和字段总长度信息程序计算出一个比较值;
15.s43、将字段重复率与比较值进行比较,若重复率小于该比较值,则进入下一步,若重复率大于该比较值,则进入s6;
16.s44、用此sql查询条件的字段生成索引,在数据库从库添加这个索引,回放数据库主库此次慢sql查询相关的采样日志,并统计添加索引后平均执行时长。
17.s5、计算优化后的sql查询效率,若sql查询效率得到提升,则发送优化完成报告;若sql查询效率未得到提升,则进入s6;
18.具体来说,判断优化后的sql查询效率是否得到提升,是将s44中添加索引后的平均执行时长与阈值进行比较,如果索引后的平均执行时长小于阈值则判慢sql查询效率得到优化提升,否则进入s6中;
19.s6、判断sql查询是否要求数据及时性,若是,则标记该sql为限流sql,限制该sql的并发量,并发送优化完成报告,若不是,则标记该sql为从库sql,将该sql请求发送至从库,并发送优化完成报告;
20.具体来说,包括以下两个处理结果:
21.(1)标记为限流sql后,在中间件缓存中记录这个限流sql,并限制这个限流sql的并发量,目的对后端数据库主库进行保护;
22.(2)标记为从库sql后,在中间件缓存中记录这个从库sql,并将业务后续每次请求的与从库sql相同的sql查询转发到数据库从库。
23.综上所述,本发明的有益效果如下:
24.(1)本发明中先对这个sql进行统计,统计经过中间件请求数据库的执行次数,平均执行时长,查询条件,关联数据表等信息,再通过程序向数据库请求获得到此sql的执行计划,对执行计划中不走索引的情况再进行分析,分析出sql的查询条件(详细步骤5),并用程序添加智能分析和匹配索引的方式去优化sql。对于没有查询条件或使用索引还是慢sql的情况,一方面使用限制这个sql的并发量(详细步骤13、14),另一方将此sql路由到数据库从库来执行,从而智能化去管理此慢sql。添加索引可以优化此sql的执行效率从而变成不是慢sql,智能化管理sql的并发量和路由是在无法用索引优化的情况下避免主库受慢sql的攻击,最终保护数据库主库的性能,也保证了生产系统的稳定性。
25.(2)本发明不需要开发或运维人员手工参与优化,每个步骤都是自动化去实现,每次优化都有数据统依据,优化完成后并进行问题sql回放验证。对于一些应业务需要无法通过添加索引的方试去优化的sql,本方法也做了管控,一方面是限制问题的sql的并发量,一方面是将问题sql转发到数据库从库,保护数据库主库稳定,从而实现业务系统持久性。
附图说明
26.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需使用的附图作简单介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对保护范围的限定,对于本领域技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
27.图1为本发明系统组成示意图;
28.图2为本发明工作流程示意图。
具体实施方式
29.为使本技术的目的、技术方案和优点更为清楚,下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
30.实施例
31.如图1-2所示,本实施例提供一种基于数据库中间件针对高危查询sql的方法,所述方法主要目的就是强化数据库中间件的功能,可以对高危查询sql进行统计、分析、优化管理,从而对公司数据库进行保护,提高公司业务系统的稳定性,具体来说,包括以下步骤:
32.s1、中间件接收业务程序发来的查询sql,并判断该查询sql是否为慢sql查询;
33.预先在中间件设定慢sql的时间阈值,当业务程序发来的查询sql执行时长大于这个值则判定为慢查询;
34.s2、对慢sql查询进行统计并缓存记录;
35.主要是统计这个慢sql查询的执行次数、平均执行时长、查询条件和关联数据表等信息记录在缓存中;
36.s3、请求获得此慢sql查询的执行计划,并对执行计划中是否走索引的情况进行分析;若是则进入s6,若不是则进入s4;
37.针对此慢sql查询向数据库请求获得到此慢sql的执行计划,并通过执行计划判断出此sql是否已使用索引查询;
38.s4、分析出慢sql的查询条件,并对该慢sql查询进行优化;
39.其中,优化sql查询方法的具体步骤为:
40.s41、判断是否能从s2统计出来的信息里获取该慢sql查询条件,若是则进入下一步,若否则进入s6中;
41.s42、对s41中查询条件对应sql字段进行数据采样分析,计算字段重复率,依据本实施例具体来说,是根据一定的采样率,采样这个字段中若干种值(查询参数),然后对这些值进行聚合统计,统计出这些值在这个字段上的重复率,并根据sql的数据库总量和字段总长度信息程序计算出一个比较值;
42.s43、将重复率与比较值进行比较,若重复率小于该比较值,则用此sql查询条件的字段生成索引,在数据库从库添加这个索引,回放数据库主库此次慢sql查询相关的采样日志,并统计添加索引后平均执行时长,若重复率大于该比较值,则进入s6中;
43.s5、计算优化后的sql查询效率,若sql查询效率得到提升,则发送优化完成报告;若sql查询效率未得到提升,则进入s6;
44.其中,判断该sql查询效率是否得到提升,主要是看s43中添加索引后的平均执行时长是否低于s2中的阈值,若低于阈值则表明sql查询效率已经得到提升。
45.s6、判断sql查询是否要求数据及时性,若是,则标记该sql为限流sql,限制该sql的并发量,并发送优化完成报告,若不是,则标记该sql为从库sql,将该sql请求发送至从库,并发送优化完成报告。
46.具体来说,包括以下两个处理结果:
47.(1)程序会在中间件组件中生成一个元数据表,这个表是记录了业务不能走从库
查询的数据表,判断s2中执行计划关联的表是否在这个元数据表中出现,如果有出现,程序会在中间件组件中生成一个元数据表,记录此慢sql查询在这个表中,并标记为限流sql,以在中间件缓存中记录这个sql,限制这个慢sql查询的并发量,进而对后端数据库主库进行保护;
48.(2)如果没有出现,程序会在中间件组件中生成一个元数据表,记录此慢sql查询在这个表中,标记为从库sql查询,并在中间件缓存中记录这个从库sql查询,用以将业务后续每次请求的相同sql转发到数据库从库。
49.上述实施例仅为本发明的优选实施例,并非对本发明保护范围的限制,但凡采用本发明的设计原理,以及在此基础上进行非创造性劳动而作出的变化,均应属于本发明的保护范围之内。
转载请注明原文地址: https://www.8miu.com/read-152.html

最新回复(0)