关于mysql 批量更新开关在mycat(数据库中间件)中失效的问题
场景:
我们公司的一个app应用使用的数据库是mysql。测试环境是使用数据库连接池连接数据库,生产环境是应用服务端连接mycat(数据库中间件),再通过mycat连接两个主从库,就是通俗说的多数据库应用。
有一个需求涉及批量更新的操作,所以按照常规配置在连接池配置的url后面添加参数
?rewriteBatchedStatements=true,放到测试环境上没问题,之前导入10000条数据要5~10s(测试环境,不能算严格,还有页面展示处理时间),放上该参数后就变成1s左右,效果明显。我们就高高兴兴地放到了生产上,偷偷测试了一下(理论上是不应该的,好吧我们的项目比较奇葩),很遗憾,批量导入报了个错Unknown command。后来百度了一下,找到如下解决办法:
在数据库连接池url设置处添加&allowMultiQueries=true参数即可解决(原来那一串不用了)。故事还没完……
我们在生产环境又偷偷测试了一下,导入100条,不再报错,OK。但是导入10000条就只看到日志执行完insert语句后就没有返回了,也就是莫名奇妙终止了~~~~~(在场的运维内心崩溃,到底行不行啊~~~)。后来发现服务部署的tomcat的内存没有配置,配了几百M,就愉快的跑起来了~~~~
要是有人问我为什么会这样,我真没法回答,只是遇到并解决了,晒出经历,希望可以帮助类似情况的人。或者大神知道的也可以教育一下我
