本技术属于数据库,更具体地,涉及一种数据库负载均衡方法、装置、电子设备及存储介质。
背景技术:
1、传统的分布式数据库负载均衡方式一般是在驱动层实现,驱动层是指连接数据库节点和应用程序之间的接口层,负责将应用程序的请求转换为数据库可以理解的格式,并将数据库返回的结果转换为应用程序可以处理的格式。同时,数据库节点提供sql接口用于查询可用的数据库节点以及其负载情况。
2、驱动层通常由数据库驱动程序(database driver)执行相应处理逻辑,它是一个软件层。现有的驱动层的具体工作流程如下:(1)驱动程序连接数据库节点,执行sql语句拉取数据库节点信息,主要是可用的数据库节点信息以及其负载情况;(2)应用程序请求获取连接时,驱动程序根据数据库节点的负载情况分配连接。
3、现有的分布式数据库负载均衡方案中是基于数据库实例级别的负载均衡,而在实际中不同sql产生的负载特性有较大差异,例如联机分析处理(online analyticalprocessing,olap)类型的sql语句其io代价、算子下盘数据量、网络开销比较大,传统的负载均衡方法不考虑实例中的sql的负载特性差异,可能把相同负载特性的sql均衡到同一个节点上,从而导致提前达到负载的上限,例如把io代价高的sql语句均衡到了同一个节点上,从而导致该节点的io达到了上限,sql语句执行的性能会下降。
技术实现思路
1、针对现有技术的缺陷,本技术的目的在于实现数据库语句级别的负载均衡。
2、为实现上述目的,第一方面,本技术提供了一种数据库负载均衡方法,该方法包括:
3、获取第一数据库语句(例如sql语句);
4、判断数据库语句负载信息结构是否存有第一数据库语句对应的负载统计信息,数据库语句负载信息结构用于存放数据库语句对应的负载统计信息;
5、若确定数据库语句负载信息结构存有第一数据库语句对应的负载统计信息,则基于各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点;
6、发送第一数据库语句至目标数据库节点。
7、数据库语句负载信息结构可以称为sql负载信息结构或sql负载信息map。
8、通过结合各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,以负载均衡方式来确定用于执行第一数据库语句的目标数据库节点,能够实现数据库语句级别(或称为sql级别)的负载均衡,能够充分利用各个数据库节点的各类资源,例如io资源、存储空间资源和网络资源,从而充分发挥各个数据库节点的最大性能。
9、在一种可能的实现方式中,数据库语句对应负载统计信息包括:第一存储空间负载、第一io负载和第一网络负载,相应地,数据库节点的负载信息包括:第二存储空间负载、第二io负载和第二网络负载。
10、第一存储空间负载用于表征数据库节点在执行数据库语句的过程中,数据库语句对数据库节点的存储空间资源的消耗量。
11、第一io负载用于表征数据库节点在执行数据库语句的过程中,数据库语句对数据库节点的io资源的消耗量。
12、第一网络负载用于表征数据库节点在执行数据库语句的过程中,数据库语句对数据库节点的网络资源的消耗量。
13、第二存储空间负载用于表征数据库节点的存储空间资源的整体消耗量。
14、第二io负载用于表征数据库节点的io资源的整体消耗量。
15、第二网络负载用于表征数据库节点的网络资源的整体消耗量。
16、在一种可能的实现方式中,上述基于各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点,包括:
17、基于各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,在多个数据库节点中筛选出备选节点,备选节点的剩余资源大于执行第一数据库语句所消耗的资源;
18、基于各个备选节点的负载信息和第一数据库语句对应的负载统计信息,预估各个备选节点在执行第一数据库语句时的负载预估信息;
19、基于各个备选节点对应的负载预估信息,确定在执行第一数据库语句时负载最低的一个备选节点作为目标数据库节点。
20、此处对上述备选节点的剩余资源大于执行第一数据库语句所消耗的资源进行示例性说明,备选节点在存储空间、io和网络等方面的剩余资源大于执行第一数据库语句所消耗的对应资源。例如,备选节点的存储空间资源的剩余量大于执行第一数据库语句所消耗的存储空间资源,备选节点的io资源的剩余量大于执行第一数据库语句所消耗的io资源,备选节点的网络资源的剩余量大于执行第一数据库语句所消耗的网络资源。
21、此处对上述预估备选节点在执行第一数据库语句时的负载预估信息进行示例性说明,基于备选节点的负载信息,可以获知备选节点在存储空间、io和网络等方面的负载,基于第一数据库语句对应的负载统计信息,可以获知在执行数据库语句的过程中,数据库语句对数据库节点的存储空间资源、io资源和网络资源的消耗量。
22、通过对备选节点的存储空间负载和第一数据库语句对存储空间资源的消耗量两者求和,可以预估备选节点在执行第一数据库语句时的存储空间负载,以确定存储空间负载预估值。
23、通过对备选节点的io负载和第一数据库语句对io资源的消耗量两者求和,可以预估备选节点在执行第一数据库语句时的io负载,以确定io负载预估值。
24、通过对备选节点的网络负载和第一数据库语句对网络资源的消耗量两者求和,可以预估备选节点在执行第一数据库语句时的网络负载,以确定网络负载预估值。
25、上述负载预估信息可以包括存储空间负载预估值、io负载预估值和网络负载预估值。
26、此处对上述确定在执行第一数据库语句时负载最低的一个备选节点作为目标数据库节点进行示例性说明,可选地,基于备选节点对应的负载预估信息中的存储空间负载预估值、io负载预估值和网络负载预估值,获取备选节点对应的总负载预估值,比较不同备选节点对应的总负载预估值,可以在全部备选节点中确定总负载预估值最低的一个备选节点作为目标数据库节点。
27、可选地,基于负载优先级排序和第一数据库语句对应的负载统计信息,在多类负载中筛选出一个目标类负载(存储空间负载、网络负载或io负载)作为评价指标,且第一数据库语句对目标类资源(存储空间资源、网络资源或io资源)的消耗量大于0,进而备选节点对应的负载预估信息中的目标类负载预估值(存储空间负载预估值、io负载预估值或网络负载预估值),比较不同备选节点对应的目标类负载预估值,可以在全部备选节点中确定目标类负载预估值最低的一个备选节点作为目标数据库节点。其中,负载优先级排序用于表示不同类负载之间的优先级排序,例如存储空间负载的优先级>网络负载的优先级>io负载优先级。
28、此处对上述在多类负载中筛选出一个目标类负载作为评价指标进行示例性说明,基于第一数据库语句对应的负载统计信息,可以确定第一数据库语句对各类资源的消耗量,进而筛选出一个或多个备选类负载,第一数据库语句对备选类资源的消耗量大于0,进而按照负载优先级排序,在全部备选类负载中筛选出目标类负载,目标类负载为全部备选类负载中优先级最高的一项。
29、可以理解的是,目标数据库节点是在执行第一数据库语句时负载最低的一个备选节点,将第一数据库语句下发至目标数据库节点,能够充分利用目标数据库节点的各类空闲资源,实现数据库语句级别的负载均衡,提升负载均衡效果。
30、在一种可能的实现方式中,还包括:
31、遍历数据库语句列表中每一条数据库语句,针对遍历到的数据库语句,通过访问数据库节点获取遍历到的数据库语句对应的负载统计信息,并基于遍历到的数据库语句对应的负载统计信息,更新数据库语句负载信息结构;
32、其中,数据库节点用于对执行数据库语句所消耗的资源进行统计,以获取数据库语句对应的负载统计信息。
33、数据库语句列表可以称为sql语句列表。
34、在一种可能的实现方式中,在判断数据库语句负载信息结构是否存有第一数据库语句对应的负载统计信息之后,还包括:
35、若确定数据库语句负载信息结构未存有第一数据库语句对应的负载统计信息,则将第一数据库语句加入至数据库语句列表。
36、在一种可能的实现方式中,还包括:
37、通过访问数据库节点获取数据库节点的负载信息。
38、在一种可能的实现方式中,在判断数据库语句负载信息结构是否存有第一数据库语句对应的负载统计信息之后,还包括:
39、若确定数据库语句负载信息结构未存有第一数据库语句对应的负载统计信息,则判断数据库语句负载信息结构中是否存在第二数据库语句,第二数据库语句与第一数据库语句采用相同的语句模板;
40、在数据库语句负载信息结构中存在第二数据库语句的情况下,基于各个数据库节点的负载信息和第二数据库语句对应的负载统计信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点;
41、发送第一数据库语句至目标数据库节点。
42、此处对数据库语句采用的语句模板进行说明,对sql语句进行词法分析,把sql语句中常量表达式取出进行归一化替换生成语句模板,主要是列名归一化、参数值归一化,所生成的语句模板即为数据库语句采用的语句模板。
43、例如,select id from test where id = 10与select name from test whereid = 1000这两条不一样的sql都归一化为selectfrom test where test=?,因此这两条sql语句采用相同的语句模板。
44、在一种可能的实现方式中,在判断数据库语句负载信息结构中是否存在第二数据库语句之后,还包括:
45、在数据库语句负载信息结构中不存在第二数据库语句的情况下,基于各个数据库节点的负载信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点;
46、发送第一数据库语句至目标数据库节点。
47、第二方面,本技术提供一种数据库负载均衡装置,包括:
48、语句获取模块,用于获取第一数据库语句;
49、判断模块,用于判断数据库语句负载信息结构是否存有第一数据库语句对应的负载统计信息,数据库语句负载信息结构用于存放数据库语句对应的负载统计信息;
50、确定模块,用于若确定数据库语句负载信息结构存有第一数据库语句对应的负载统计信息,则基于各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点;
51、发送模块,用于发送第一数据库语句至目标数据库节点。
52、第三方面,本技术提供一种电子设备,包括:至少一个存储器,用于存储程序;至少一个处理器,用于执行存储器存储的程序,当存储器存储的程序被执行时,处理器用于执行第一方面或第一方面的任一种可能的实现方式所描述的方法。
53、第四方面,本技术提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,当计算机程序在处理器上运行时,使得处理器执行第一方面或第一方面的任一种可能的实现方式所描述的方法。
54、可以理解的是,上述第二方面至第四方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
55、总体而言,通过本技术所构思的以上技术方案与现有技术相比,具有以下有益效果:
56、通过结合各个数据库节点的负载信息和第一数据库语句对应的负载统计信息,以负载均衡方式来确定用于执行第一数据库语句的目标数据库节点,能够实现数据库语句级别(或称为sql级别)的负载均衡,能够充分利用各个数据库节点的各类资源,例如io资源、存储空间资源和网络资源,从而充分发挥各个数据库节点的最大性能。
1.一种数据库负载均衡方法,其特征在于,包括:
2.根据权利要求1所述数据库负载均衡方法,其特征在于,所述基于各个数据库节点的负载信息和所述第一数据库语句对应的负载统计信息,以负载均衡方式在多个数据库节点中确定一个目标数据库节点,包括:
3.根据权利要求1所述数据库负载均衡方法,其特征在于,还包括:
4.根据权利要求3所述数据库负载均衡方法,其特征在于,在判断数据库语句负载信息结构是否存有所述第一数据库语句对应的负载统计信息之后,还包括:
5.根据权利要求1所述数据库负载均衡方法,其特征在于,在判断数据库语句负载信息结构是否存有所述第一数据库语句对应的负载统计信息之后,还包括:
6.根据权利要求5所述数据库负载均衡方法,其特征在于,在判断所述数据库语句负载信息结构中是否存在第二数据库语句之后,还包括:
7.根据权利要求1-6任一所述数据库负载均衡方法,其特征在于,所述数据库语句对应的负载统计信息包括:第一存储空间负载、第一io负载和第一网络负载,相应地,所述数据库节点的负载信息包括:第二存储空间负载、第二io负载和第二网络负载。
8.一种数据库负载均衡装置,其特征在于,包括:
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,当所述计算机程序在处理器上运行时,使得所述处理器执行如权利要求1-7任一所述的方法。