数据库性能测试方法、设备及存储介质与流程

文档序号:30614995发布日期:2022-07-02 00:43阅读:80来源:国知局
1.本技术涉及数据库
技术领域
:,尤其涉及一种数据库性能测试方法、设备及存储介质。
背景技术
::2.acid,是指数据库管理系统(databasemanagementsystem,dbms)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个事务特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。3.acid正确性对于数据库系统的重要性不言而喻。当我们开发新的数据库引擎的时候,最重要的就是检测数据库的acid特性。目前,已有检测方案的检测结果可靠性较低。技术实现要素:4.鉴于上述问题,提出了本技术以提供一种解决上述问题或至少部分地解决上述问题的数据处理方法、设备及存储介质。5.于是,在本技术的一个实施例中,提供了一种数据库性能测试方法,适用于测试设备,其中,包括:6.请求数据库服务器在其所运行的数据库中创建用于性能测试的数据库表;7.设置有关所述数据库表中记录的逻辑关系;所述逻辑关系包括所述数据库表中同一条记录中字段间的第一逻辑关系;8.向所述数据库服务器发送针对所述数据库表的事务请求,以由所述数据库服务器执行所述事务请求对应的事务,其中,所述事务请求是基于所述逻辑关系生成的;9.根据针对所述数据库表的查询结果,确定所述数据库表是否满足所述逻辑关系,得到第一确定结果;10.根据所述第一确定结果,确定所述数据库是否满足事务特性。11.在本技术的又一实施例中,提供了一种电子设备。该电子设备,包括:存储器和处理器,其中,12.所述存储器,用于存储程序;13.所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以实现上述任一项所述的数据库性能测试方法。14.在本技术的又一实施例中,提供了一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述任一项所述的数据库性能测试方法。15.本技术实施例提供的技术方案中,创建专门用于性能测试的数据库表;并配置数据库表中记录的逻辑关系;基于该逻辑关系向数据库服务器发送事务请求,以由数据库服务器针对数据库表执行相应事务;然后根据针对数据库表的查询结果,确定数据库表中相应记录是否满足上述逻辑关系,进而确定数据库是否满足事务特性。通过查询若发现数据库表中相应记录不满足上述逻辑关系,说明数据库打破了数据库事务特性;若未发现数据库表中相应记录满足上述逻辑关系,说明数据库保持有数据库事务特性。本技术实施例提供的检验方案具有较高的可靠性。附图说明16.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。17.图1为本技术一实施例提供的数据库性能测试系统的示意图;18.图2为本技术一实施例提供的数据库性能测试方法的流程示意图;19.图3为本技术一实施例提供的信息表示例图;20.图4为本技术一实施例提供的电子设备的结构框图。具体实施方式21.为了使本
技术领域
:的人员更好地理解本技术方案,下面将根据本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。22.此外,在本技术的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。23.在对本技术实施例提供的数据库性能测试方法进行介绍前,先对本技术实施例提供的方法所涉及的数据库性能测试系统进行介绍。如图1所示,该系统可包括:测试设备10和数据库服务器20。其中,24.测试设备10用于:请求数据库服务器在其所运行的数据库中创建用于性能测试的数据库表;设置有关所述数据库表中记录的逻辑关系;所述逻辑关系包括所述数据库表中同一条记录中字段间的第一逻辑关系;向所述数据库服务器发送针对所述数据库表的事务请求,其中,所述事务请求是基于所述逻辑关系生成的;根据针对所述数据库表的查询结果,确定所述数据库表是否满足所述逻辑关系,以得到第一确定结果;根据所述第一确定结果,确定所述数据库是否满足事务特性。25.数据库服务器20用于:根据接收到的事务请求执行所述事务请求对应的事务。26.该测试设备可以为终端,也可以为服务端。其中,服务端可以是常用服务器或虚拟服务器等,本技术实施例对此不作具体限定。27.上述数据库服务器20也可以是常用服务器或虚拟服务器等,本技术实施例对此不作具体限定。28.上述系统中测试设备10、数据库服务器20的内部处理过程以及两者之间的交互过程将在下述实施例中详细介绍。29.图2示出了本技术一实施例提供的数据库性能测试的流程示意图。该方法适用于测试设备,也即该方法的执行主体为测试设备。该测试设备可以为终端,也可以为服务端。其中,服务端可以是常用服务器、云端或虚拟服务器等,本技术实施例对此不作具体限定。如图2所示,该方法包括:30.101、请求数据库服务器在其所运行的数据库中创建用于性能测试的数据库表。31.102、设置所述数据库表中记录的逻辑关系。32.103、向所述数据库服务器发送针对所述数据库表的事务请求,以由所述数据库服务器执行所述事务请求对应的事务。33.其中,所述事务请求是基于所述逻辑关系生成的。34.104、根据针对所述数据库表的查询结果,确定所述数据库表是否满足所述逻辑关系,以得到第一确定结果。35.105、根据所述第一确定结果,确定所述数据库是否满足事务特性。36.上述101中,在一实例中,测试设备可根据用户导入的性能测试配置文件,确定用于性能测试的数据库表的表结构信息;再根据表结构信息,生成数据库表建立请求;将数据库表建立请求发送给数据库服务器;数据库服务器接收到数据库表建立请求后,根据数据库表建立请求中携带的用于性能测试的数据库表的表结构信息,在数据库服务器所运行的数据库中创建用于性能测试的数据库表。其中,表结构信息可包括但不限于:所述数据库表的表名、字段名、字段类型以及索引。其中,字段类型包括:数值类型、字符串类型、日期时间类型。其中,数值类型还可细分为整型、浮点型、定点型。37.需要说明的是,本技术实施例中的数据库表是专门用于性能测试的数据库表。38.上述102中,数据库表由表名、表中的字段以及表的记录三个部分组成的。其中,数据库表中的一行数据就是一条记录。每条记录都包括数据库表的多个字段中各字段的值。所述逻辑关系包括所述数据库表中同一条记录中字段间的第一逻辑关系。39.本技术实施例所涉及的各逻辑关系具体可以为函数关系(或称映射关系)。函数关系所涉及的至少两个字段分别为函数关系对应的函数中的函数变量。40.数据库事务(transaction,简称事务)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。数据库事务可分为:写入事务、更新事务、删除事务以及查询事务。其中,写入事务用于在数据库表中插入新的记录;更新事务用于对数据库表中已有记录的更改;删除事务用于对数据库表中已有记录的删除;查询事务用于对数据库表执行的查询操作。可见,写入事务、更新事务以及删除事务均对数据库表做了修改,可统称为修改事务。41.数据库表包括多个字段,可根据多个字段或所述多个字段中多个非日期时间类型字段,确定出多个字段组;每个字段组包括至少两个字段。上述逻辑关系可包括:数据库表中同一条记录中所述多个字段组中各字段组所包含的至少两个字段之间的第一逻辑关系。也就是说,上述逻辑关系中包括多个第一逻辑关系,分别对应于多个字段组。其中,上述非日期时间类型字段具体可包括数值类型字段和字符串类型字段。42.实际应用时,可根据实际需要来设置上述各个字段组内至少两个字段之间的第一逻辑关系。图3所示的表格中说明部分举例介绍了同一条记录中至少两个字段之间的第一逻辑关系。例如:字段row_pk与字段group_id之间的第一逻辑关系是:group_id=row_pk/group_row_num,其中,group_row_num的大小可根据实际需要来设置,其大小用于确定一个事务所涉及的记录数;再例如:字段c1、字段c2以及字段c3三者之间的第一逻辑关系是:c3=c1+c2;又例如:字段c5、字段row_pk、字段c1、字段c2以及字段c3五者之间的第一逻辑关系是:c5=string(row_pk)+string(c1)+string(c2)+string(c3)。43.上述103中,基于所述逻辑关系生成针对数据库表的事务请求。事务请求中可携带有至少一条语句。本技术实施例中各语句可以为sql(structuredquerylanguage,结构化查询语言)语句,具体地,可以为dml(datamanipulationlanguage,数据操纵语言)sql。dml是用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。44.将生成的针对数据库表的事务请求发送给数据库服务器,数据库服务器接收到所述事务请求后,根据所述事务请求确定所述事务请求对应的事务;并执行所述事务请求对应的事务。上述事务请求具体可包括:写入事务请求、更新事务请求、删除事务请求和/或查询事务请求。其中,写入事务请求对应的事务为写入事务、更新事务请求对应的事务为更新事务、删除事务请求对应的事务为删除事务、查询事务请求对应的事务为查询事务。45.上述104中,上述查询结果可以是针对数据库表中记录的查询结果,根据针对数据库表中记录的查询结果,确定所述数据库表中该记录是否满足所述逻辑关系,得到第一确定结果。46.上述105中,若第一确定结果显示数据库表不满足所述逻辑关系,确定数据库不满足事务acid特性。47.若第一确定结果显示数据库表满足所述逻辑关系,则继续对所述数据库进行性能测试。48.数据库性能测试可以在确定出数据库不满足事务acid特性时结束、在测试时长达到预设时长时结束或者在用户触发结束操作时结束,本技术对此不作具体限定。49.本技术实施例提供的技术方案中,创建专门用于性能测试的数据库表;并配置数据库表中记录的逻辑关系;基于该逻辑关系向数据库服务器发送事务请求,以由数据库服务器针对数据库表执行相应事务;然后根据针对数据库表的查询结果,确定数据库表中相应记录是否满足上述逻辑关系,进而确定数据库是否满足事务特性。通过查询若发现数据库表中相应记录不满足上述逻辑关系,说明数据库打破了数据库事务特性;若未发现数据库表中相应记录满足上述逻辑关系,说明数据库保持有数据库事务特性。本技术实施例提供的检验方案具有较高的可靠性。50.在一种可实现的方案中,所述数据库表包括多个字段;所述多个字段中包括主键字段。上述102中“设置所述数据库表中同一条记录中字段间的第一逻辑关系”,可采用如下步骤来实现:51.1021、从所述多个字段中确定出第一字段。52.其中,所述第一字段区别于所述主键字段。53.1022、设置所述数据库表中同一记录中所述第一字段与所述主键字段之间的第一函数关系。54.其中,在同一记录中,所述第一字段的值由所述主键字段的值以及所述第一函数关系确定;所述第一逻辑关系包括所述第一函数关系。55.实际应用时,为了方便后续查询,测试设备可根据主键自增算法,针对每一个写入事务请求所请求写入的记录分配相应的主键的值。56.上述第一字段的数量可以为多个,具体数量可根据实际需要来设置,本技术实施例对此不作具体限定。图3所示的表格中,group_id、c1、c2、c3、c4、c5以及c9均为上述第一字段,因为group_id、c1、c2、c3、c4、c5、c9均与主键row_pk存在直接或间接关系,这种直接或间接关系也即是上述第一函数关系。57.考虑到实际应用中,有的数据库可能会包括二进制大对象类型(blob)的字段,不同字段类型对应的数据库处理逻辑是不同的,为了更加全面的验证数据库的事务特性。所述多个字段中还可包括:二进制大对象类型字段。相应的,上述102中“设置所述数据库表中同一条记录中字段间的第一逻辑关系”,可采用如下步骤来实现:58.1023、从所述多个字段中确定出第三字段。59.其中,所述第三字段区别于所述主键字段以及所述第一字段。60.1024、设置所述数据库表中同一记录中所述第三字段与所述二进制大对象类型字段之间的第三函数关系。61.其中,在同一记录中,所述第三字段的值由所述二进制大对象类型字段的值以及所述第三函数关系确定;所述第一逻辑关系还包括所述第三函数关系。62.图3所示的表格中,c7为二进制大对象类型字段,c8是第三字段。63.此外,上述多个字段中还可包括日期时间类型字段。图3所示的表格中,c6为日期时间类型字段。64.考虑到实际应用中,通常会存在一个事务执行有关多条记录的操作,因此,不仅需要验证同一条记录内的逻辑关系不被打破,还需要验证同一事务所执行的多条记录之间的逻辑关系不被打破,这样才能够更加全面验证整个数据库的事务acid特性。因此,在实际应用时,上述逻辑关系还可同时包括:所述数据库表中字段在所述数据库表中同一事务对应的至少两条记录之间的第二逻辑关系。65.可选的,上述102中“设置所述数据库表中字段在所述数据库表中同一事务对应的至少两条记录之间的第二逻辑关系”,可采用如下步骤来实现:66.1025、从所述多个字段中确定出至少一个第二字段。67.其中,所述第二字段区别于所述主键字段以及所述第一字段。第二字段还区别于第三字段。其中,至少一个第二字段的数量可以为一个或至少两个。68.1026、设置所述数据库表中所述至少一个第二字段在所述数据库表中同一事务对应的至少两条记录之间的第二函数关系。69.其中,所述第二逻辑关系包括所述第二函数关系。70.实际应用时,多个字段中还可包括:用于标识记录所属组的组字段,例如:图3所示的表格中group_id。其中,属于同一组的至少两条记录也即是属于同一事务的至少两条记录,或者说,属于同一事务的至少两条记录中组字段的值相同。71.为了增加约束,提高验证的准确性,上述1026中,设置所述数据库表中所述至少一个第二字段在所述数据库表中同一事务对应的至少两条记录之间的第三函数关系,具体可包括:设置所述数据库表中所述至少一个第二字段以及组字段在所述数据库表中同一事务对应的至少两条记录之间的第二函数关系。例如:图3所示的表格中,至少一个第二字段包括:s1、s2以及s3,组字段包括:group_id。第二函数关系为:∑sum(s1+s2+s3)=group_id,其中,求和符号∑是对数据库表中同一事务对应的group_row_num条记录中各记录对应的sum(s1+s2+s3)的求和。再例如:图3所示的表格中,至少一个第二字段包括:s4、s5以及s6,组字段包括:group_id。第二函数关系为:∑sum(s4+s5+s6)=group_id*f1,其中,求和符号∑是对数据库表中同一事务对应的group_row_num条记录中各记录对应的sum(s4+s5+s6)的求和。其中,f1为浮点数65536/10000;s4=s1*f1、s5=s2*f1、s6=s3*f1。72.上述同一事务具体可以是同一写入事务,一个写入事务包括写入至少两条记录的操作。需要说明的是,上述组字段的设置可方便后续确定出哪些记录属于同一写入事务,这样可方便后续针对数据库表中同一写入事务对应的至少两条记录进行修改、删除或查询。数据库表中同一写入事务对应的至少两条记录属于同一组。73.下面将举例介绍如何基于逻辑关系生成针对数据库表的事务请求。74.为了简化整个流程,对于写入事务请求而言,可事先确定每个写入事务请求(或者说每个事务)对应的记录数均为预设数量个,例如:图3所示的表中的group_row_num;且数据库表中每条记录中主键字段的值是自增的。也即是,测试设备可根据主键自增算法,确定写入事务请求对应的多条记录中各记录的主键字段的值;根据所述多条记录中各记录的主键字段的值、上述第一函数关系、上述第二函数关系以及第三函数关系,确定多条记录中第一字段和第二字段的值。具体地,可根据所述多条记录中各记录的主键字段的值以及上述第一函数关系,确定多条记录中各记录的第一字段的值;随机确定二进制大对象类型字段的值;根据二进制大对象类型字段的值以及第二函数关系,确定第三字段的值;可根据所述多条记录中各记录的主键字段的值以及上述第二函数关系,确定多条记录中各记录的第二字段的值。根据所述多条记录中各记录所包括的多个字段的值,生成多条写入语句;其中,每一条写入语句用于写入一条记录;根据多条写入语句生成写入事务请求。75.沿用图3所示的表格,写入事务请求可包括:76.insertignoreintotable_name(row_pk,group_id,c1,c2,c3,c4,c5,c6,c7,c8,c9,s1,s2,s3,s4,s5,s6)values(xxx,xxx,xxx,....);77.如果一组对应3条记录,则写入事务请求包括3条上述写入或插入语句。78.对于更新事务请求而言,确定目标更新组;可根据上述第二函数关系,随机生成目标更新组中至少两条记录中各记录的至少一个第二字段的值;其中,随机生成的目标更新组中至少两条记录中各记录的所述至少一个第二字段的值以及所述组字段的值满足上述第二函数关系。79.沿用图3所示的表格,更新事务请求中包括:80.updatetable_namesets1=%d,s2=%d,s3=%d,s4=%f,s5=%f,s6=%fwhererow_pk=%dandgroup_id=%d;81.如果一组有3行记录,则更新事务请求中包括3条上述更新语句。82.对于删除事务请求而言,83.deletefromtable_namewheregroup_id=%d84.对于查询事务请求而言,可根据第一逻辑关系生成查询事务请求。沿用图3所示的表格,查询事务请求可包括:85.查询语句1、selectc1=row_pk%2&&c2=row_pk%3&&c3=c1+c2&&((c3&1&&c4=1)||(c3=(c3》》1)《《1&&c4=0))&&concat(row_pk,c1,c2,c3)=c5&&md5(c7)=c8&&concat(row_pk)=c9fromconsensuswhererow_pk=?86.注:该查询语句使用的是row_pk这个主键索引。87.查询语句2、selectc1=row_pk%2&&c2=row_pk%3&&c3=c1+c2&&((c3&1&&c4=1)||(c3=(c3》》1)《《1&&c4=0))&&concat(row_pk,c1,c2,c3)=c5&&md5(c7)=c8&&concat(row_pk)=c9fromconsensuswherec5=?88.注:该查询语句使用的是c5这个二级索引。89.查询语句3、selectc1=row_pk%2&&c2=row_pk%3&&c3=c1+c2&&((c3&1&&c4=1)||(c3=(c3》》1)《《1&&c4=0))&&concat(row_pk,c1,c2,c3)=c5&&md5(c7)=c8&&concat(row_pk)=c9fromconsensuswherec1=?andc2=?90.注:该查询语句使用的是c1和c2的联合二级索引。91.查询语句4、selectsum(s1+s2+s3)=group_idfromconsensuswheregroup_id=?92.查询语句5、selectsum(s4+s5+s6)=group_id*65536/10000fromconsensuswheregroup_id=?93.上述查询语句4和查询语句5分别用来查询同一个group_id内的(s1,s2,s3,group_id)、(s4,s5,s6,group_id)是否满足上述第一函数关系。94.一个查询事务请求中可包括上述查询语句1到5中的一个或多个,本技术实施例对比不作具体限定。上述符号?处的值可根据当前数据库表中的记录来随机确定。95.实际应用中,数据库针对不同的查询索引的处理逻辑也是不同的,为了能够对数据库进行更加全面更加有效的验证,可基于不同的查询索引以及所述逻辑关系,生成多个查询事务请求。将多个查询事务请求发送给数据库服务器。96.此外,数据库中针对不同的数据类型的处理逻辑是不同的。因此,上述步骤101中“请求数据库服务器在其所运行的数据库中创建用于性能测试的数据库表”,具体可采用如下步骤来实现:97.1011、确定所述数据库服务器所运行的数据库所支持的数据类型。98.1012、结合数据库服务器所运行的数据库所支持的数据类型,生成用于性能测试的数据库表的表结构信息。99.其中,所述数据库表中包括所述数据库所支持的数据类型对应的字段;100.1013、将所述表结构信息发送给所述数据库服务器,以由所述数据库服务器根据所述表结构信息创建所述数据库表。101.上述1011中,可确定数据库服务器所运行的数据库所支持的全部数据类型。102.上述1012中,数据库表中包括所述数据库所支持的全部数据类型对应的字段。103.上述1013中,可基于表结构信息生成创建请求。创建请求中包括创建语句,沿用图3所示的表格,相应的创建语句为:104.createtable`consensus_001`(105.row_pkintcomment'主键,自增',106.group_idintcomment'row_pk/group_row_num',107.c1intcomment'row_pk%2',108.c2intcomment'row_pk%3',109.c3intcomment'c1+c2',110.c4intcomment'c3为偶数,则为null;为奇数,1',111.c5varchar(100)comment'string(row_pk)+string(c1)+string(c2)+string(c3)',112.c6datetime,113.c7blobcomment'尽量长',114.c8char(100)comment'c7的checksum',115.c9char(100)comment'string(row_pk)',116.s1intcomment'同一group内,多行∑sum(s1+s2+s3)=group_id',117.s2intcomment'同一group内,多行∑sum(s1+s2+s3)=group_id',118.s3intcomment'同一group内,多行∑sum(s1+s2+s3)=group_id',119.s4decimal(16,4)comment's4=s1*65536/10000,同一group内,多行∑sum(s4+s5+s6)=group_id*65536/10000',120.s5decimal(16,4)comment's5=s2*65536/10000,同一group内,多行∑sum(s4+s5+s6)=group_id*65536/10000',121.s6decimal(16,4)comment's6=s3*65536/10000,同一group内,多行∑sum(s4+s5+s6)=group_id*65536/10000',122.primarykey(`row_pk`),123.key`idx_group`(`group_id`),124.key`idx_c5`(`c5`),125.key`idx_c6`(`c6`),126.key`idx_c9`(`c9`),127.key`idx_c1_c2`(`c1`,`c2`)128.)129.实际应用中,当开发新的数据库引擎的时候,最重要的就是验证在不同极端场景下,数据库的acid是否会打破,比如一边产生数据库的压力,一边进行网络故障的模拟,是否在存在压力或网络故障的时候,事务没有按照预期回滚而产生了脏数据?或者当我们对数据库进行变更的时候,并发的读写操作是否会读到错误版本的数据?如果出现这几种问题,那这个数据库肯定是存在致命问题的。因此,本方案可与压力测试、网络故障模拟等进行融合。130.在一实例中,上述103中“向所述数据库服务器发送针对所述数据库表的事务请求”,可采用如下步骤来实现:131.1031、确定针对所述数据库的压力测试策略。132.1032、按照所述压力测试策略,向所述数据库服务器发送针对所述数据库表的事务请求。133.测试设备可获取用户输入的压力测试任务;根据压力测试任务来确定压力测试策略。压力测试策略中可包括但不限于请求并发数、多种类型事务请求中各类型事务请求的占比、时间间隔以及压力测试时长等。具体地,上述请求并发数为q;写入事务请求的占比为a%,更新事务请求的占比为b%,删除事务请求的占比为c%,查询事务请求的占比为d%,其中,a+b+c+d=100;时间间隔为t,压力测试时间为t。134.可根据压力测试策略以及逻辑关系,生成并发的多个事务请求;将所述多个事务请求并发地发送给数据库服务器。135.举例来说:上述请求并发数为100;写入事务请求的占比为40%,更新事务请求的占比为5%,删除事务请求的占比为5%,查询事务请求的占比为50%;预设时间间隔为1min,压力测试时间为2h。测试设备可在第一时刻生成并发的100个事务请求,并将这100个事务请求并发发送给数据库服务器;这100个事务请求均是根据逻辑关系生成的;这100个事务请求中有40个写入事务请求,5个更新事务请求,5个删除事务请求;50个查询事务请求。若根据查询事务请求的查询结果没有确定出数据库不满足事务特性且压力测试时长还未达到2h,则在距离第一时刻1min后,再次生成并发的100个事务请求,并将这100个事务请求并发发送给数据库服务器。136.实际应用中,因各种原因,数据库的回滚操作也是经常出现的,因此,需要验证数据库在各种回滚操作下是否依旧保持有事务特性。具体地,上述方法,还可包括:137.106、根据第一预设比例,将多个所述事务请求划分为第一组事务请求和第二组事务请求。138.107、针对所述第一组事务请求中各事务请求,向所述数据库服务器发送提交请求,以由所述数据库服务器执行相应的提交操作。139.108、针对所述第二组事务请求中各事务请求,向所述数据库服务器发送回滚请求,以由所述数据库服务器执行相应的回滚操作。140.其中,上述事务请求为多个,多个事务请求可以是并发的多个事务请求。141.上述106中,第一预设比例的大小可根据实际需要来确定,本技术实施例对此不作具体限定。142.上述107中,第一组事务请求中包括第一事务请求,针对第一事务请求,向数据库服务器发送提交请求,数据库服务器接收到提交请求后执行第一事务请求对应的事务的提交操作。143.上述108中,第二组事务请求中包括第二事务请求,针对第二事务请求,向数据库服务器发送回滚请求,数据库服务器接收到回滚请求后执行第二事务请求对应的事务的回滚操作。144.可选的,上述方法还可包括:145.109、根据第二预设比例,从所述多个事务请求中确定出至少一个目标事务请求。146.110、所述目标事务请求发送给所述数据库服务器之前,在所述目标事务请求中添加查询语句。147.111、根据所述查询语句的查询结果,确定所述目标事务请求对应的事务针对所述数据库的修改结果对所述目标事务请求对应的事务是否可见。148.当数据库服务器执行目标事务请求对应的事务时,目标事务请求中原本包含的多个语句的执行排序先于上述查询语句。若查询结果显示数据库表满足所述逻辑关系或查询结果本身满足所述逻辑关系,确定所述目标事务请求对应的事务针对所述数据库的修改结果对所述目标事务请求对应的事务可见;若查询结果显示数据库表不满足所述逻辑关系或查询结果本身不满足所述逻辑关系,则说明所述目标事务请求对应的事务针对所述数据库的修改结果对所述目标事务请求对应的事务不可见。149.实际应用中,数据库需保证未提交事务针对数据库的修改内容对其他事务不可见的,也即事务隔离性;但是,数据库还需保证未提交事务针对数据库的修改内容对本事务是可见的。一旦未提交事务针对数据库表的修改内容对本事务不可见,说明数据库出现了严重问题,需暂停测试,排查原因并改善。150.在一种可实现的方案中,所述事务请求为多个;多个所述事务请求中包括修改事务请求和查询事务请求;上述104中“根据针对所述数据库表的查询结果,确定所述数据库表是否满足所述逻辑关系”,包括:151.1041、根据所述查询事务请求对应的查询结果,确定所述数据库表是否满足所述逻辑关系。152.由于事务查询事务请求是基于逻辑关系生成,因此,事务查询事务请求中的查询语句具体可以为查询判断语句,该查询判断语句中包含有上述逻辑关系中第一逻辑关系和/或第二逻辑关系,其查询结果为是和否中的一个。当查询结果为否时,确定数据库表不满足逻辑关系。当查询结果为是时,确定数据库表满足逻辑关系。153.在另一种可实现的方案中,上述104中“根据针对所述数据库表的查询结果,确定所述数据库表是否满足所述逻辑关系”,包括:154.1041、生成针对所述数据库表的查询事务请求。155.1042、将所述查询事务请求发送给所述数据库服务器,以由所述数据库服务器执行查询操作得到所述查询事务请求的查询结果。156.1043、确定所述数据库服务器返回的所述查询事务请求的查询结果是否满足所述逻辑关系。157.1044、若所述查询事务请求的查询结果不满足所述逻辑关系,确定所述数据库表不满足所述逻辑关系。158.本技术实施例中,查询事务请求用于获取数据库表中目标查询记录的字段的值。这样,测试设备可根据查询结果中目标查询记录的字段的值,确定查询结果是否满足上述逻辑关系。若所述查询事务请求的查询结果不满足所述逻辑关系,确定所述数据库表不满足所述逻辑关系。159.可选的,上述103中“向所述数据库服务器发送针对所述数据库表的事务请求”,可包括:160.112、确定网络故障模拟策略。161.113、按照所述网络故障模拟策略,向所述数据库服务器发送针对所述数据库表的事务请求。162.上述网络故障模拟策略中可包括故障间隔、故障持续时长、各种类型的网络故障对应的模拟参数;其中,至少两种类型可包括网络延时类型和/或网络丢包类型;网络延时类型的网络故障对应的模拟参数可包括预设延时时长;网络丢包类型的网络故障对应的模拟参数可包括预设丢包率。163.可基于逻辑关系生成针对数据库表的多个事务请求。在一实例中,可根据预设延时时长,对多个事务请求进行延迟处理。具体地,当延时时长达到预设延时时长时,将多个事务请求发送给数据库服务器。在另一实例中,可根据预设丢包率,对多个事务请求进行丢包处理,将剩下的事务请求发送给数据库服务器。例如:多个事务请求的数量为100,预设丢包率为20%,则对在100个事务请求中删除20个事务请求,将剩下的80个事务请求发送给数据库服务器。164.实际应用时,上述压力测试策略和网络故障策略可同时使用。具体地,可按照压力测试策略以及逻辑关系,生成并发的多个事务请求;按照网络故障策略,对多个事务请求执行延迟处理或丢包处理。165.此外,为了验证本技术实施例提供的验证方案有效,可基于sysbench进行如下实验:166.可事先根据上述逻辑关系在数据库表中生成多条记录。启动压力测试后,可手动去模拟异常:167.1、模拟同一行数据有问题:168.沿用图3所示的表格,手动将数据库表中主键字段的值为1的记录中c3的值修改成错误值,使得无法满足c3=c1+c2。169.后续,系统报错:error:table-》consensus_1pk‑‑》1notconsensus!!!,且程序退出。170.2模拟多行之间数据错误171.沿用图3所示的表格,手动将数据库表中组字段的值为0的一行记录的s3的值修改成错误值,使得无法满足同一个group_id下的∑sum(s1+s1+s3)==group_id。172.后续,系统报错:error:table-》consensus_1group‑‑》0notconsensus!!!,且程序退出。173.通过这个实验结果,可确定本技术实施例提供的验证方案是有效的。确定出验证方案是有效的后,再对数据库进行正式的压力测试和acid校验。174.综上所述,本技术实施例提供的自动校验数据库acid特性的压力生成算法,可以在进行数据库压力测试的过程中,及时发现数据库acid的问题,另外本技术实施例提供的验证方案中的压力也可以和数据库各种极限压力测试,故障模拟的压力混合使用,为验证数据库正确性,稳定性提供了很好的帮助。总的来说,本技术实施例提供的测试方案可以实现边压测边acid校验,这样可以较好地判断数据库对事务acid的支持。175.图4示出了本技术一实施例提供的电子设备的结构示意图。如图4所示,所述电子设备包括存储器1101以及处理器1102。存储器1101可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器1101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。176.所述存储器1101,用于存储程序;177.所述处理器1102,与所述存储器1101耦合,用于执行所述存储器1101中存储的所述程序,以实现上述各方法实施例提供的数据库性能测试方法。178.进一步,如图4所示,电子设备还包括:通信组件1103、显示器1104、电源组件1105、音频组件1106等其它组件。图4中仅示意性给出部分组件,并不意味着电子设备只包括图4所示组件。179.相应地,本技术实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各方法实施例提供的数据库性能测试方法的步骤或功能。180.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。181.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。182.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1