收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » 数据库 »有趣的 Bugs #28 —— MySQL 5.6 回归测试中的问题  XML
发表人 内容
rtxaa
[头像]

交流经验:
总积分:110
级别:普通会员
注册时间: 2011-11-04
文章: 4
离线

有趣的 Bugs #28 —— MySQL 5.6 回归测试中的问题

对于MySQL社区来说2013是出彩的一年。随着MySQL 5.6 GA的发布,一款具有更大吞吐量、更高稳定性加上oracle方面与MySQL社区的频繁互动与合作为我们这年带来了很多的新鲜感触和远景。

不过新版本当中还是有不少顽固的问题。这些问题都引入了很多回溯缺陷regression bugs

依照以往的经验来说(我预计2014依然如此)有回溯(为了新功能而破坏原有功能)作用的缺陷在  http://bugs.mysql.com被标记为" regression"。这样更容易识别,这个连接就是那些缺陷列表 here is the list of regression bugs that affect MySQL 5.6 (有些回溯缺陷只出现在一些主版本上,就像有些缺陷修复只发生在某些版本上).

在5.6版本中只有31个开放的缺陷。但先别太乐观了。由于个别Oracle的工程师并没有遵照原来的习惯将那些回溯缺陷标记为"regression",所以还会漏掉很多回溯缺陷。以 Bug #69623为例,"since 5.5.32 & 5.6.12, innodb cant start with own multi-file tablespace"

使用多个以制表符间隔的文件时Innodb将无法启动。看标题就知道这是个回溯缺陷,但却没有被标记。所以还是会有很多未发现的缺陷(有些只有实际操作后才能发现)尽管大家都知道使用自动化测试"Automated testing 和设计良好的测试用例 test cases 能够减少缺陷,但不得不承认即使有了这些手段还是不能百分百确保质量的完善(也许会比其他提供MySQL版本的公司稍微好点).

我们看一下2013年在MySQL5.6当中最近发现的10个缺陷,来给大家一个直观的认识:

  • Bug #71244, "Wrong result computation using ALL() and GROUP BY".

    使用ALL()和GROUP BY功能结果错误

    之前的版本像是5.6.11是没有这个问题的。这个缺陷可以简单的采用避免在HAVING语句中使用聚合列的别名来修复,即便如此简单,回归测试还是没有发现它.


  • Bug #71220, "pow() function returns an error for bad values".

    输入特殊值后Pow()返回错误

    这是个典型的回溯缺陷。开发团队为了使MySQL语法更完善而做了更改。当从用户的角度来说,未得到任何的升级提示或是特别的说明。结果就是好心办坏事.

  • Bug #71095, "Wrong results with PARTITION BY LIST COLUMNS()".

    当我解决了客户提出的一个类似问题后提了这个缺陷(不同的方法将table分区)。这依然是很郁闷的事情(就和其他回溯缺陷一样)后来花了些时间添加了一个简单的测试用例。以后这个问题很快就能被检测出来并由Mattias Jonsson打了补丁(补丁解决了我的测试用例发现的问题)希望5.6.16中会修复这个问题.

  • Bug #71055, "Using IF EXISTS(SELECT * ...) acquires a lock when using read uncommitted". READ UNCOMMITTED isolation level功能很少被使用,所以也没办法确保被测试到。而locking SELECT被使用的几率就更小了。所以只能说测试用例并没有覆盖到READ UNCOMMITTED功能,不然Oracle的工程师不可能忽略这个自5.1.x后就出现的问题.

  • Bug #70819, "SHOW ENGINE INNODB MUTEX does NOT work with timed_mutex properly".

    就在准备PERFORMANCE_SCHEMA-相关的演讲时我就注意到这个未被标识出5.6或是5.5版本中的问题PERFORMANCE_SCHEMA不单单会替换SHOW PROFILE还会替换其他一些SHOW语句。但对于应该已经正常的功能(按照官方文档的说法),无论怎么说,都不应该错删其他语句.

  • Bug #70617, "Default persistent stats can cause unexpected long query times".

    这是个很好的例子代表了添加新功能后未能完善相关文档而造成的性能回溯问题。对于普通用户会发现在执行某些查询后会变得很慢。接着就会耗费好几个人好几个小时(希望不是几天)来找到问题的根源进而真正的解决掉这个问题,确保以后不会再出现。我曾经完整的post 跟踪过这个问题。那些足够详细的细节将迫使Oracle的工程师不得不认真面对这个问题...

  • Bug #70598, "Premature expression evaluation prevents short-circuited conditionals". 又一个MySQL从5.1升级到5.5后某些功能无法使用的例子。没有哪个版本可以提供帮助。即便解决办法找到了,难道仅仅因为用户升级了版本就要去更改代码,而去避免只有遇到后才算是问题的缺陷,这个想法本省就很有问题.

  • Bug #70491, "SELECT DISTINCT may return a wrong result if a join buffer is involved". 另一个性能优化后的回溯。这个应该能够被QA及时发现。这是MariaDB的Babaev提出的缺陷。说点闲话,5.6中很多缺陷都是在紧耦合设计后出现的,是该再好好考虑一下了.

  • Bug #70466, "No results when filesorting with a correlation in subquery's HAVING clause". 5.6版本中HAVING语句的回溯问题。Oracle开始依据6.0和其他一些新的概念进一步优化MySQL5.6,但很明显回归测试并没有提高测试覆盖率.

  • Bug #70351, "ALTER TABLE ADD CONSTRAINT xxx FOREIGN KEY adds two constraints". 大部分情况下MySQL主版本上的修复/更新都会发生。但就像这个问题一样,测试应该更加仔细的考虑回归测试覆盖率,否则就是出现回溯缺陷。这个缺陷就是因为一个小小的更新造成回溯缺陷的产生.

我要说的到了这里应该告一段落了,新年许愿的时刻马上就到了。我希望所有Oracle MySQL的工程师们在以后的工作中能更加审慎的考虑回归测试!

对Oracle MySQL团队的管理者们我希望你们能注意到那些处理了来自社区中缺陷的同僚们所付出过的努力,并嘉奖那些真正关注并努力过的个人。小小提示一下,重点关注那些正在解决上述缺陷的人,那些验证了这些缺陷的人(超过5个),那些添加了更多测试用例和提供补丁的人。这些人都是你们最有价值的财富,我希望你们能真正关注起来!


推广链接
精品视频课程推荐

Java Web开发理论部分视频教程
系统掌握开发实际的Java Web应用所需的理论知识和技能(Servlet、Jsp、JavaBean、TagLib、EL、JSTL、MVC模式、连接池DataSource、JNDI等知识)。涉及项目:在线投票计数、在线人数统计、登录检查、购物车、商品管理、非法字符替换等多个随堂演示小应用。

Spring3开发实战-独家视频教程
从零到精通Spring3的开发知识;IoC/DI的思想、IoC/DI的运行流程、IoC/DI的开发指导、AOP的思想、AOP的运行流程、AOP应用的设计、Spring对JDBC和Hibernate的支持、Spring的事务、SSH的集成应用

ant基础实战视频教程
学习项目构建工具ant的使用,彻底掌握在实际的开发中应用ant进行项目构建

Oracle性能优化视频教程
深入浅出地学习Oralce优化的原理与技巧,内容权威全面、细致深入、重点突出,剖析提高挈领,示例丰富充盈,实例和理论完美结合。1:百万级数据量示例;系统高可靠性、高健壮性原理及策略;热表操作;完整性策略;数据库死锁如何解决; 2:索引表空间如何推算规划;b-tree索引的存储结构、索引扫描方式;Oracle执行计划的如何阅读、推荐的索引使用策略; 3:CBO模型;自动化表分析任务、能大幅提高索引性能的原子级表基础约束策略、表分析原理、表间关系和模式; 4:逻辑存储结构、物理存储结构、内存结构、进程结构;ASM存储、逻辑存储结构单元;Oracle实例结构之检查点及实例恢复

Oracle数据库开发及SQL基础实战视频教程
Oracle的基本使用,深入sql语句编写,使用jdbc存取数据库

 
交流首页 » 数据库
前往:   

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网