`
zhoushu126
  • 浏览: 81658 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

mysql批量提交的优化(转)

 
阅读更多

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();

分享到:
评论

相关推荐

    MySQL批量SQL插入各种性能优化.docx

    以下是一些针对MySQL批量SQL插入的性能优化策略: 1. **批量插入数据** - 传统的做法是逐条插入数据,但这种方式会导致大量的SQL语句执行和日志写入,从而降低性能。优化的方式是将多条插入语句合并为一条,如示例...

    根据excel数据批量新增或更新mysql的表

    本文将详细介绍如何使用Python编程语言结合Excel文件,批量新增或更新MySQL数据库中的数据。标题所指的"根据excel数据批量新增或更新mysql的表"是一个常见的需求,特别是在数据分析、数据导入导出或者自动化报表生成...

    MySQL批量SQL插入性能优化详解

    MySQL批量SQL插入性能优化是数据库管理员和开发人员面临的重要任务,特别是在处理大数据量的系统时。本文将深入探讨几种能够显著提升MySQL InnoDB存储引擎插入性能的方法。 首先,一种有效的优化策略是通过合并多条...

    MySql批量插入优化Sql执行效率实例详解

    本篇将详细介绍MySQL批量插入优化及其对Sql执行效率的影响,以及通过实例解析如何实现这一优化。 批量插入(Bulk Insert)是一种提高数据插入效率的方法,它允许一次提交多条插入语句,减少了与数据库的交互次数,...

    MySQL实现批量插入以优化性能的教程

    以下是一些关于如何利用MySQL的InnoDB存储引擎优化批量插入性能的方法: 1. **单条SQL语句插入多条数据**: 将多条独立的INSERT语句合并成一个包含多个VALUES子句的单一SQL语句,可以显著提高插入速度。这是因为...

    Mysql Update批量更新的几种方式

    在MySQL中,批量更新数据是常见的操作,尤其在处理大量数据时,效率...总之,了解并掌握这些批量更新技巧对于优化数据库操作和提升系统性能至关重要。通过合理选择和组合这些方法,可以有效地处理大规模数据更新任务。

    mysql初装优化精要

    ### MySQL初装优化精要点详解 #### 一、MySQL初装优化概述 MySQL数据库作为一款广泛使用的开源关系型数据库管理系统,在初次安装后进行适当的优化至关重要。优化不仅可以提高系统的整体性能,还能确保数据库能够...

    利用ADO批量提交示例源码

    批量提交是数据库操作中的一个优化策略,它避免了每次只处理一条记录的低效方式。在传统的单条记录提交中,每次插入、更新或删除都会引发一次数据库的读写操作,这会带来额外的开销。而批量提交则是将多条操作合并成...

    mysql性能优化

    10. **延迟写入与批量提交**:通过设置适当的事务隔离级别,可以利用延迟写入策略减少磁盘I/O。同时,批量处理多条INSERT语句也能提高性能。 11. **优化器选择**:了解`optimizer_switch`变量,根据实际需求调整...

    MySQL批量SQL插入性能优化

    MySQL批量SQL插入性能优化是数据库管理员和开发人员关注的重要议题,尤其是在处理大数据量时。针对描述中的内容,本文将详细探讨几种提升MySQL插入性能的方法,适用于处理报表系统等需要大量数据导入的场景。 1. **...

    MySQL 5.7 批量写入性能测试对比.docx

    MySQL 5.7 作为一款广泛使用的开源关系数据库管理系统,对批量写入性能的优化至关重要。本篇文章主要探究了在数据交换场景下,如何从表结构、索引、数据形态等方面有效提升批量写入 MySQL 的性能。 一、one_value ...

    MySQL性能优化权威指南

    最后,书中还提到了如何将批量更新视为插入操作,利用MySQL的“INSERT ON DUPLICATE KEY UPDATE”功能,这一功能在Connector/J 5.1.8版本中被重写成多值插入的形式。需要注意的是,在使用自增ID的情况下不适用此方法...

    基于Mysql的表转HBase小Demo

    5. **最佳实践**:在实际应用中,可能需要考虑数据迁移的批量处理、错误处理和性能优化。例如,可以使用批处理工具如Hadoop MapReduce进行大数据量的迁移,或者通过设置合理的HBase表分区策略来提高写入性能。 总之...

    PHP向MYSQL数据库批量添加数据

    批量添加数据通常涉及接收用户通过表单提交的数据,或者处理来自其他数据源(如API)的批量数据。在本例中,数据通过`$_POST`全局数组接收。下面是一个简单的示例: ```php require_once 'conn.php'; $data = ...

    java 下执行mysql 批量插入的几种方法及用时

    在Java中,执行MySQL批量插入数据有多种方法,每种方法在性能上都有所不同。以下是对这些方法的详细分析: 方法1:单条插入 这是最基础的插入方式,每次循环都创建一个新的SQL语句并执行。这种方法的效率最低,因为...

    10倍以上提高Pentaho Kettle的MySQL写入速度

    1. **批处理**: MySQL支持批量插入,即一次提交多个INSERT语句,减少网络通信开销,提高效率。Kettle可以通过增大批处理大小来实现这一点。 2. **索引优化**: 创建合适的索引可以加速查询,尤其是对于写操作,避免...

    mysql_批量数据脚本..

    8. **性能优化**:通过合理设置索引、调整批处理大小、使用批量操作等方式优化脚本性能。 9. **备份与恢复**:在执行批量操作前,通常需要对数据库进行备份,以防万一出现问题可以恢复。 10. **脚本自动化**:使用...

    EF批量更新、批量插入、 批量删除使用的是EFUtilities,免费的操作简单,速度超级快

    批量更新同样是一个重要的优化点。在EF中,更新数据通常涉及到查询单个实体,修改其属性,然后保存更改。这在处理大量需要更新的记录时效率低下。EFUtilities提供了`UpdateBulk()`方法,允许开发者传递一组已经更新...

Global site tag (gtag.js) - Google Analytics