数据库的压力测试方法、装置、电子设备和可读存储介质与流程
未命名
07-19
阅读:84
评论:0
1.本技术涉及大数据技术领域,尤其是涉及一种数据库的压力测试方法、装置、电子设备和计算机可读存储介质。
背景技术:
2.对于多数应用系统,整个系统的瓶颈容易体现在数据库,因为应用系统中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括cpu、内存、硬盘灯和连接数等)和缓存等都很容易通过水平的扩展(也即加机器)来实现性能的提高。而对于数据库,由于数据一致性的要求,无法通过快速增加机器来分散向数据库读写数据带来的压力,因为增加机器需要同步数据,同步数据过程较长;虽然可以通过前置缓存如redis、读写分离或分库分表来减轻压力,但是与应用系统其它组件的水平扩展相比,受到了太多的限制。基于此,为了能够使一个成熟的业务系统上线或者活动评估顺利进行,需要提前发起对于数据库的扩容,因此知道数据库的读写性能容量,是非常有必要的,对此,各类数据库的压力测试工具应运而生。
技术实现要素:
3.有鉴于此,本技术提供了一种效率高、灵活性好、可以完全覆盖数据库指令访问的复杂性,做到精准测试、对人力成本和资源成本消耗较小以及压力测试周期较短的数据库的压力测试方法、装置、电子设备和计算机可读存储介质。
4.本技术的一个方面提供了一种数据库的压力测试方法,包括:步骤一,获取数据库的历史操作指令;步骤二,根据所述数据库的生产环境确定该数据库对应的压力测试环境;步骤三,根据压力值向所述压力测试环境注入所述历史操作指令,其中,所述压力值为每秒向所述压力测试环境注入m条所述历史操作指令,m为大于1的整数;步骤四,每隔t秒检查一次所述压力测试环境的压力指标,其中,t为大于等于1的整数;步骤五,当所述压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至所述压力指标异常;以及步骤六,当所述压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的所述压力指标均正常,将当前的所述压力值确定为所述数据库的标准压力值,其中,n为大于等于1的整数。
5.根据本技术实施例的数据库的压力测试方法,通过将历史操作指令注入压力测试环境可以模拟实际的生产环境对操作指令的执行,通过调整或保持压力值以及每隔t秒检查一次压力测试环境的压力指标,可以确定出数据库的标准压力值,由此完成了对数据库的压力测试。与现有技术相比,本技术的压力值可以做到控制和调整,测试人员可以根据压力指标的情况对压力值进行动态调整,从而可以提高压力测试的效率和灵活性。而且,本技术的历史操作指令为生产环境中的历史操作指令,与实际情况完全相符,可以完全覆盖数据库指令访问的复杂性,做到精准测试。另外,本技术只需对生产环境重现即可得到压力测试环境,易于实现,对人力成本、资源成本消耗较小,压力测试周期较短。
6.在一些实施例中,当所述步骤三第一次执行时,所述压力值为初始压力值,所述初始压力值根据测试时段获取的所述历史操作指令的数量确定,其中,所述测试时段为s分钟,所述s分钟获取的所述历史操作指令的数量为r条,所述初始压力值大于r/60s,s大于等于1,r为大于等于100的整数。
7.在一些实施例中,所述数据库包括主数据库和从数据库,所述主数据库用于写入数据,所述从数据库用于读取数据,所述压力测试包括写入性能测试和/或读取性能测试,当所述压力测试包括写入性能测试时,所述历史操作指令包括写入操作历史操作指令,当所述压力测试包括读取性能测试时,所述历史操作指令包括读取操作历史操作指令。
8.在一些实施例中,当所述压力测试包括写入性能测试时,所述压力指标包括延迟时间和/或第一平均响应时间,当所述压力指标包括所述延迟时间时,所述压力指标异常包括所述延迟时间大于等于第一阈值,当所述压力指标包括所述第一平均响应时间时,所述压力指标异常包括所述第一平均响应时间大于等于第二阈值,其中,所述延迟时间为向所述主数据库写入数据后,同步到所述从数据库的时间差,所述第一平均响应时间为向所述主数据库写入数据的第一平均响应时间;当所述压力测试包括读取性能测试时,所述压力指标包括指令同时运行数量和/或第二平均响应时间,当所述压力指标包括所述指令同时运行数量时,所述压力指标异常包括所述指令同时运行数量大于等于第三阈值,当所述压力指标包括所述第二平均响应时间时,所述压力指标异常包括所述第二平均响应时间大于等于第四阈值,其中,指令同时运行数量为所述读取操作历史操作指令在所述从数据库中同时运行的数量,所述第二平均响应时间为向所述从数据库读取数据的第二平均响应时间。
9.在一些实施例中,所述加压策略为每次加压所述初始压力值的一倍,所述减压策略为每次减压所述初始压力值的q%,其中,q大于等于1且小于等于80。
10.在一些实施例中,当所述压力测试包括写入性能测试时,根据所述数据库的生产环境确定该数据库对应的压力测试环境,包括:在镜像服务器上配置所述数据库的主数据库的镜像环境;以及将所述主数据库的镜像环境作为所述压力测试环境。
11.当所述压力测试包括读取性能测试时,根据所述数据库的生产环境确定该数据库对应的压力测试环境,包括:复制所述数据库的从数据库;以及将所述复制的从数据库作为所述压力测试环境。
12.当所述压力测试包括写入性能测试和读取性能测试时,根据所述数据库的生产环境确定该数据库对应的压力测试环境,包括:在镜像服务器上配置所述数据库的镜像环境,其中,所述数据库的镜像环境包括所述主数据库和所述从数据库的镜像环境;以及将所述数据库的镜像环境作为所述压力测试环境。
13.在一些实施例中,所述根据压力值向所述压力测试环境注入所述历史操作指令,包括:根据所述压力值缓存所述历史操作指令到内存中,其中,每次缓存的所述历史操作指令大于等于所述压力值;以及从所述内存中提取所述历史操作指令注入所述压力测试环境。
14.本技术的另一个方面提供了一种数据库的压力测试装置,包括:获取模块,所述获取模块用于执行步骤一,获取数据库的历史操作指令;确定模块,所述确定模块用于执行步骤二,根据所述数据库的生产环境确定该数据库对应的压力测试环境;注入模块,所述注入
模块用于执行步骤三,根据压力值向所述压力测试环境注入所述历史操作指令,其中,所述压力值为每秒向所述压力测试环境注入m条所述历史操作指令,m为大于1的整数;检查模块,所述检查模块用于执行步骤四,每隔t秒检查一次所述压力测试环境的压力指标,其中,t为大于等于1的整数;第一调整模块,所述第一调整模块用于执行步骤五,当所述压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至所述压力指标异常;以及第二调整模块,所述第二调整模块用于执行步骤六,当所述压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的所述压力指标均正常,将当前的所述压力值确定为所述数据库的标准压力值,其中,n为大于等于1的整数。
15.本技术的另一方面提供了一种电子设备,包括一个或多个处理器以及一个或多个存储器,其中,所述存储器用于存储可执行指令,所述可执行指令在被所述处理器执行时,实现如上所述方法。
16.本技术的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
附图说明
17.本技术的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
18.图1示意性示出了根据本技术一些实施例的数据库的压力测试方法的流程图;
19.图2示意性示出了根据本技术一些实施例的根据数据库的生产环境确定该数据库对应的压力测试环境的流程图;
20.图3示意性示出了根据本技术另一些实施例的根据数据库的生产环境确定该数据库对应的压力测试环境的流程图;
21.图4示意性示出了根据本技术再一些实施例的根据数据库的生产环境确定该数据库对应的压力测试环境的流程图;
22.图5示意性示出了根据本技术一些实施例的根据压力值向压力测试环境注入历史操作指令的流程图;
23.图6示意性示出了根据本技术一些实施例的dbproxy访问数据库架构图;
24.图7示意性示出了根据本技术一些实施例的流量回放写压测结构图;
25.图8示意性示出了根据本技术一些实施例的读压测架构图;
26.图9示意性示出了根据本技术一些实施例的数据库的压力测试装置的结构框图;
27.图10示意性示出了根据本技术一些实施例的电子设备的结构框图。
具体实施方式
28.以下,将参照附图来描述本技术的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本技术的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本技术实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本技术的概念。在本技术的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
29.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本技术。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
30.对于多数应用系统,整个系统的瓶颈容易体现在数据库,因为应用系统中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括cpu、内存、硬盘灯和连接数等)和缓存等都很容易通过水平的扩展(也即加机器)来实现性能的提高。而对于数据库,由于数据一致性的要求,无法通过快速增加机器来分散向数据库读写数据带来的压力,因为增加机器需要同步数据,同步数据过程较长;虽然可以通过前置缓存如redis、读写分离或分库分表来减轻压力,但是与应用系统其它组件的水平扩展相比,受到了太多的限制。基于此,为了能够使一个成熟的业务系统上线或者活动评估顺利进行,需要提前发起对于数据库的扩容,因此知道数据库的读写性能容量,是非常有必要的,对此,各类数据库的压力测试工具应运而生。
31.相关技术中,对数据库的压力测试工具有mysqlslap、sysbench和在线接口调用等等。mysqlslap的作用是可以模拟并发测试数据库性能,但是不能指定用于测试的数据规模,对测试过程测试人员不能做到动态调整,影响压力测试的效率和灵活性。sysbench的作用是模拟并发,可以执行cpu/内存/线程/io/数据库等方面的性能测试,但是在测试的时候,由于网络原因,测试的非常慢,并且创建的表结构和数据库测试指令相对简单,无法完全覆盖数据库指令访问的复杂性。在线接口调用作用可以完全模拟线上访问,全部使用在线接口调用,但是在线接口调用需要严格的环境配置,如业务服务器、数据库服务器、实际数据等必须要与线上完全一致,才能得到一个比较准确的压力评估,因此在线接口调用对人力成本、资源成本消耗较大,压力测试周期较长。
32.下面参考图1-图10描述根据本技术实施例的数据库的压力测试方法、装置、电子设备、计算机可读存储介质和计算机程序产品。
33.图1示意性示出了根据本技术实施例的数据库的压力测试方法的流程图。
34.如图1所示,该实施例的数据库的压力测试方法包括操作s210~操作s270。
35.在操作s210,步骤一,获取数据库的历史操作指令。
36.作为一种可实施的方式,操作s210获取数据库的历史操作指令可以包括操作s211和操作212。
37.在操作s211,从数据库的生产环境中获取日志信息。
38.在操作s212,将日志信息解析为历史操作指令,可以理解的是,日志信息中可以包括至少一条历史操作指令,历史操作指令的具体数量可以根据实际解析情况确定,这里不做具体限定。通过操作s211和操作212可以便于实现获取数据库的历史操作指令。
39.在操作s220,步骤二,根据数据库的生产环境确定该数据库对应的压力测试环境。可以理解的是,压力测试环境为对生产环境的重现,对生产环境重现的方式有多种,下文对如何根据生产环境确定对应的压力测试环境再做详细介绍。
40.在操作s230,步骤三,根据压力值向压力测试环境注入历史操作指令,其中,压力值为每秒向压力测试环境注入m条历史操作指令,m为大于1的整数。
41.在操作s240,步骤四,每隔t秒检查一次压力测试环境的压力指标,其中,t为大于等于1的整数。
42.在操作s250,步骤五,当压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至压力指标异常。
43.在操作s260,步骤六,当压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四。
44.在操作s270,直至连续n个t秒检查的压力指标均正常,将当前的压力值确定为数据库的标准压力值,其中,n为大于等于1的整数。
45.根据本技术实施例的数据库的压力测试方法,通过将历史操作指令注入压力测试环境可以模拟实际的生产环境对操作指令的执行,通过调整或保持压力值以及每隔t秒检查一次压力测试环境的压力指标,可以确定出数据库的标准压力值,由此完成了对数据库的压力测试。与现有技术相比,本技术的压力值可以做到控制和调整,测试人员可以根据压力指标的情况对压力值进行动态调整,从而可以提高压力测试的效率和灵活性。而且,本技术的历史操作指令为生产环境中的历史操作指令,与实际情况完全相符,可以完全覆盖数据库指令访问的复杂性,做到精准测试。另外,本技术只需对生产环境重现即可得到压力测试环境,易于实现,对人力成本、资源成本消耗较小,压力测试周期较短。
46.根据本技术的一些实施例,当步骤三第一次执行时,压力值为初始压力值,初始压力值根据测试时段获取的历史操作指令的数量确定,其中,测试时段为s分钟,s分钟获取的历史操作指令的数量为r条,初始压力值大于r/60s,s大于等于1,r为大于等于100的整数。可以理解的是,当步骤三第一次执行时,需要设定一个初始压力值,由于需要通过初始压力值测出数据库目前每秒可以执行的操作指令数量的极限值,因此初始压力值设定时需要大于r/60s。
47.作为一种可实施的方式,例如可以将测试时段s分钟的历史操作指令的数量r条压缩到u分钟执行,u小于s,因此确定初始压力值约为r/60u。进一步例如可以获取1小时的数据库的日志信息,解析日志信息后获得100000条历史操作指令,现将10000条历史操作指令压缩到5分钟执行完,因此可以确定初始压力值为330。由此,通过测试时段和测试时段获取的历史操作指令的数量可以便于确定初始压力值,通过初始压力值可以便于确定数据库的标准压力值。
48.在本技术的一些实施例中,数据库包括主数据库和从数据库,主数据库用于写入数据,从数据库用于读取数据,压力测试包括写入性能测试和/或读取性能测试,当压力测试包括写入性能测试时,历史操作指令包括写入操作历史操作指令,当压力测试包括读取性能测试时,历史操作指令包括读取操作历史操作指令。由此,本技术的方法可以仅实现数据库的写入性能的测试;也可以仅实现数据库的读取性能的测试;还可以实现数据库的写入性能和读取性能的同时测试。
49.现有技术中的压力测试工具tpcc-mysql的作用为可以测试数据库的整体性能,但是不能单独测试读或者写的性能,无法对一些以查询为主或者只写的应用进行性能测试。与现有技术中的压力测试工具tpcc-mysql相比,本技术的方法适用性广,测试范围大。
50.根据本技术的一些实施例,当压力测试包括写入性能测试时,压力指标包括延迟时间和/或第一平均响应时间,其中,延迟时间为向主数据库写入数据后,同步到从数据库的时间差,第一平均响应时间为向主数据库写入数据的第一平均响应时间。
51.当压力指标包括延迟时间时,压力指标异常包括延迟时间大于等于第一阈值,压
力指标正常包括延迟时间小于第一阈值,例如第一阈值可以为10秒,当延迟时间大于等于10秒时,判定压力指标异常。当延迟时间小于10秒时,判定压力指标正常。当然,第一阈值为10秒仅为举例说明,并不能理解为对本技术的限制。
52.当压力指标包括第一平均响应时间时,压力指标异常包括第一平均响应时间大于等于第二阈值,压力指标正常包括第一平均响应时间小于第二阈值,例如第二阈值可以为w毫秒,当第一平均响应时间大于等于w毫秒时,判定压力指标异常。当第一平均响应时间小于w毫秒时,判定压力指标正常。当然,第二阈值为w毫秒仅为举例说明,并不能理解为对本技术的限制。
53.当压力测试包括读取性能测试时,压力指标包括指令同时运行数量和/或第二平均响应时间,其中,指令同时运行数量为读取操作历史操作指令在从数据库中同时运行的数量,第二平均响应时间为向从数据库读取数据的第二平均响应时间。
54.当压力指标包括指令同时运行数量时,压力指标异常包括指令同时运行数量大于等于第三阈值,压力指标正常包括指令同时运行数量小于第三阈值,例如第三阈值可以为cpu核心数量,当指令同时运行数量大于等于cpu核心数量时,判定压力指标异常。当指令同时运行数量小于cpu核心数量时,判定压力指标正常。当然,第三阈值为cpu核心数量仅为举例说明,并不能理解为对本技术的限制。
55.当压力指标包括第二平均响应时间时,压力指标异常包括第二平均响应时间大于等于第四阈值,压力指标正常包括第二平均响应时间小于第四阈值,例如第四阈值可以为x毫秒,当第二平均响应时间大于等于x毫秒时,判定压力指标异常。当第二平均响应时间小于x毫秒时,判定压力指标正常。当然,第四阈值为x毫秒仅为举例说明,并不能理解为对本技术的限制。
56.由此,当压力测试包括写入性能测试时,通过延迟时间和/或第一平均响应时间可以便于判定压力指标是否异常;当压力测试包括读取性能测试时,通过指令同时运行数量和/或第二平均响应时间可以便于判定压力指标是否异常。进而可以便于确定是否调整压力值,从而确定数据库的标准压力值。
57.在本技术的一些实施例中,加压策略可以为每次加压初始压力值的一倍,减压策略可以为每次减压初始压力值的q%,其中,q大于等于1且小于等于80。由此,通过加压策略和减压策略可以便于实现对压力值的调整,从而确定数据库的标准压力值。上述加压策略和减压策略仅为举例说明,还可以有其他压力值调整的策略,这里不再一一列举,上述的加压策略和减压策略并不能理解为对本技术的限制。
58.在一些实施例中,减压策略可以为每次减压初始压力值的10%。
59.在一些实施例中,减压策略可以为每次减压初始压力值的20%。
60.在一些实施例中,减压策略可以为每次减压初始压力值的30%。
61.在一些实施例中,减压策略可以为每次减压初始压力值的40%。
62.在一些实施例中,减压策略可以为每次减压初始压力值的50%。
63.在一些实施例中,减压策略可以为每次减压初始压力值的60%。
64.在一些实施例中,减压策略可以为每次减压初始压力值的70%。
65.在本技术的一些实施例中,当压力测试包括写入性能测试时,如图2所示,操作s220根据数据库的生产环境确定该数据库对应的压力测试环境,包括操作s221和操作
s222。
66.在操作s221,在镜像服务器上配置数据库的主数据库的镜像环境。
67.在操作s222,将主数据库的镜像环境作为压力测试环境。
68.通过操作s221和操作s222可以便于实现在压力测试包括写入性能测试时,根据数据库的生产环境确定该数据库对应的压力测试环境。
69.当压力测试包括读取性能测试时,如图3所示,操作s220根据数据库的生产环境确定该数据库对应的压力测试环境,包括操作s223和操作s224。
70.在操作s223,复制数据库的从数据库。
71.在操作s224,将复制的从数据库作为压力测试环境。
72.通过操作s223和操作s224可以便于实现在压力测试包括读取性能测试时,根据数据库的生产环境确定该数据库对应的压力测试环境。
73.当压力测试包括写入性能测试和读取性能测试时,如图4所示,操作s220根据数据库的生产环境确定该数据库对应的压力测试环境,包括操作s225和操作s226。
74.在操作s225,在镜像服务器上配置数据库的镜像环境,其中,数据库的镜像环境包括主数据库和从数据库的镜像环境。
75.在操作s226,将数据库的镜像环境作为压力测试环境。
76.通过操作s225和操作s226可以便于实现在压力测试包括写入性能测试和读取性能测试时,根据数据库的生产环境确定该数据库对应的压力测试环境。
77.根据本技术的一些实施例,如图5所示,操作s230根据压力值向压力测试环境注入历史操作指令,包括操作s231和操作s232。
78.在操作s231,根据压力值缓存历史操作指令到内存中,其中,每次缓存的历史操作指令大于等于压力值。
79.在操作s232,从内存中提取历史操作指令注入压力测试环境。
80.需要说明的是,从日志信息中解析出来的历史操作指令可以存储在本地磁盘中,如果每次向压力测试环境注入历史操作指令都需要去读取本地磁盘,就可能会因为读取本地磁盘这一步的消耗而导致压力测试的结果不符合预期。因此,将历史操作指令缓存到内存中,可以减少读取本地磁盘带来的影响。而根据压力值缓存历史操作指令到内存中,从内存中提取历史操作指令注入压力测试环境,可以便于向压力测试环境注入历史操作指令的成功实现。
81.当然,根据压力值向压力测试环境注入历史操作指令也可以从本地磁盘上读取历史操作指令直接注入压力测试环境,操作s231和操作s232不应理解为对本技术的限制。
82.下面参照图6-图8详细描述根据本技术实施例的基于上述数据库的压力测试方法。值得理解的是,下述描述仅是示例性说明,而不是对本技术的具体限制。
83.以下是下文涉及到的名词解释:
84.mysql集群:一主多从的mysql服务群组,一个集群内包含一台主库,多台从库,主库承接写流量,从库承接读流量。
85.dml:表数据变更语句,如某行数据进行了删除、更新、修改。
86.ddl:表结构变更语句,如某个表进行了加列、删列、字符集修改。
87.dbproxy:用于实现mysql访问的读写分离,通过dbroxy访问mysql主从,将自动路
由读写,写流量(dml语句、ddl语句)发往主库,读流量(select)发往从库。
88.qps:每秒读数据库的请求数量。
89.tps:每秒写数据库的请求数量。
90.延迟:主库写入数据,同步到从库的时间差,mysql以秒(s)为单位。
91.平响:dbproxy平均相应时间,读写数据时,数据返回给客户端的平均时间。一般以毫秒为单位(ms)。
92.mysql实例:安装了一套mysql数据库软件的机器,一台机器可以安装多个mysql实例,每个实例可以存在有多个数据库。
93.threads_running:同时运行中的sql数量,在集群压力较大时,同时执行的sql就会多,threads_running值就会很高,可以从mysql实例中实时获取。
94.本技术主要解决在不影响线上稳定性的前提下,通过提取线上实际访问的sql流量,准确的回放在mysql集群中的一台从库或者集群的镜像中,准确的评估出在用mysql集群的读写容量详情。
95.下面对本技术的数据库的压力测试方法进行详细阐述。
96.1、功能描述
97.1.1线上mysql集群需使用dbporoxy转发流量模式,用于收集访问到mysql的所有sql文本,将sql文本统一进行解析存储,最终用多个进程进行sql的并发注入,以实现完全模拟这个集群的线上实际访问。
98.1.2sql压力增加,将每条sql打上时间标签,在加压时将时间标签靠后的sql,压缩到当前时间执行。可以理解为解析1小时的sql文本10000条,在15分钟内执行完毕,sql压力为原来的4倍。
99.2、架构设计
100.2.1线上mysql-dbproxy访问架构,如图6所示,mysql采用主从架构,利用dbproxy实现读写分离,dbproxy在业务sql访问的时候,自动进行dml和ddl的识别,将dml操作发送至主库,来完成数据的增删改查,查询sql发送至从库,已实现数据的读写分离。
101.2.2dbproxy数据采集,因为在压测过程中,需要解析线上proxy日志生成回放sql,因为生成的sql量较为巨大,无法直接存储到内存中,需要先进行磁盘存储,因此考虑的存储选型有:mysql、本地磁盘。
102.将生成的sql写本地磁盘,相比将sql落库而言,时间缩短50%以上,且对机器的资源消耗也大幅降低,尤其是cpu和内存(解析1g文件,写磁盘,只需要5%不到的cpu和内存以及磁盘资源,但是写入数据库需要50%的cpu资源和10%左右的内存资源)因此,写本地磁盘要比写mysql速度更快,且不会有内存溢出的问题,本地磁盘进行存储解析数据是更优的选择。
103.因回放所需要的sql信息都存储在本地磁盘中,如果每次回放都需要去读取本地磁盘,就可能会因为读取sql这一步的消耗而导致回放结果不符合预期。因此为了解决这个问题,采取了预取数据策略,简单而言,会从数据库中预读取数据到内存中缓存,减少读取本地磁盘带来的影响。
104.在开始压测时,会预先读取指定数据量的回放sql信息缓存到内存中;然后定时检查内存中的sql队列中sql数量是否满足最小回放需求(sqlqueue中的sql数量大于等于当
前回放qps*10),如果不满足,则继续进行缓存;从而保证内存中有着后续回放需要使用的sql,减少读取带来的影响。
105.所采集的数据可以根据时间分割,采集需要时段的sql进行解析,更能体现出线上高峰或者低峰,不同时段的sql成分进行针对性压测。
106.3、压测策略
107.3.1写tps压测策略,因写入压测无法回放到线上从库,只能用这个集群的镜像进行压测,如图7所示为流量回放写压测结构图,可用线上备份恢复出一套完整线上mysql实例的镜像,一主一从即可,压测环境用完即刻回收。
108.压写流量水位时,需要关注以下两个指标(任一指标异常都说明当前回放压力过大)。
109.延迟:主从延迟是否大于10秒(用户发起任务时配置)。
110.平响:读平响是否大于n毫秒(用户发起任务时配置)。
111.压测写时,一开始以500tps压力(初始压力,用户发起任务时配置)开始发压,每过五分钟,都检查一次指标,如果发现指标正常,则加压,如果平响异常则进行减压。
112.加压策略:每次加压一倍,即每次加压500tps(初始tps)。
113.减压策略:如果触发平响异常,每次减压初始tps/5(例如初始tps为1000tps,则减压200tps),然后重新回放这五分钟的sql,如果指标仍然异常,则继续减压,直到指标正常,此时的压力就是此次回放的最高压力,如果后面还触发指标异常,继续减压,但是不会再加压力,继续回放后续的sql。
114.回放完成定义,首先需要在发压过程中需要能够触发指标异常,即到达一个最高点,说明已经到了一个极限值,后续压力不会在变大了,只会发生减压操作,直到回放全部的sql都不会在触发指标异常了,那么这个压力就是我们要的水位,记录这个值存储到元数据库进行记录。
115.3.2读qps压测策略,压测读qps水位时,会同时正常回放线上写流量,因此压测读流量水位时,需要关注以下两个指标(任一指标异常都说明当前回放压力过大)。
116.threads_running:mysql实例的threads_running值是否超过了cpu核心数(用户发起任务时配置)。
117.平响:读平响是否大于n毫秒(用户发起任务时配置)。
118.压测读时,一开始以1000qps压力(初始压力,用户发起任务时配置)开始发压,每过五分钟,都检查一次指标,如果发现指标正常,则加压,如果平响异常则进行减压。
119.加压策略:每次加压一倍,即每次加压1000qps(初始qps)。
120.减压策略:如果触发平响异常,每次减压初始qps/5(例如初始qps为1000qps,则减压200qps),然后重新回放这五分钟的sql,如果指标仍然异常,则继续减压,直到指标正常(此时的压力就是此次回放的最高压力,如果后面还触发指标异常,继续减压,但是不会再加压力),继续回放后续的sql。
121.回放完成定义,首先需要在发压过程中需要能够触发指标异常,即到达一个最高点,说明已经到了一个极限值,后续压力不会在变大了,只会发生减压操作,直到回放全部的sql都不会在触发指标异常了,那么这个压力就是我们要的水位,记录这个值存储到元数据库进行记录。
122.出于对读压测成本的考虑,也可以用线上空闲从库进行压力测试,这样可以不用考虑写入带来的影响,线上主从的数据就是实时同步的状态,只配置一台从库,线上全部读容量为从库个数乘以单台从库的压测容量。这样既保证了准确,也可以节省配置镜像环境带来的成本增加。如图8所示为读压测架构图。
123.4、环境回收
124.在压测完成后,镜像机器或者独立使用的从库机器自动进行回收,可用于下一次压测环境的机器调度。
125.本技术采集了线上实际访问的sql,进行解析,流量控制等,流量在空闲从库或集群镜像回放,完全覆盖业务访问数据库的所有场景,并且能灵活选取流量高峰时间,查看特定时段流量压力下的容量表现情况。以便获取更加精确的mysql容量情况,根据容量信息,系统相关维护人员可更加全面的了解集群使用情况。本技术采集线上的sql流量作为压测数据,sql文本在业务访问的dbproxy日志中获取,可根据需求选取时间段,进行流量控制。本技术容量数据产出策略,为dbproxy中返回的sql平响值、延迟、实例threads_running值为参考依据;延迟、sql可接受平响值可以让系统使用方提供,threads_runings值为集群实际cpu核心数。本技术读写压测可以用在线业务系统镜像作为压测载体,系统镜像可通过备份恢复,读压测可直接用集群中未使用或者临时扩容的从库进行压测,不用考虑在线实时写入带来的流量影响。本技术压测环境可随时回收再利用,保证压测并发数量,也就是压测系统可以同时进行多套mysql集群进行压测。
126.基于上述数据库的压力测试方法,本技术还提供了一种数据库的压力测试装置10。以下将结合图9对数据库的压力测试装置10进行详细描述。
127.图9示意性示出了根据本技术实施例的数据库的压力测试装置10的结构框图。
128.数据库的压力测试装置10包括获取模块1、确定模块2、注入模块3、检查模块4、第一调整模块5和第二调整模块6。
129.获取模块1,获取模块1用于执行操作s210:步骤一,获取数据库的历史操作指令。
130.确定模块2,确定模块2用于执行操作s220:步骤二,根据数据库的生产环境确定该数据库对应的压力测试环境。
131.注入模块3,注入模块3用于执行操作s230:步骤三,根据压力值向压力测试环境注入历史操作指令,其中,压力值为每秒向压力测试环境注入m条历史操作指令,m为大于1的整数。
132.检查模块4,检查模块4用于执行操作s240:步骤四,每隔t秒检查一次压力测试环境的压力指标,其中,t为大于等于1的整数。
133.第一调整模块5,第一调整模块5用于执行操作s250:步骤五,当压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至压力指标异常。
134.第二调整模块6,第二调整模块6用于执行操作s260:步骤六,当压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的压力指标均正常,将当前的压力值确定为数据库的标准压力值,其中,n为大于等于1的整数。
135.根据本技术实施例的数据库的压力测试装置10,通过将历史操作指令注入压力测试环境可以模拟实际的生产环境对操作指令的执行,通过调整或保持压力值以及每隔t秒检查一次压力测试环境的压力指标,可以确定出数据库的标准压力值,由此完成了对数据
库的压力测试。与现有技术相比,本技术的压力值可以做到控制和调整,测试人员可以根据压力指标的情况对压力值进行动态调整,从而可以提高压力测试的效率和灵活性。而且,本技术的历史操作指令为生产环境中的历史操作指令,与实际情况完全相符,可以完全覆盖数据库指令访问的复杂性,做到精准测试。另外,本技术只需对生产环境重现即可得到压力测试环境,易于实现,对人力成本、资源成本消耗较小,压力测试周期较短。
136.根据本技术的实施例,本技术还提供了一种电子设备、一种计算机可读存储介质和一种计算机程序产品。
137.图10示出了可以用来实施本技术的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本技术的实现。
138.如图10所示,设备800包括计算单元801,其可以根据存储在只读存储器(rom)802中的计算机程序或者从存储单元808加载到随机访问存储器(ram)803中的计算机程序,来执行各种适当的动作和处理。在ram 803中,还可存储设备800操作所需的各种程序和数据。计算单元801、rom 802以及ram 803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。
139.设备800中的多个部件连接至i/o接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
140.计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和处理,例如图像识别方法。例如,在一些实施例中,图像识别方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由rom 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到ram 803并由计算单元801执行时,可以执行上文描述的图像识别方法一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行图像识别方法。
141.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至
少一个输出装置。
142.用于实施本技术的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
143.在本技术的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
144.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
145.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、互联网和区块链网络。
146.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务端可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务(“virtual private server”,或简称“vps”)中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合区块链的服务器。
147.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本技术中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本技术公开的技术方案所期望的结果,本文在此不进行限制。
148.上述具体实施方式,并不构成对本技术保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本技术的精神和原则之内所作的修改、等同替换和改进等,均应包含在本技术保护范围之内。
技术特征:
1.一种数据库的压力测试方法,其特征在于,包括:步骤一,获取数据库的历史操作指令;步骤二,根据所述数据库的生产环境确定该数据库对应的压力测试环境;步骤三,根据压力值向所述压力测试环境注入所述历史操作指令,其中,所述压力值为每秒向所述压力测试环境注入m条所述历史操作指令,m为大于1的整数;步骤四,每隔t秒检查一次所述压力测试环境的压力指标,其中,t为大于等于1的整数;步骤五,当所述压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至所述压力指标异常;以及步骤六,当所述压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的所述压力指标均正常,将当前的所述压力值确定为所述数据库的标准压力值,其中,n为大于等于1的整数。2.根据权利要求1所述的方法,其特征在于,当所述步骤三第一次执行时,所述压力值为初始压力值,所述初始压力值根据测试时段获取的所述历史操作指令的数量确定,其中,所述测试时段为s分钟,所述s分钟获取的所述历史操作指令的数量为r条,所述初始压力值大于r/60s,s大于等于1,r为大于等于100的整数。3.根据权利要求1所述的方法,其特征在于,所述数据库包括主数据库和从数据库,所述主数据库用于写入数据,所述从数据库用于读取数据,所述压力测试包括写入性能测试和/或读取性能测试,当所述压力测试包括写入性能测试时,所述历史操作指令包括写入操作历史操作指令,当所述压力测试包括读取性能测试时,所述历史操作指令包括读取操作历史操作指令。4.根据权利要求3所述的方法,其特征在于,当所述压力测试包括写入性能测试时,所述压力指标包括延迟时间和/或第一平均响应时间,当所述压力指标包括所述延迟时间时,所述压力指标异常包括所述延迟时间大于等于第一阈值,当所述压力指标包括所述第一平均响应时间时,所述压力指标异常包括所述第一平均响应时间大于等于第二阈值,其中,所述延迟时间为向所述主数据库写入数据后,同步到所述从数据库的时间差,所述第一平均响应时间为向所述主数据库写入数据的第一平均响应时间;当所述压力测试包括读取性能测试时,所述压力指标包括指令同时运行数量和/或第二平均响应时间,当所述压力指标包括所述指令同时运行数量时,所述压力指标异常包括所述指令同时运行数量大于等于第三阈值,当所述压力指标包括所述第二平均响应时间时,所述压力指标异常包括所述第二平均响应时间大于等于第四阈值,其中,指令同时运行数量为所述读取操作历史操作指令在所述从数据库中同时运行的数量,所述第二平均响应时间为向所述从数据库读取数据的第二平均响应时间。5.根据权利要求2所述的方法,其特征在于,所述加压策略为每次加压所述初始压力值的一倍,所述减压策略为每次减压所述初始压力值的q%,其中,q大于等于1且小于等于80。6.根据权利要求3所述的方法,其特征在于,当所述压力测试包括写入性能测试时,根据所述数据库的生产环境确定该数据库对应
的压力测试环境,包括:在镜像服务器上配置所述数据库的主数据库的镜像环境;以及将所述主数据库的镜像环境作为所述压力测试环境;当所述压力测试包括读取性能测试时,根据所述数据库的生产环境确定该数据库对应的压力测试环境,包括:复制所述数据库的从数据库;以及将所述复制的从数据库作为所述压力测试环境;当所述压力测试包括写入性能测试和读取性能测试时,根据所述数据库的生产环境确定该数据库对应的压力测试环境,包括:在镜像服务器上配置所述数据库的镜像环境,其中,所述数据库的镜像环境包括所述主数据库和所述从数据库的镜像环境;以及将所述数据库的镜像环境作为所述压力测试环境。7.根据权利要求1~6中任一项所述的方法,其特征在于,所述根据压力值向所述压力测试环境注入所述历史操作指令,包括:根据所述压力值缓存所述历史操作指令到内存中,其中,每次缓存的所述历史操作指令大于等于所述压力值;以及从所述内存中提取所述历史操作指令注入所述压力测试环境。8.一种数据库的压力测试装置,其特征在于,包括:获取模块,所述获取模块用于执行步骤一,获取数据库的历史操作指令;确定模块,所述确定模块用于执行步骤二,根据所述数据库的生产环境确定该数据库对应的压力测试环境;注入模块,所述注入模块用于执行步骤三,根据压力值向所述压力测试环境注入所述历史操作指令,其中,所述压力值为每秒向所述压力测试环境注入m条所述历史操作指令,m为大于1的整数;检查模块,所述检查模块用于执行步骤四,每隔t秒检查一次所述压力测试环境的压力指标,其中,t为大于等于1的整数;第一调整模块,所述第一调整模块用于执行步骤五,当所述压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至所述压力指标异常;以及第二调整模块,所述第二调整模块用于执行步骤六,当所述压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的所述压力指标均正常,将当前的所述压力值确定为所述数据库的标准压力值,其中,n为大于等于1的整数。9.一种电子设备,其特征在于,包括:一个或多个处理器;一个或多个存储器,用于存储可执行指令,所述可执行指令在被所述处理器执行时,实现根据权利要求1~7中任一项所述的方法。10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有可执行指令,该指令被处理器执行时实现根据权利要求1~7中任一项所述的方法。
技术总结
本申请公开一种数据库的压力测试方法、装置、电子设备和可读存储介质,应用于大数据技术领域。数据库的压力测试方法包括:步骤一,获取数据库的历史操作指令;步骤二,根据数据库的生产环境确定该数据库对应的压力测试环境;步骤三,根据压力值向压力测试环境注入历史操作指令;步骤四,每隔t秒检查一次压力测试环境的压力指标;步骤五,当压力指标正常时,根据加压策略调整压力值,重复步骤三和步骤四,直至压力指标异常;以及步骤六,当压力指标异常时,根据减压策略调整压力值,重复步骤三和步骤四,直至连续n个t秒检查的压力指标均正常,将当前的压力值确定为数据库的标准压力值。所述方法具有效率高、灵活性好和测试周期较短的优点。点。点。
技术研发人员:王朋 陈存利 骆维
受保护的技术使用者:度小满科技(北京)有限公司
技术研发日:2023.03.23
技术公布日:2023/7/18
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
