CN114610626A - 面向关系型数据库的事务隔离性自动化测试方法及装置 - Google Patents
面向关系型数据库的事务隔离性自动化测试方法及装置 Download PDFInfo
- Publication number
- CN114610626A CN114610626A CN202210252064.5A CN202210252064A CN114610626A CN 114610626 A CN114610626 A CN 114610626A CN 202210252064 A CN202210252064 A CN 202210252064A CN 114610626 A CN114610626 A CN 114610626A
- Authority
- CN
- China
- Prior art keywords
- statement
- database
- transaction
- result
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000002955 isolation Methods 0.000 title claims abstract description 51
- 238000012360 testing method Methods 0.000 title claims abstract description 37
- 230000004048 modification Effects 0.000 claims abstract description 47
- 238000012986 modification Methods 0.000 claims abstract description 47
- 238000000034 method Methods 0.000 claims abstract description 37
- 230000000903 blocking effect Effects 0.000 claims description 21
- 230000008569 process Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 8
- 230000007717 exclusion Effects 0.000 claims description 4
- 238000010998 test method Methods 0.000 claims description 4
- 230000007547 defect Effects 0.000 abstract description 10
- 238000001514 detection method Methods 0.000 abstract 1
- 238000012795 verification Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 241000270295 Serpentes Species 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000001172 regenerating effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000003997 social interaction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种面向关系型数据库的事务隔离性自动化测试方法及装置,所述方法包括:针对目标关系型数据库,构建测试输入;基于数据库修改历史对测试输入进行执行结果推断,以获取期望结果;依据所述语句交叉执行顺序,将所述事务对提交给待测数据库执行,以获取执行结果;比较所述期望结果与执行结果,以生成测试报告。本发明通过测试发现事务隔离缺陷,能够覆盖目标关系型数据库中多样的数据类型、数据约束、语句类型等特性,提高数据库事务隔离缺陷的检测效率。
Description
技术领域
本发明属于软件技术领域,尤其涉及一种面向关系型数据库的事务隔离性自动化测试方法及装置。
背景技术
数据库管理系统(Database-Management System,DBMS)已经成为当前网络应用的关键基础设施,被广泛应用于航空、金融、社交等各个领域。其中,目前最常用的数据库系统类型是关系型数据库。关系型数据库以关系模型(Relational Model)为基础,通过表的形式为用户提供了数据的抽象视图,同时隐藏了数据库存储和维护的具体细节,并通过基于关系代数的结构化查询语言(Structured Query Language,SQL)为用户提供了一种方便而高效的存储与检索数据信息的方法。
除此以外,对事务的支持也是关系型数据库的一大优势。事务(Transaction)通常指对数据库进行读或写的一个操作序列。一个事务从BEGIN语句开始,中间包括一系列SQL语句,最后由COMMIT或者ROLLBACK语句结束。事务中所有的读写是一个执行的整体,要么全部成功、要么失败回滚,它使得应用程序可以不用考虑错误处理以及复杂地并发性问题,降低了上层业务系统的逻辑复杂度。
事务隔离(Transaction Isolation)保障事务独立执行而不受其他事务的影响,是事务并发执行的直接需求,最直观、最简单的隔离方式显然是让并发的事务依次顺序执行。但是,这将大大降低事务的并发性能。在真实的场景中,有时并不需要如此高的正确性保证,因此希望牺牲一些正确性来提高整体性能。通过使用不同等级的隔离级别,用户可以在正确性和性能上自由权衡。当前常见的隔离级别包括:读未提交、读已提交、可重复读、快照隔离级别以及可序列化隔离级别。事务的隔离级别会影响事务对其他并发事务所做修改的可见性,进而导致并发事务在同一时刻看到同一个数据表的不同状态。例如,在读未提交级别下,事务可以读到另一个并发事务还未提交的修改;而在读已提交下,事务仅能读到另一个并发事务已提交的修改。以图1为例,图中的黑色箭头表示事务T1和T2的提交顺序,初始表状态如图中的①所示。假如T1和T2运行在读未提交隔离级别,语句S12执行完毕以后,数据表就被修改为图中②所示的状态,此时事务T1自身的S13语句和事务T2的S22语句都会看到如②所示的视图。但是,如果事务T1和T2运行在读已提交的状态,那么事务T1所做得修改在提交之前对T2不可见,此时S22看到的还是如①所示的视图,S22执行完以后事务T2的视图就如③所示。等S14执行完毕以后,事务T1成功提交。此时事务T2的S23语句除了能看到同事务所做的修改以外,还能看到T1所做修改,因此语句S23看到的就是如④所示的视图。
由于关系型数据库系统事务处理部分兼具了数据处理和并发控制控制的复杂性,具有代码量巨大、代码逻辑繁杂等特点,如果实现不当,可能造成并发事务的执行结果违反数据库系统所声明的隔离级别,即触发了事务隔离性缺陷。而事务作为关系型数据库的主要功能,在各类型系统中通常扮演着举足轻重的角色,实际生产环境中的数据库事务隔离性缺陷往往产生严重的后果,如数据丢失、查询结果错误等。因此针对关系型数据库的事务隔离性缺陷进行检测十分重要。
目前针对数据库隔离性缺陷诊断的工作往往采用事务执行历史验证的方法。Elle(Kyle Kingsbury and Peter Alvaro.“Elle:inferring isolation anomalies fromexperimental observations”.Proc.VLDB Endow.14,3(November 2020).2020.)通过选择特定的数据库对象与操作来生成事务执行历史(比如计数器对象的自增操作、队列对象的入队操作等),并对执行历史序列化图中存在的各种异象进行检测,进而判断当前数据库是否有隔离级别违背的缺陷。由于该方法需要特定的数据结构和读写操作作为前提,因此不适用于关系型数据库中多样的数据库模式与语句类型,比如,组合索引,二进制列类型和SELECT FOR UPDATE语句。COBRA(Cheng Tan,Changgeng Zhao,Shuai Mu,MichaelWalfish.“Cobra:Making Transactional Key-Value Stores VerifiablySerializable”.Symposium on Operating Systems Design and Implementation(OSDI’20).2020)是一个针对云端键值类型存储系统可序列化隔离级别的验证的工具。该工具将云端键值存储系统当作一个黑盒,作为客户端提交事务负载并记录执行历史。然后根据执行历史的序列化图来判断系统中是否存在不满足可序列化特性的操作。需要注意的是,COBRA所针对的对象是键值类型存储系统,对于关系型数据库无法进行处理,且仅支持对可序列化一种隔离级别进行验证。
综上所述,现有的针对数据库的事务相关验证工作都通过把关系型数据库抽象成键值存储系统来进行建模,因此这些方法对于当前数据库系统多样的数据库模式和语句类型的支持十分有限。
发明内容
本发明的目的是克服现有事务验证方法中对关系型数据库模式和语句类型支持不足的问题,提供一种基于事务执行结果推断的事务隔离性自动化测试方法及装置,其通过随机生成事务,并基于隔离级别定义推断事务执行结果,进而通过测试发现事务隔离缺陷,能够覆盖目标关系型数据库中多样的数据类型、数据约束、语句类型等特性,提高数据库事务隔离缺陷的检测效率。
本发明的技术方案包括:
一种面向关系型数据库的事务隔离性自动化测试方法,其步骤包括:
针对目标关系型数据库,构建测试输入,其中,所述测试输入包括:数据表、一个事务对、每一个事务所处的隔离级别和所述事务对中的语句交叉执行顺序,所述数据表包括:基于所述目标关系型数据库所支持的数据类型与约束随机生成的表结构和数据记录,所述事务包含的语句包括:基于所述目标数据库所支持SQL语句的抽象语法树生成的语句,所述隔离级别基于所述目标数据库所支持的隔离级别随机选取;
基于数据库修改历史对测试输入进行执行结果推断,以获取期望结果,其中所述数据库修改历史中记录了数据表中每条记录在事务执行过程中的所有版本;
依据所述语句交叉执行顺序,将所述事务对提交给待测数据库执行,以获取执行结果;
比较所述期望结果与执行结果,以生成测试报告。
进一步地,所述数据表还包括:额外列,所述额外列设置为UNIQUE约束的INTEGER类型,用于唯一标识表中每行记录。
进一步地,所述事务的语句数量为一可配置参数,并基于所述可配置参数,平衡事务的复杂度与测试效率。
进一步地,所述基于数据库修改历史对测试输入进行执行结果推断,以获取期望结果,包括:
1)基于数据表中的数据列,生成数据表的内容,构建数据库修改历史的最初状态;
2)基于语句交叉执行顺序,获取语句交叉执行序列;
3)对于语句交叉执行序列中的语句Si,判断所述语句Si所属的事务B是否被标记为阻塞:
若是,则将所述语句Si放入阻塞语句缓存区,并判断语句Si+1所属的事务是否被标记为阻塞;
若否,则进入步骤4);
4)根据所述数据库修改历史与所述隔离级别,为所述数据表中的每条记录查找所述语句Si所属事务可见的最新版本,并基于所述最新版本,构建所述语句Si在所述隔离级别下能看到的数据库视图;
5)在所述数据库视图上进行冲突分析,判断所述语句Si是否为阻塞:
若是,则将所述语句Si放入阻塞语句缓存区,将所属的事务B标记为阻塞,并返回步骤3);
若否,在所述数据库视图执行所述语句Si,以获取第一执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并进入步骤6);
6)判断所述语句Si是否为事务结束语句:
若是,则进入步骤7);
若否,则返回步骤3);
7)判断阻塞语句缓存区中是否存在语句:
若是,则基于所述第一执行结果,获取所述期望结果;
若否,则基于数据表的内容,依次执行阻塞语句缓存区中事务B′的各条语句S′j,以获取第二执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并进入步骤8);
8)判断所述语句交叉执行序列是否执行结束:
若是,则基于所述第一执行结果与所述第二执行结果,获取所述期望结果;
若否,则返回步骤3),以获取剩余语句的第三执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并基于所述第一执行结果、所述第二执行结果与所述第三执行结果,获取所述期望结果。
进一步地,所述在所述数据库视图上进行冲突分析,判断所述语句Si是否为阻塞,包括:
将每一语句Si获取的锁关联一个包含该语句Si所访问的数据行的集合以及索引的集合,其中所述锁包括:共享锁或互斥锁;
若语句Si与语句Si-t的锁在数据行集合或索引集合中存在交集,且至少一种为互斥锁,则判断所述语句Si是否为阻塞,其中t<i。
进一步地,若所述事务B与事务B′相应的语句中,都至少有一语句Si被判断为阻塞语句,则停止分析。
进一步地,所述在所述数据库视图执行所述语句Si,以获取第一执行结果或将数据库视图的修改结果同步至所述数据库修改历史,包括:
若所述语句Si为查询语句,则将所述语句Si对应的查询结果作为所述第一执行结果;
或,
若所述语句Si为非查询语句,则将所述语句Si在数据库视图的修改结果同步至所述数据库修改历史。
进一步地,所述期望结果包括:语句Si的阻塞状态、查询语句的查询结果以及事务执行结束后所述数据库的最终状态。
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一所述方法。
一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一所述方法。
与现有技术相比,本发明具有如下的技术优势:
1.本发明的方法充分考虑了关系型数据库中数据类型、数据约束以及语句类型的多样性,并通过随机的方式生成多样的测试样例,这使得测试能够尽可能充分地覆盖生产环境中可能遇到的情况,大幅提高测试效率,帮助数据库开发人员及时发现系统中存在的事务缺陷。
2.本发明针对多种不同隔离级别,且能够很方便地适配新的隔离级别。对于给定的隔离级别,只需将目标隔离级别的可见性约束在方法中的视图构建部分用规则表达出来即可。
附图说明
图1不同隔离级别对语句视图影响的示例图。
图2本发明方法测试模型流程图。
图3本发明方法整体流程示例图。
图4数据库修改历史维护示例图。
具体实施方式
下面将结合附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明特定实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
本发明的技术方案包括一种针对关系型数据库事务隔离性的自动化测试方法。在该自动化测试方法中,事务被解耦成一系列按照一定顺序在其特定视图上独立执行的语句,通过比较同一条语句在事务中的执行结果与在特定视图上独立执行的结果是否一致,来检测目标数据库中潜在的事务隔离缺陷。该自动化测试方法的具体步骤包括:
(1)在目标数据库中随机生成一张初始数据表,并根据该数据表的模式生成一对事务。每个事务中包含若干条对数据表进行增删改查操作的SQL语句,并被随机地设置为目标数据库所支持的某种隔离级别。接着,随机生成该事务对的一种语句交叉执行顺序。
(2)按照给定的交叉执行顺序对逐条语句进行执行结果分析。具体而言,对于每条语句,首先以事务所处隔离级别为依据,结合数据库的修改历史,推断出语句所能看到的数据库状态,即该语句的视图。然后在其视图上进行冲突分析推断出其阻塞状态,并在其可以执行时将其在视图上执行,得出该语句的执行结果。最后,如果分析过程中没有死锁发生,则在所有语句执行完毕后记录数据库的最终状态。通过这种方式,即可推断出该事务对在目标数据库中期望的执行结果。
(3)将所生成的事务对按照相同的交叉执行顺序提交给待测关系型数据库执行,并记录真实执行的结果。
(4)对比真实执行的结果与推断出的结果是否一致,如果存在不一致,则报告为潜在的数据库事务缺陷;
(5)针对相同的事务对重新生成另一种交叉执行顺序作为下一轮的测试输入,或者重新生成新的数据表与事务对来开始新的一轮测试。
具体来说,本发明基于如图2所示的测试模型:事务对中两个事务的SQL语句按照一定顺序依次提交给待测数据库系统执行,如果其中一个事务curTx在某条语句的位置被阻塞,那么curTx接下来的所有语句都会被阻塞直至被另一个事务otherTx的提交或回滚操作唤醒。一旦curTx从阻塞中被唤醒,其所有被阻塞的语句会被依次执行。以下结合图3中的具体实施流程示例图对本发明所述方法进行详细说明。
首先,本发明方法随机生成一张数据表。生成数据表的过程包括表结构的生成与表内数据的填充。生成表结构时会随机选择数据表列数,然后针对表中的每一列随机选择目标关系型数据库所支持的数据类型与约束,还会在表中随机选择数据列建立索引。最后根据列的数据类型和约束,随机生成若干条数据记录插入到表中。在数据库表结构生成之后,会为数据表增加额外的一列,并设置为UNIQUE约束的INTEGER类型。在后续的分析过程中,该列会被用来唯一标识表中的记录,且方法会确保该列不参与事务中语句的生成。
随后进行事务生成,本方法随机为每个事务指定一种隔离级别,并为每个事务生成若干条SQL语句。每条语句都根据目标数据库所支持SQL语句的抽象语法树进行生成。然后为事务增加BEGIN语句作为开始,并随机选择COMMIT或是ROLLBACK语句作为结束。需要注意的是,事务所包含的语句数量是一个可配置参数,可以通过调节该参数来平衡事务复杂度与测试效率。
接着,随机生成事务对的一种交叉执行顺序。此处事务对的交叉执行顺序要求同一个事务内的语句顺序不变。如果事务中所包含的语句较少,那么可以通过深度优先遍历或广度优先遍历获取事务对中语句所有可能的交叉执行顺序作为测试输入。但是如果事务中所包含语句较多,为了避免状态空间爆炸,可以从所有可能的交叉顺序中随机选择一部分进行测试,或者直接通过逐条语句随机选择的方式生成一种任意的交叉顺序作为测试输入。
至此,已经得到完整的测试输入:数据表、两个事务、事务所处的隔离级别以及事务对中语句的交叉执行顺序。接下来,本发明所述的方法基于数据库修改历史对测试输入进行执行结果推断以获取期望的结果。其中数据库修改历史中记录了数据表中每条记录在事务执行过程中的所有版本。每一个版本包括该条记录在该版本的内容、在该版本中是否被删除以及创建该版本的事务,其在分析过程中的维护流程如图3所示。
执行结果推断的具体步骤如下:首先根据生成数据表的内容构建数据库修改历史的最初状态。然后逐条分析事务交叉序列中的SQL语句,直至所有语句分析完毕。对于每条语句S,先判断其所属的事务是否被标记为阻塞,如果是则将S放入阻塞语句缓存区并分析下一条语句。否则,根据数据库修改历史与事务隔离级别的要求,为表中的每条记录查找语句S所属事务可见的最新版本,并依此构建语句S在当前隔离级别下能看到的数据库(关系型数据库系统中的数据库实例)视图。以图1中的例子为例,在读已提交级别下,语句S12的视图如①所示,语句S13的视图如图中②所示。
接下来在得到的视图上通过冲突分析判断语句S是否应该阻塞,记录语句S的阻塞状态,并根据是否阻塞决定下一步的动作:如果是则将S放入阻塞语句缓存区,并将其所述事务标记为阻塞。否则,语句S会在得到的视图上被执行。如果语句S是查询语句则记录其查询结果;如果是其他类型的语句则将语句S在视图上做得修改同步至数据库修改历史。仍以图1中的例子为例,语句S22的视图如①所示,该语句在其视图上执行后就会得到如③所示的执行后视图,该视图中第二行的修改会被同步至数据库修改历史。
进一步地,上述的在视图上通过冲突分析判断语句S是否应该阻塞,具体而言,事务中每条语句获取的锁可以建模为共享锁和互斥锁两种类型,同时每条语句获取的锁关联一个包含该语句所访问的数据行的集合以及索引的集合。如果两条语句获取的锁在数据行集合或索引集合中存在交集,且至少一种为互斥锁,则表明这两条语句存在冲突。除此以外,如果目标数据库支持范围锁,那么如果两条语句获取的锁存在范围重合,也表明语句间存在冲突。如果语句S与另一事务已执行的某条语句存在冲突,则语句S被判断为需要阻塞。
在此过程中,如果出现事务对中的两个事务先后被标记为阻塞,则说明发生死锁,分析过程直接停止。如果所有语句分析完毕以后未有死锁发生,则获取数据库修改历史中每条记录的最新版本来构建数据库的最终状态。至此,推断的执行结果包括:每条语句的阻塞状态、每条查询语句的查询结果以及事务执行结束后数据库的最终状态。
接下来,本发明所述的方法获取事务对真正的执行结果时,按照上文提到的测试模型将事务对按照给定的交叉顺序提交给数据库执行。在此过程中会为每条语句记录是否阻塞,为所有的查询语句记录查询结果,并在事务对执行完毕且未发生死锁的情况下记录数据库的最终状态。
最后,本发明所述的方法会逐条语句对比真正地执行结果与推断的执行结果是否一致,并在遇到的第一个不一致的位置停止。根据不一致的情况,最终会生成三种类型的报告:(1)阻塞状态不一致:某条语句推断为应该阻塞,但是在真正执行中却没有阻塞;(2)查询结果不正确:某条查询语句在真正执行中得到的结果与推断出的结果不一致;(3)数据库最终状态不正确:死锁没有发生且事务对执行完毕后得到的数据库最终状态与推断出的结果不一致。
尽管为说明目的公开了本发明的具体实施流程和实例附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于所展示实施流程和实例附图所公开的内容。
Claims (10)
1.一种面向关系型数据库的事务隔离性自动化测试方法,其步骤包括:
针对目标关系型数据库,构建测试输入,其中,所述测试输入包括:数据表、一个事务对、每一个事务所处的隔离级别和所述事务对中的语句交叉执行顺序,所述数据表包括:基于所述目标关系型数据库所支持的数据类型与约束随机生成的表结构和数据记录,所述事务包含的语句包括:基于所述目标数据库所支持SQL语句的抽象语法树生成的语句,所述隔离级别基于所述目标数据库所支持的隔离级别随机选取;
基于数据库修改历史对测试输入进行执行结果推断,以获取期望结果,其中所述数据库修改历史中记录了数据表中每条记录在事务执行过程中的所有版本;
依据所述语句交叉执行顺序,将所述事务对提交给待测数据库执行,以获取执行结果;
比较所述期望结果与执行结果,以生成测试报告。
2.如权利要求1所述的方法,其特征在于,所述数据表还包括:额外列,所述额外列设置为UNIQUE约束的INTEGER类型,用于唯一标识表中每行记录。
3.如权利要求1所述的方法,其特征在于,所述事务的语句数量为一可配置参数,并基于所述可配置参数,平衡事务的复杂度与测试效率。
4.如权利要求1所述的方法,其特征在于,所述基于数据库修改历史对测试输入进行执行结果推断,以获取期望结果,包括:
1)基于数据表中的数据列,生成数据表的内容,构建数据库修改历史的最初状态;
2)基于语句交叉执行顺序,获取语句交叉执行序列;
3)对于语句交叉执行序列中的语句Si,判断所述语句Si所属的事务B是否被标记为阻塞:
若是,则将所述语句Si放入阻塞语句缓存区,并判断语句Si+1所属的事务是否被标记为阻塞;
若否,则进入步骤4);
4)根据所述数据库修改历史与所述隔离级别,为所述数据表中的每条记录查找所述语句Si所属事务可见的最新版本,并基于所述最新版本,构建所述语句Si在所述隔离级别下能看到的数据库视图;
5)在所述数据库视图上进行冲突分析,判断所述语句Si是否为阻塞:
若是,则将所述语句Si放入阻塞语句缓存区,将所属的事务B标记为阻塞,并返回步骤3);
若否,在所述数据库视图执行所述语句Si,以获取第一执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并进入步骤6);
6)判断所述语句Si是否为事务结束语句:
若是,则进入步骤7);
若否,则返回步骤3);
7)判断阻塞语句缓存区中是否存在语句:
若是,则基于所述第一执行结果,获取所述期望结果;
若否,则基于数据表的内容,依次执行阻塞语句缓存区中事务B′的各条语句S′j,以获取第二执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并进入步骤8);
8)判断所述语句交叉执行序列是否执行结束:
若是,则基于所述第一执行结果与所述第二执行结果,获取所述期望结果;
若否,则返回步骤3),以获取剩余语句的第三执行结果或将数据库视图的修改结果同步至所述数据库修改历史,并基于所述第一执行结果、所述第二执行结果与所述第三执行结果,获取所述期望结果。
5.如权利要求4所述的方法,其特征在于,所述在所述数据库视图上进行冲突分析,判断所述语句Si是否为阻塞,包括:
将每一语句Si获取的锁关联一个包含该语句Si所访问的数据行的集合以及索引的集合,其中所述锁包括:共享锁或互斥锁;
若语句Si与语句Si-t的锁在数据行集合或索引集合中存在交集,且至少一种为互斥锁,则判断所述语句Si是否为阻塞,其中t<i。
6.如权利要求4所述的方法,其特征在于,若所述事务B与事务B′相应的语句中,都至少有一语句Si被判断为阻塞语句,则停止分析。
7.如权利要求4所述的方法,其特征在于,所述在所述数据库视图执行所述语句Si,以获取第一执行结果或将数据库视图的修改结果同步至所述数据库修改历史,包括:
若所述语句Si为查询语句,则将所述语句Si对应的查询结果作为所述第一执行结果;
或,
若所述语句Si为非查询语句,则将所述语句Si在数据库视图的修改结果同步至所述数据库修改历史。
8.如权利要求7所述的方法,其特征在于,所述期望结果包括:语句Si的阻塞状态、查询语句的查询结果以及事务执行结束后所述数据库的最终状态。
9.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1-8中任一所述方法。
10.一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如权利要求1-8中任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210252064.5A CN114610626B (zh) | 2022-03-15 | 2022-03-15 | 面向关系型数据库的事务隔离性自动化测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210252064.5A CN114610626B (zh) | 2022-03-15 | 2022-03-15 | 面向关系型数据库的事务隔离性自动化测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114610626A true CN114610626A (zh) | 2022-06-10 |
CN114610626B CN114610626B (zh) | 2024-08-20 |
Family
ID=81862895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210252064.5A Active CN114610626B (zh) | 2022-03-15 | 2022-03-15 | 面向关系型数据库的事务隔离性自动化测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114610626B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180322003A1 (en) * | 2016-02-26 | 2018-11-08 | Hewlett Packard Enterprise Development Lp | Fault isolation in transaction logs |
CN111159252A (zh) * | 2019-12-27 | 2020-05-15 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN111736964A (zh) * | 2020-07-02 | 2020-10-02 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112632105A (zh) * | 2020-01-17 | 2021-04-09 | 华东师范大学 | 大规模事务负载生成与数据库隔离级别正确性验证系统及方法 |
CN113760857A (zh) * | 2020-06-05 | 2021-12-07 | 华为技术有限公司 | 一种跨引擎事务的处理方法、装置、设备及介质 |
-
2022
- 2022-03-15 CN CN202210252064.5A patent/CN114610626B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180322003A1 (en) * | 2016-02-26 | 2018-11-08 | Hewlett Packard Enterprise Development Lp | Fault isolation in transaction logs |
CN111159252A (zh) * | 2019-12-27 | 2020-05-15 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN112632105A (zh) * | 2020-01-17 | 2021-04-09 | 华东师范大学 | 大规模事务负载生成与数据库隔离级别正确性验证系统及方法 |
CN113760857A (zh) * | 2020-06-05 | 2021-12-07 | 华为技术有限公司 | 一种跨引擎事务的处理方法、装置、设备及介质 |
CN111736964A (zh) * | 2020-07-02 | 2020-10-02 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
YUETANG DENG 等: ""Testing database transaction concurrency"", 《18TH IEEE INTERNATIONAL CONFERENCE ON AUTOMATED SOFTWARE ENGINEERING, 2003. PROCEEDINGS》, 27 October 2003 (2003-10-27), pages 1 - 10 * |
李子玥: ""分布式环境中数据库异常事务隔离和修复技术研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》, 15 April 2013 (2013-04-15), pages 138 - 793 * |
Also Published As
Publication number | Publication date |
---|---|
CN114610626B (zh) | 2024-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11314716B2 (en) | Atomic processing of compound database transactions that modify a metadata entity | |
Ports et al. | Serializable snapshot isolation in PostgreSQL | |
EP3111325B1 (en) | Automatically retrying transactions with split procedure execution | |
US9576038B1 (en) | Consistent query of local indexes | |
US10754854B2 (en) | Consistent query of local indexes | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
Abedjan et al. | Detecting unique column combinations on dynamic data | |
CN110502525A (zh) | 一种混合工作负载的乐观并发控制方法 | |
Dou et al. | Detecting isolation bugs via transaction oracle construction | |
Cui et al. | Differentially testing database transactions for fun and profit | |
Jiang et al. | Detecting Transactional Bugs in Database Engines via {Graph-Based} Oracle Construction | |
Vandevoort et al. | Robustness against read committed for transaction templates | |
Almeida et al. | Performance analysis and optimization techniques for oracle relational databases | |
CN114610626B (zh) | 面向关系型数据库的事务隔离性自动化测试方法及装置 | |
Kapfhammer | A comprehensive framework for testing database-centric software applications | |
CN115344500A (zh) | 面向关系型数据库中sql语句执行的自动化测试方法及装置 | |
Pupezescu et al. | Optimizations of Database Management Systems for Real Time IoT Edge Applications | |
CN110399378B (zh) | 数据库系统锁操作分析方法及装置 | |
Qiu et al. | A characteristic study of deadlocks in database-backed web applications | |
Zhou et al. | Timestamp reassignment: taming transaction abort for serializable snapshot isolation | |
Liarokapis et al. | HISTEX (history exerciser): A tool for testing the implementation of isolation levels of relational database management systems | |
Liarokapis et al. | HISTEX (HISTory EXerciser): An Overview | |
Parreira et al. | Empowering a Relational Database with Lsd: Lazy State Determination | |
CN118093414A (zh) | 元数据导向的逻辑缺陷自动化检测方法及装置 | |
Gan | Exploring Transaction Anomalies under Weak Isolation Levels for General Database Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |