暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于程序覆盖信息的数据库内核问题定位工具

原创 YaoBase 2023-12-11
323

随着数据库内核代码规模和复杂度不断增长,软件测试与故障定位也越来越耗时。为了修复引发数据库故障的程序缺陷,开发人员往往需要花费大量的时间和精力去定位并解决问题。因此提高故障定位的精度和效率是数据库内核开发与测试中至关重要的一个环节。

YaoBase为了提高的测试中的故障定位效率,自研了基于程序覆盖信息的故障定位技术的覆盖测试工具,主要包含程序覆盖信息收集和基于程序覆盖信息的故障定位两个步骤。

1.程序覆盖信息收集


图1 程序覆盖信息收集工具

2.基于程序覆盖信息的故障定位


图2 基于程序覆盖信息的故障定位框架

该框架通过对比分析不同版本的YaoBase代码(正常版本代码和故障发生版本代码)对同一个测试用例集的覆盖情况,从而定位程序中的可疑位置,通过开发人员对可疑位置进行确认,从而确定故障所在位置。

故障定位依赖于多个模块的运行,首先需要使用采用图1工具收集待测测试用例的程序覆盖信息,注意需要针对包含BUG的YaoBase版本代码和正常的YaoBase版本代码(不包含BUG)运行待测用例集,收集覆盖信息;其次,使用YaoBase的覆盖率统计工具统计测试完成后,测试用例集对不同版本代码的覆盖信息;然后,通过对比两个不同版本代码生成的覆盖信息的差异,找到覆盖信息不同的部分,并为每一个不同的部分(程序片段)添加一个可疑度度量的标准,并对可疑度进行排序;最后,开发人员通过可疑度排序的结果,从可疑度最大的部分依次确认是否是该部分程序引发的故障。

以下说明一个基于sysbench测试覆盖信息的性能问题分析案例。

首先对两个特定版本(版本v1和版本v2)的代码在相同硬件环境下进行了点查询场景下的性能测试,测试并发线程包括100,200,400,800,1000。测试结果显示在不同线程下,v2比v1的TPS性能平均下降了300。收集图2框架,收集了两个版本代码的覆盖信息并按照可疑度排序的结果,选出可疑代码段。最终筛选出了分布在12个文件中的16个函数,认为这部分代码可能是引起YaoBase性能下降的主要原因。详细分析后,发现16个函数可以分类以下两类:

1.Cache相关的函数的调用差异

v1版本代码中有部分Cache相关的函数被调用,但是在v2版本中Cache相关函数没有被调用,由此分析v1版本TPS较高的原因可能是由于Cache命中引起的。于是调换了两次代码版本执行性能测试的顺序,以确认性能差异是否由Cache命中差异引起。但经过验证,调整两个版本的测试顺序对性能差异影响不大,所以排除了性能差异是由Cache命中引起有差异引起的。

2.SQLError相关的函数调用差异

v1版本的代码中有部分SQLError相关的函数被反复调用,但是在v2版本代码中却没有调用,因此我们分析两个版本代码的性能差异可能是sysbench测试中有部分请求失败,导致SQL未执行,由此影响了性能。

由于当前版本的sysbench不支持返回SQL执行过程中错误的次数,通过分析YaoBase日志,最终确认由于测试中部分请求失败,导致SQL未执行是引起两个版本性能差异的主要原因。

YaoBase通过以上自研的覆盖测试工具,作为确保测试覆盖的有利措施,不仅确保测试全面,也为发生问题时的快速定位提供有效的信息,提高了研发效率。

YAOBASE(尧)分布式数据库是一款自主研制具有独特的增量聚集系统架构的国产金融级NewSQL分布式关系型数据库软件,广泛应用于国民经济关键领域海量、高并发、复杂业务等应用场景。为用户提供高性能、高安全及高可控的数据库能力,为海量数据的安全性及自主可控性提供服务。

YAOBASE(尧)分布式数据库兼容 Oracle/DB2/MYSQL 等特性,具备卓越的水平扩展能力,特有的增量聚集架构能有效的控制分布式事务比例,大大程度上消弱这一关键约束,有效地保证整体性能。因此能更好的适应复杂业务场景,减少用户在迁移过程中对应用程序的改动,有效控制迁移成本、提升迁移效率、降低迁移风险。


公司官网:www.yaobase.com

最后修改时间:2023-12-11 15:36:25
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论