旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySQL-JDBC驱动引发bug的题目申明【MySQL教程】,MySQL-JDBC

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:56评论:0


导读:题目背景公司是做电商体系的,全部体系搭建在华为云上。体系设想的时刻,考虑到后续的用户和定单数目比较大,须要运用一些大数据库的组件。关联型数据库这块,考虑到后续数据量的快...
题目背景

公司是做电商体系的,全部体系搭建在华为云上。体系设想的时刻,考虑到后续的用户和定单数目比较大,须要运用一些大数据库的组件。关联型数据库这块,考虑到后续数据量的快速增长,不是直接写入MySQL,而是运用了华为云的分布式数据库中间件DDM运用了DDM以后,能够在营业不感知的状况下,直接增添MySQL读实例的个数,线性提拔读机能。也支持中间件层面的分库分表,供应海量关联型数据库的操纵。简直是为电商体系贴身定制的。

DDM本身是以集群情势供应效劳的,对营业开放的是多个衔接IP地点。须要有一层负载平衡。假如运用传统的加LB的情势做负载平衡,会多一层中转,有机能消耗。所以,直接运用了MySQL-JDBC供应的客户端负载平衡才能。

逻辑构造以下图所示:

▲营业经由过程MySQL-JDBC的Loadbalance能提接见多个DDM节点。MySQL-JDBC供应负载平衡才能。

题目申明

MySQL JDBC驱动的客户端负载平衡才能,一直运转得好好,机能嗷嗷叫。然则前一阵子竟无端涌现营业要求失利。我是担任电商定单模块的,涉及到实在的Money,这个题目可吓了宝宝一身盗汗……

因而赶忙查看了背景日记,发明是接见DDM涌现了非常,二话不说直接提了工单给华为云DDM效劳。

不得不说,华为云的效劳照样很好的,不到半个小时就有特地的工作职员联系了我,还跟我一同排查题目。

将我们营业的日记取下来,和DDM的支持职员一同剖析,发明报错以下:根本原因竟然是MySQL驱动的bug,致使StackOverflow当地栈溢出致使……原来是一个Bug激发的血案,误会了DDM效劳,真是抱歉了

从客栈能够看出来,某个非常,触发了MySQL-JDBC的bug,致使轮回挪用,直至栈溢出。在华为DDM支持职员的发起下,对驱动代码进行了反编译,从反编译的状况下,能够看到的确是存在轮回嵌套的能够。

Loadbalance轮询衔接 –>同步新老衔接的状况 ->发送sql给效劳端 -> Loadbalance轮询衔接。

相干代码以下:

这么显著的bug,不太置信MySQL会没有发明。当前我们运用的是5.1.44版本的驱动,查看了下最新的5.1.66的代码,发明的确是修复了这个题目的,代码以下:

经由过程过滤掉SET和SHOW语句,防止了轮回嵌套的发作。

然则5.1.66又引入了新的bug,因为并非每一个挪用postProcess的处所都有SQL,这里的代码会抛空指针非常。MySQL JDBC的开发者都不做测试的吗……

没办法,剖析了下5.1.44的代码,发明经由过程恰当的调解loadBalanceAutoCommitStatementThreshold这个参数的数值,也能够防止轮回嵌套的发作。我们的环境改成了5,修正以后,安稳运转1周,没再涌现过题目。

修正计划

loadBalanceAutoCommitStatementThreshold修正成了5,然则引入的题目是,假如营业包括一些比较耗时的SQL,能够会致使DDM的负载不平衡。不过,就现在状况来看,DDM的机能照样比较强劲的~

相干文章:

PHP驱动MongoDB整数题目的BUG和战略

WebLogic下设置MySql数据库的JDBC驱动

相干视频:

布尔教诲燕十八mysql入门视频教程

以上就是MySQL-JDBC驱动引发bug的题目申明的细致内容,更多请关注ki4网别的相干文章!

标签:MySQL-JDBC


欢迎 发表评论: