近日,数据库领域顶会ICDE 2025在香港举办。腾讯云TDSQL团队与国内外高校合作的3项研究成果成功入选。这些成果聚焦数据库隔离性验证、在线事务检测和跨地域事务处理等实际应用中的技术难点,相关技术已在腾讯云数据库产品中落地应用。
本文将解读第一篇论文,围绕数据库事务隔离性检测效率低的技术研究。
标题:《Boosting End-to-End Database Isolation Checking via Mini-Transactions》
作者: 魏恒峰,肖江,杨娜,刘思,殷梓敬,陈育兴,潘安群
单位:南京大学,苏黎世联邦理工学院,腾讯
关键词:事务隔离级别,严格可串行化,可串行化,快照隔离,隔离性检测
// 摘要
事务隔离性保证对数据库正确性至关重要。然而,近期研究发现,生产环境中的数据库中存在大量隔离性漏洞。常见的隔离性检测方法采用黑盒方式,通过大规模、并发、随机的事务负载对数据库施压,并验证生成的执行历史是否满足指定的隔离级别。对于严格可串行化、可串行化和快照隔离等强隔离级别,当前方法在历史生成和验证过程中常常带来显著的端到端开销。
本文通过提出微事务(Mini-Transactions, MTs)的全新设计,来应对上述低效问题。MTs 是紧凑且执行迅速的短事务,能够减少数据库阻塞和事务重试,从而在历史生成过程中显著降低开销。基于 MTs 的读-修改-写模式,我们进一步开发了高效的隔离级别验证算法,可以在线性或平方时间内完成验证。尽管设计简单,MTs 在语义上却十分丰富,能够有效捕捉文献中常见的隔离性异常。
我们在工具MTC 中实现了上述验证算法及 MT 工作负载生成器。实验结果表明,MTC 在历史生成和验证性能上均优于现有最先进的工具。同时,MTC 能够在各类隔离级别下发现生产数据库中的漏洞,并在保持一般随机负载测试有效性的同时,大幅降低检测成本,成为一种高效的黑盒隔离性检测解决方案。这使得 MTC 成为腾讯云数据库开发生产环境中一种高效的黑盒隔离性检测解决方案,为腾讯云数据库的数据安全和稳定运行提供有力支持。
一、引言
数据库系统是现代应用程序的核心支撑,确保其正确性对于数据完整性至关重要。其中,隔离性(Isolation)作为数据库系统最重要的正确性属性之一,指的是在并发事务执行过程中避免相互干扰的能力。尽管隔离性极为重要,但对其进行测试与验证仍然面临诸多挑战,尤其是在生产环境中,数据库内部机制往往被视为黑盒,进一步加大了检测难度。
图 1:端到端隔离性检测流程:
(1)客户端在数据库上执行负载;
(2)收集执行结果;
(3)构建统一的执行历史;
(4)隔离性检测器根据隔离性规范对历史进行验证。
近期研究表明,生产环境中的数据库系统中存在大量隔离性漏洞,这凸显了高效且有效的隔离性测试方法的必要性。现有的黑盒隔离性检测工具(如 Cobra、PolySI、Elle 和 Porcupine)虽然在发现隔离性违规方面表现出色,但在历史生成与验证过程中普遍存在显著的性能开销问题。
为了解决这些问题,本文提出了一种基于微事务(Mini-Transactions, MTs)的全新数据库隔离性检测方法。该方法由南京大学、苏黎世联邦理工学院(ETH Zurich)及腾讯公司联合提出,能够在提升检测效率的同时,保持甚至增强隔离性漏洞的检测能力。
二、理解数据库隔离性
数据库隔离性保证了并发事务不会以导致数据不一致的方式互相干扰。不同的隔离级别提供了不同程度的并发行为保证:
1.严格可串行化(SSER):最强的隔离级别,确保事务的执行顺序既是串行的,又符合实际时间上的顺序。
2.可串行化(SER):保证事务以某种串行顺序执行,但不一定符合实时顺序。
3.快照隔离(SI):比可串行化更弱,确保每个事务看到数据库的一致快照。
隔离性违例通常表现为微妙且难以检测的异常,但这些异常可能导致严重的应用层错误。
图 2:三个事务之间的写偏差异常示例,展示了隔离性不足如何导致数据不一致。
三、微事务方法
本文提出的核心创新是微事务(Mini-Transactions,MTs)的概念。MTs 是小型且聚焦的事务,具有以下特征:
1.紧凑大小:MTs 包含有限数量的读写操作(通常为 2-4 个)。
2.读-修改-写模式:MTs 遵循一种模式,首先读取一个值,进行计算,然后写入一个新值。
3.唯一值条件:每个写操作都会产生一个在历史中从未出现过的唯一值。
这些特性使得微事务能够支持更高效的验证算法,同时保持检测隔离性违规的能力。作者展示了尽管 MTs 设计简单,它们仍能捕捉当前框架中文献所定义的所有 14 种已知的隔离性异常。
伪代码:一个简单的微事务示例
事务目标:读取值,执行计算,写入新值
BEGIN TRANSACTION
value = READ(key)
newValue = function(Value)
WRITE(key, newValue)
COMMIT
使用微事务(MTs)的几个优势:
1.较低的中止率:与普通事务(最高可达 60% 的中止率)相比,微事务的中止率显著较低(低于 10%),从而使得历史生成过程更加高效。
2.简化的复杂度:微事务的紧凑特性简化了验证过程。
3.高效的算法:微事务的特定模式使得开发高效的验证算法成为可能。
四、微事务的验证算法
作者为检查不同隔离级别下的微事务历史,开发了专门的验证算法:
(1)严格可串行化(SSER)验证
对于SSER验证,算法构建一个依赖图,其中:
•节点表示事务
•边表示事务之间的依赖关系(写读依赖(WR)、写写依赖(WW)、读写依赖(RW)或会话顺序)
与传统方法使用SAT/SMT求解器不同,基于微事务的方法可以直接检测图中的循环以识别SSER违规,该方法达到了 O(n^2) 时间复杂度,相比现有方法有显著的改进。
(2)可串行化(SER)验证
SER验证算法类似地构建依赖图,但忽略了会话顺序边。该算法利用微事务的特性,能够高效地进行循环检测。
(3)快照隔离(SI)验证
对于SI验证,算法检查特定的依赖模式,来识别SI违规,特别关注在SI下常见的写偏移异常(write-skew anomaly)。
这些算法的高效性源于微事务的唯一值条件,该条件简化了依赖分析,并减少了潜在违规的搜索空间。
五、实验效果
本研究在 PostgreSQL 和 MongoDB 数据库中,使用 Mini-Transaction(MT)负载和 General Transaction(GT)负载生成高并发事务历史,进行隔离级别检测实验。评价指标分为四类:
- 历史验证性能
- 端到端检测性能
- 负载生成的有效性
- 隔离级别Bug检测效果
图 3 至图 5 分别展示了在验证 Serializability(SER)、Snapshot Isolation(SI)和 Strict Serializability(SSER)历史时,MTC 与现有主流方法(Cobra、PolySI、Porcupine)的性能对比。图 6 至图 8 展示了端到端检测开销、事务提交率。图 9 和图 10 进一步评估了 MTC 与 Elle 工具在 Bug 检测数量和检测效率上的差异。
在 PostgreSQL 和 MongoDB 的真实和合成数据集上,MTC 在所有指标上均优于现有的基线方法,验证效率提升最高可达1600倍,端到端检测时间和内存开销大幅下降。MTC 生成的 MT 负载提交率更高,有效避免了 GT 负载中的高 Abort 问题。同时,在相同检测时间下,MTC 能发现更多 Isolation Bug,且 Bug counter example 更简洁、易于分析。
图 3:MTC-SER与Cobra(有/无GPU加速)在不同负载条件下验证SER历史的性能比较。
图 4:MTC-SI与PolySI在不同负载条件下验证SI历史的性能比较。
图 5:MTC-SSER与Porcupine在不同并发度下验证SSER历史的性能比较。
图 6:比较MTC和Cobra的整体时间和内存消耗,包括_生成历史和验证历史_两个阶段(SER)。
图 7:比较MTC和PolySI的整体时间和内存消耗,包括_生成历史和验证历史_两个阶段(SI)。
图 8:比较GT(General Transaction)负载和MT(Mini-Transaction)负载的事务终止率。
图 9:在30分钟内比较MTC和Elle在PostgreSQL和MongoDB上检测Isolation Bug的数量。
图 10:比较MTC和Elle在不同事务长度设置下的_历史生成和历史验证_时间。
六、结论
我们的方法不依赖于具体的隔离级别。然而,对于强隔离级别(包括 SSER、SER 和 SI)而言,它尤为有效,这些隔离级别通常会给数据库带来更高的执行开销,并涉及更复杂的验证过程。我们的贡献主要体现在以下三个方面:
- 概念层面:我们提出了一种以微事务(MTs)为核心的统一方法,解决了在进行数据库隔离级别黑盒检测时,历史生成与验证阶段的低效问题。
- 技术层面:我们设计了微事务(MTs),它们结构紧凑但语义表达能力强,能够覆盖当前主流规范框架中定义的全部14种已知隔离性异常。此外,我们还为强隔离级别开发了一套高效的验证算法,这些算法利用MT 中的读-改-写(RMW)模式以及历史中的唯一值机制以提升验证效率。我们进一步证明,对于不带唯一值的 MT历史,验证强隔离级别是一个 NP-困难问题。
- 实践层面:我们将上述验证算法和 MT 工作负载生成器集成实现为一个名为MTC 的工具。实验结果表明,在端到端检测流程(包括历史生成与验证)中,MTC 的表现优于当前最先进的隔离性检测工具。此外,我们还展示了 MTC 能够在生产数据库中跨不同隔离级别有效地发现隔离性漏洞,同时保持基于通用随机负载测试的有效性。
七、结论与未来工作
我们利用微事务(MTs),以统一的方式解决了在对三种强隔离级别进行端到端黑盒检测过程中存在的效率问题。此外,我们还展示了 MTC 工具在使用 MT 工作负载检测隔离性漏洞方面的有效性。
在未来的工作中,我们将进一步探索 MTC 在不同工作负载参数(例如对象访问分布和对象数量)下的有效性。同时,我们计划在FaunaDB 和 VoltDB 上开展实验,以评估 MTC 在验证任意 MT 历史(不仅限于 LWT 历史)下的 SSER 性能。其中一项关键挑战是如何准确收集事务的启动和结束的墙钟时间戳,并处理潜在的时钟偏移,以尽量减少误报与漏报。
此外,扩展 MTC 以支持对较弱隔离级别的验证,将有助于提升其适用范围。MTC 内置的工作负载生成器能够基于 MT 历史生成随机化的测试用例。我们认为,若能引导生成器覆盖各类隔离异常,将进一步提升其对开发者的价值。
另一个有趣的研究方向是探索如何以受控方式执行 MT,例如模拟停顿、修改状态可见性或注入故障,以触发特定的异常。最后,我们计划将MTC 工具集成到 IsoVista 检测系统中,增强其作为“检测即服务”平台的能力。