mysql批量提交的优化

  • 时间:
  • 浏览:1
  • 来源:uu快3app赚钱_uu快3大小计划注册

连接池数: 1-10。

用户修改布局时,需用批量更新mysql的xxxx_layout_xxxx表。批量操作的数据量是2-150条/次。批量操作是这次项目在技术上比较关键的一另有一个点,后后批量操作做过性能上的测试,mysql端间题不大,7000+tps,Java端的传输传输速率或者 差,有优化空间。

.背景

批量更新主要代码:

mmpSqlMapClient.startBatch(); // 批量提交

mmpSqlMapClient.commitTransaction();

for (ChannelLayoutDO channelLayout: userChannelLayoutList) {              mmpSqlMapClient.update(“UserChannelLayoutDAO.updateSort”, channelLayout);

}

附:

找了些资料,发现mysql默认清况 人太好是不支持batch。为了补救上边的间题,需用给JDBC连接加上参数rewriteBatchedStatements=true,或者 jdbc driver需用升级到5.1.8以上才支持本身 参数。

客户端: 普通PC机。

mysql JDBC 3.0.4/3.1.17。

增加参数rewriteBatchedStatements=true,driver版本升到5.1.17后,再次测试,批量更新150条的时间从35ms降到了11ms。截包后,还需用看出底层的机制,或者 变成批量提交:

10系统系统进程并发,批量更新150条记录(索引有效),循环更新1150次。

mmpSqlMapClient.executeBatch();

查看包的内容还需用发现,这条请求里,封装了150条update得话

mmpSqlMapClient.startTransaction(); // 使用事务

测试环境:

使用rewriteBatchedStatements=true参数,对批量操作,性能有较大提高,从官方解释上看,对普通操作这麼影响。 从网上资料和或者 人的测试上看,暂时这麼发现rewriteBatchedStatements=true参数Driver版本5.1.17的间题。 或者 ,本项目中计划采取下面优化土依据:

可见,当批量条数增加时,rewriteBatchedStatements=true的性能有很大优势。即使数量少时,也还是有一定优势。

经测试,批量更新150条记录的时间是35ms。或者 数据在mysql服务端中会有内存缓存,批量更新150条的时间用了35ms,感觉或者 长,试图找出由于。

还需用看出,批量更新时,每条update得话都去mysql请求了一次。并这麼打包发给mysql。本身 批量的传输传输速率肯定不要再高。同样土依据试了下oracle数据库,oracle驱动做的就很好,一次批量是打包在同一另有一个请求中,是真正的批量提交,传输传输速率自然比mysql高。

对批量的性能进行了测试,优化。过程如下

使用截包工具(这里用的ethereal),抓取mysql的数据包,下面是一次批量更新的数据包:

横坐标: 一次批量更新的条数。纵坐标:更新1150次所用时间(ms)

结论