1.现象:生产准备多活项目,进行一阶段切入mycat时候发现耗时变长。
生产上接入mycat后接口裸耗时增加超过20%;
进一步分析之前mycat未接入对比的耗时
通过监控发现各个接口中调用dao层查询的地方耗时都有增加其中有一个增加了11ms
后来发现这是一个batchupdate的查询。经过压测发现查询数量增多时延迟变长。
分析如果是mycat解析问题延时差别不该有这么大这么大的延时更像是多次网络开销造成。
2.本地开始部署测试环境使用TESTNG验证结论,中间有使用到抓包工具ethereal和切面打印dao层耗时。
第一次使用直连DB2和对比接入mycat,batchupdate七个语句

问题复现之后,本地debug代码当执行到batchupdat时候开始抓包,执行结束之后停止抓包分析问题
发现mycat开启预编译先把sql语句传过去之后,之后每次只传送一行数据进行更新然后等待数据库回复,进行了七次交互。
对比DB2
发送语句之后直接一次性发送了所有的参数,如果超过MTU(网络最大传送单元1500字节)才进行拆包。
3.进一步研究发现开启rewritedbatchstatement=true时候mycat并不支持
研究分析源码发现mysql驱动开启参数之后会向mycat发送命令是否支持批处理
发现这次通信过程中mycat回复了unknown command!
所以mycat并不支持批处理。需要在批处理使用多的地方多注意!!
生产接入mycat后数据库查询耗时变久
最新推荐文章于 2022-06-29 15:16:48 发布