博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql批量提交的优化
阅读量:5993 次
发布时间:2019-06-20

本文共 1425 字,大约阅读时间需要 4 分钟。

hot3.png

.背景

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

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

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

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

可以看出,批量更新时,每条update语句都去mysql请求了一次。并没有打包发给mysql。这种批量的效率肯定不会高。同样方法试了下oracle数据库,oracle驱动做的就很好,一次批量是打包在同一个请求中,是真正的批量提交,效率自然比mysql高。

找了些资料,发现mysql默认情况确实是不支持batch。为了解决上面的问题,需要给JDBC连接加上参数rewriteBatchedStatements=true,并且jdbc driver需要升级到5.1.8以上才支持这个参数。

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

查看包的内容可以发现,这条请求里,封装了30条update语句

 

 

 

 

 

 

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

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

结论

使用rewriteBatchedStatements=true参数,对批量操作,性能有较大提高,从官方解释上看,对普通操作没有影响。 从网上资料和自己的测试上看,暂时没有发现rewriteBatchedStatements=true参数Driver版本5.1.17的问题。 因此,本项目中计划采取下面优化措施:

  • JDBC Driver版本从5.0.4升级到5.1.17。
  • 连接属性中加入rewriteBatchedStatements=true参数

附:

测试环境:

mysql JDBC 3.0.4/3.1.17。

客户端: 普通PC机。

连接池数: 1-10。

10线程并发,批量更新30条记录(索引有效),循环更新100次。

批量更新主要代码:

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

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

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

}

mmpSqlMapClient.executeBatch();

mmpSqlMapClient.commitTransaction();

转载于:https://my.oschina.net/u/658658/blog/516879

你可能感兴趣的文章
万能配置的大屏可视化功能来啦~
查看>>
网站目录文件权限的简单安全设置
查看>>
大众点评Cat源码分析(三)——数据文件(MessageTree)读写磁盘详细逻辑
查看>>
Mac OS X的利器dtrace,能实现process/file monitor,特别便于排错
查看>>
数据中心服务器托管VMware虚拟化网络配置最佳实践
查看>>
SaltStack的配置管理--jinja
查看>>
Docker 安装Nginx
查看>>
android Window Leaked异常的解决方法
查看>>
Linux必学的60个命令(2)-文件处理
查看>>
Diamond设计思想杂碎
查看>>
Android SDK Readme.txt翻译
查看>>
Keras Sequential model 快速入门
查看>>
CentOS7 安装man中文手册
查看>>
sed命令之练习集
查看>>
INNODB 关键特性
查看>>
计算机系统(一)
查看>>
Day-5
查看>>
字符串的处理[C#]
查看>>
CentOS7 下安装 ansible
查看>>
C#连接Excel和生成Excel
查看>>