(相关资料图)
近日,中科院软件所软件工程中心数据库系统可靠性保障团队的两篇论文被ICSE 2023接收。ICSE(International Conference on Software Engineering)是软件工程领域的顶级国际会议,迄今已经举办45届。研究成果聚焦数据库系统在SQL语句、事务执行方面的正确性,是该研究团队在数据库系统可靠性保障方向的新探索。
论文“Testing Database Systems via Differential Query Execution”关注数据库系统中单条SQL语句执行的正确性。关系型数据库系统使用结构化查询语言(SQL)高效地存储和检索数据。如果SQL语句执行存在缺陷,可能会导致数据库状态错误、系统宕机等严重后果。因此,SQL语句执行的正确性是基于数据库系统的各类应用正确性保障的关键。现有数据库系统测试方法主要关注SELECT语句执行的正确性,无法检测UPDATE、DELETE等更新语句中的缺陷。同时,研究团队发现SELECT、UPDATE和DELETE语句都使用WHERE子句作为查询条件与数据库系统进行交互,相同的WHERE子句应该影响到数据库中相同的数据行。基于上述发现和现有检查方法存在的问题,研究团队提出了差分语句执行方法DQE(Differential Query Execution),通过分析使用相同WHERE子句的SELECT、UPDATE和DELETE的执行差异,自动化判断单个数据库系统中SQL语句执行的正确性。
图1展示了DQE的测试流程。该研究团队在5个知名数据库系统(MySQL、MariaDB、TiDB、CockroachDB和SQLite)中,共计检测了50个新缺陷,其中41个缺陷得到开发人员确认,11个已经被修复。
图1 DQE的测试流程
论文“Detecting Isolation Bugs via Transaction Oracle Construction”关注数据库系统中事务执行的正确性。关系型数据库系统是利用事务机制来保障数据的完整性,但数据库系统可能违反事务执行的隔离性要求,导致数据库系统出现查询结果错误、数据库状态错误等严重缺陷。而现有事务可靠性保障研究主要依赖简单数据结构与事务执行历史来验证事务隔离性,不能支持实际数据库系统中大部分常见事务特性。
针对该问题,研究团队提出一种自动化检测数据库系统中事务缺陷的方法Troc。该方法的核心思想是把并行事务对解耦成一组按照一定顺序、在特定数据库视图上执行的独立SQL语句,以此作为事务执行预言。实际事务执行结果与独立语句执行结果之间的不一致表明存在事务缺陷。
图2展示了Troc的测试流程。该研究团队在3个知名关系型数据库系统(MySQL、MariaDB、TiDB)中,发现了12个事务相关的隔离缺陷,其中7个是尚未被披露的新缺陷。
图2 Troc的测试流程
“Testing Database Systems via Differential Query Execution”的第一作者为博士生宋建森,通讯作者为窦文生、王伟研究员;“Detecting Isolation Bugs via Transaction Oracle Construction”的第一作者为窦文生研究员。上述研究成果已经在浪潮云溪数据库系统、达梦数据库系统上开展实际应用,并检测到若干真实缺陷。研究获得国家自然科学基金、中国科学院青年创新促进会等的支持。