mysql批量提交的优化
http://www.w3ccollege.org/mysql/mysql-turning/mysql-innodb-pre-reading.html
背景
用户修改布局时,需要批量更新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();
相关推荐
在网上也看到过另外的几种方法,比如说预处理SQL,比如说批量提交。那么这些方法的性能到底如何?本文就会对这些方法做一个比较
本系统服务器环境为php和mysql; 在线报名系统:用于统计报名者各类信息(姓名、邮箱、身份证号、联系地址、报名科目、备注等等); 支持新注册提交、个人信息查看和修改,管理员对全局数据的查看、删除和修改,批量...
《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...
[wordpress插件]价值200元百度SEO插件合集+seo优化插件含百度站长、百度地图sitemap、关键词排名查询监控、网站蜘蛛、robots、图片alt标签、天级推送、死链查询、百度自动推送、批量提交URL到站长、百度收录查询、...
(1)先写志(write log first),将随机写优化为顺序写 (2)将每次写优化为批量写 (1)事务提交时,将redo log写Log Buffer,就
4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 博客系统安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.0 及...
[优化]后台添加功能提交按钮显示 [优化]删除默认测试账号 [优化]识别手机端,跳过缓存标识 [优化]启用默认地区URL优化 [新增]banner地区选择功能 [修复]批量生成TAG内容名称替换BUG [优化]资源管理需要内容...
2、加强文件管理功能,增加批量删除文件。增加 新的文件属性显示方式和宿主。增加目录改名 。增加查看网站根目录和当前目录下的所有可 写子目录。在 WIN主机下自动探测所有分区以 及分区类型。 3、增加通过MYSQL...
自定表单 - 可以开设自定义表单栏目,自定义表单字段,管理提交的反馈信息 品牌车型管理 - 可设置国内和国外品牌及其下属车型,可设置每种车型的详细参数,用户按此品牌车型发布报价 新车报价管理 - 管理用户发布的...
闪灵CMS学校建站系统(PC+手机+微信端)是以PHP+MYSQL进行开发的响应式全屏企业网站。 程序特色: 一、使搜索引擎更加容易抓取和索引 二、提供更多的功能,提高用户的友好体验 三、可用性的提高,提高用户的友好体验 ...
然后点一下《批量设置》跳出《设置上方统一数字》与《按下方输入框设置》,先选择《设置上方统一数字》,然后提交,再继续点《批量设置》跳出《设置上方统一数字》与《按下方输入框设置》,这次选择的《按下方输入框...
然后点一下《批量设置》跳出《设置上方统一数字》与《按下方输入框设置》,先选择《设置上方统一数字》,然后提交,再继续点《批量设置》跳出《设置上方统一数字》与《按下方输入框设置》,这次选择的《按下方输入框...
4.后台增加批量选择操作(完成) 5.后台增加留言板管理(完成) 6.后台增加留言回复功能(完成) 7.后台增加用户留言管理(完成) 8.搜索结果增加翻页条(完成) 9.首页分类块增加点击量和tag标签(完成) 10....
5、优化方便,后台可设置关键词,描述等信息,并且融合了网址在线提交地址,方便搜索引擎收录; 6、模板漂亮,模板采用流行的9.9促销包邮界面形式,美观大方; 7、免费使用,无论是否授权用户,都可以直接使用; ...
简练了 Mysql 数据库操作类文件。 改写了 js.php 文件的代码,支持调用个别分类。 修正若干细节。 Sarticle v1.5 功能列表 增加了两个类文件,采用面向对象技术。 改善程序算法,几乎完全改写了后台。 所有配置信息...
4:支持buldcopy的批量事务提交 5:支持查询数据模型转换 6:支持异常抛出和事务中断 7:支持跨数据库事务提交(多个事务) 8:通过优化支持SQL 9:分页查询模式,支持转换,选择行模式 10:支持多个数据库 11:...
9、支持一键提交熊掌号 10、根目录/子目录安装 安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.0 及以上 本地电脑推荐使用 PHPstudy 安装,及安装在合适的网站...