最近在做数据迁移工作,已有一堆数据文件,要把这些数据文件写到MySQL 数据库里面去。

MySQL数据库上架了一层服务接口,可以直接调用。博主写了一个迁移程序,放在服务器A上。

背景介绍完毕*****

第一次发现数据文件迁移缓慢时,博主的反应是:服务器A性能不好。 那就给A加内存,加CPU!再开台服务器B,还要开多个进程,同时迁移!

过了一段时间,发现还是很慢。 博主的反应是:多打日志,看慢在哪吧。。。加了后就发现300多行数据插入,居然要十几秒,震惊了!

于是博主觉得,是不是网络不好。这个时候看了下新开的B,发现挺快的啊。。。博主更加认定是网络问题,A和B怎么一个好一个就不好呢。。。赶紧找IT看看...

可是,可是IT说这两台服务器没什么区别。。。

肿么会呢。。。

博主不相信啊。。。

几个小时候后再看了看B,发现B也变慢了。。。。。

有同事说,是不是没有批量插入呀。。。肿么可能呢,用的是jdbctemplate的batchupdate接口呢。。。

可是也没有别的办法了。。。博主只好怀疑下这个接口。。。

google一番,还真有人提到一个很重要的知识。batchupdate接口要真实现批量的话,得在连接数据库的时候设置两个属性。

那就是jdbc:mysql//host:port?useServerPrepStmts=false&rewriteBatchedStatements=true

关于这两个属性,我就不细说了,有需要的请戳这里

知道这么个事实,博主激动啊。。。赶紧添上,期待能看到飞一般的迁移速度!

然而,博主失望了。。。为啥呢。。。为啥呢。。。别人都说加了这两个参数,速度至少提升10倍啊。。。怎么到博主这就啥反应也没有呢。。。

是不是还是没有批量!!!先想想,batchupdate到底是怎么帮忙批量的。。。

继续google...

知道了,原来是因为insert into A values(a,b,c),(d,e,f),(g,h,i)...;比N条单独的insert into A values(x,x,x);要快很多!

那是不是因为博主的程序里面有什么问题,导致batchupdate没能帮博主拼成values(a,b,c),(d,e,f)...这种形式呢。。

果然,因为博主用到了MySQL的一个特殊用法,ON DUPLICATE KEY UPDATE ,博主是这么用的:

insert into A(id,name,age) values(1,'小明',‘5’) ON DUPLICATE KEY UPDATE name='小明', age='5';

这就是问题所在啊!

应该要这么写:

insert into A(id,name,age) values(1,'小明',‘5’) ON DUPLICATE KEY UPDATE name=VALUES(name), age=VALUES(age);

这样写的话,通过看MySQL日志就可以看到,MySQL收到的执行语句就是:

insert into A(id,name,age) values(1,'小明',‘5’), values(2,'小王',‘6’),(3,'小张',‘3’) ON DUPLICATE KEY UPDATE name=VALUES(name), age=VALUES(age);

最后,博主改了一通代码,插入1000多条数据只要200多毫秒啦~~~~~~~~~~~

扯了很多废话。。。。。。

博主想说,遇到问题,要有耐心。。。。

      遇到难题,要怀疑一切可以怀疑的。。。

听上去,是不是可以总结为,遇到问题,不要偷懒,动手去测试。哈哈哈哈哈哈

[MYSQL] 记一次MySQL性能调优的更多相关文章

  1. MySQL管理之道:性能调优、高可用与监控内置脚本

    MySQL管理之道:性能调优.高可用与监控内置脚本 随书附送脚本 keepalive配置文件和脚本开源工具pssh批量管理服务器(python) 下载地址 http://files.cnblogs.c ...

  2. MySQL管理之道:性能调优、高可用与监控》迷你书

    MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎2.充分利用CPU多核处理能力3.提高刷写脏页数量和合并插入数量,改善I/O4. ...

  3. MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

    最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是<MySQL管理之道:性能调优.高可用与监控>. 内容涵盖性能调优(包括sql优化等).备份.高可用,以及读写分离 ...

  4. MySQL管理之道,性能调优,高可用与监控(第二版)pdf下载

    MySQL管理之道,性能调优,高可用与监控(第二版) 书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和新知识的拓展,同时也针对运维人员.DBA等相关工作者会遇到的有代表性的疑难问题给出了 ...

  5. 记一次GreenPlum性能调优

    在部署了的GreenPlum集群中进行数据查询时,发现数据量一旦大了,查询一跑就中断,提示某个segment中断了连接. ERROR 58M01 "Error on receive from ...

  6. 记一次idea性能调优

    因自研的自动化测试工具包含压测功能,在自己本地代码开发完毕后进行测试,对目标接口进行1000次访问,发现idea在执行结束后变的异常卡顿,怀疑是idea工具或者程序代码存在问题,遂进行排查. ---- ...

  7. MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化

    第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...

  8. MySQL性能调优与架构设计——第12章 可扩展设计的基本原则

    第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体 ...

  9. Mysql千万级数据性能调优配置

    背景: 笔者的源数据一张表大概7000多万条,数据大小36G,索引6G,加起来表空间有40G+,类似的表有4张,总计2亿多条 数据库mysql,引擎为innodb,版本5.7,服务器内存256G,物理 ...

  10. Mysql 性能调优之Memory 计算

    最近在做mariadb 数据库性能调优时发现,配置文件影响着整个数据库的性能的百分之80(这么说不为过),现在就我出现的问题来分析. 在压测mariadb时,tail 日志.发现压测到一半 ,数据库会 ...

随机推荐

  1. oracle 行转列 列转行

    行转列 这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from du ...

  2. jP61 2.15

    import java.util.Scanner; public class Distance { public static void main(String[] args) {    Scanne ...

  3. linux下快速列出文件列表的方法

    前言 这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录.于是如何快速获取文件 ...

  4. C-图文上边对齐

    1.效果 1.1 样式设置 2 效果  2.1 样式

  5. http://zthdd.bokee.com/6189963.html

    http://zthdd.bokee.com/6189963.html先保存

  6. windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)

    以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...

  7. WPF DataGrid显格式

    Guide to WPF DataGrid formatting using bindings Peter Huber SG, 25 Nov 2013 CPOL    4.83 (13 votes) ...

  8. [js高手之路] 设计模式系列课程 - jQuery的extend插件机制

    这里在之前的文章[js高手之路] 设计模式系列课程 - jQuery的链式调用与灵活的构造函数基础上增加一个extend浅拷贝,可以为对象方便的扩展属性和方法, jquery的插件扩展机制,大致就是这 ...

  9. [解读REST] 6.REST的应用经验以及教训

    衔接上文[解读REST] 5.Web的需求 & 推导REST,上文根据Web的需求推导出了REST架构风格,以及REST的详细描述和解释.自从1994年以来,REST架构风格被用于指导Web架 ...

  10. Ubuntu安装Flash视频插件

    http://www.linuxidc.com/Linux/2014-05/101095.htm