最近在做数据迁移工作,已有一堆数据文件,要把这些数据文件写到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. Flip Game poj 1753

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29731   Accepted: 12886 Descr ...

  2. hdu 1542 线段树 求矩形并

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. poj1006中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103506   Accepted: 31995 Des ...

  4. JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

    前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...

  5. Java Socket通信以及可能出现的问题解决

    Java中基于TCP协议实现网络通信的两个类:客户端的Socket和服务器端的ServerSocket. Socket通信模型如图所示: 不管Socket通信的功能有多复杂,任何socket通信过程的 ...

  6. Python实战之Selenium自动化测试web刷新FW

    需求:将手工登录,手工刷新服务器的FW转化为Python+Selenium实现自动化操作. 1.创建用户表,实现数据与脚本分离.需要读取模块. 2.自动化刷新FW. 不说话,直接上代码: 1userd ...

  7. Python自学笔记-lambda函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 匿名函数 通过 ...

  8. Python系列之模块、和字符串格式化

    Python 模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 模块分为 ...

  9. java web Servlet 学习笔记 -3 会话管理技术

     Cookie和HttpSession 什么是会话: 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 每个用户在使用浏览器与服务器进行会话的过 ...

  10. sql2008 发送邮件

    --"管理"-"数据库邮件"-右键"配置数据库右键" Exec msdb.dbo.sp_send_dbmail @profile_name= ...