如何从头到脚彻底解决一个MySQL Bug?华为云数据库高级专家带你看

华为云数据库在新版本测试中发现MySQL8.0存在潜在Bug,涉及LeftHashJoin的内表处理。通过简化查询和执行计划分析,发现在特定条件下,ZeroRowsIterator::SetNullRowFlag被错误地设置为False,导致不正确的结果。修复方法是始终将其设置为True。华为云团队的专业分析和修复确保了数据库的稳定性和准确性。
摘要由CSDN通过智能技术生成

在这里插入图片描述
说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL。

华为云数据库新版本在发布之前,会面临一系列严苛的测试规则,除了要求通过MySQL的所有测试用例之外,还需要通过由华为百万级更丰富、更贴近用户业务场景的测试用例构筑的测试防护网,以此充分验证新版本是否满足用户经典场景的稳定性。

正是在这样严苛的验证过程中,我们发现了MySQL的一个潜在Bug。

Bug描述

测试环境:
基于相同的测试用例、数据集,分别测试MySQL 8.0.22, MySQL 8.0.26,与华为云GaussDB(for MySQL)的返回结果。

测试语句:

select  
  subq_0.c2 as c0
from 
  (select  
        ref_6.C_STATE asc0, 
        case whenref_6.C_PHONE is not NULL then ref_5.C_ID else ref_5.C_ID end
           asc1, 
        floor(
          ref_3.c_id)as c2
      from 
       sqltester.t0_hash_partition_p1_view as ref_0
             right join sqltester.t4 as ref_1
             on (EXISTS (
                 select  
                     ref_1.c_middle as c0
                   from 
                     sqltester.t1 as ref_2
                   where ((false) 
                       and ((true) 
                         or (true))) 
                     or (false)
                   ))
            innerjoin sqltester.t0_range_key_subpartition_sub_view as ref_3
            on(EXISTS (
               select  
                   ref_0.c_credit as c0, 
                   ref_1.c_street_1 as c1, 
                   ref_4.c_credit_lim as c2, 
                   ref_3.c_credit as c3
                 from 
                   sqltester.t0_hash_partition_p1 as ref_4
                 where true
                 ))
          left joinsqltester.t10 as ref_5
            innerjoin sqltester.t11 as ref_6
            on(true)
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值