MySQL 插入(insert)性能测试
2016-04-25 17:54
603 查看
转自:http://elf8848.iteye.com/blog/1547398
论rewriteBatchedStatements=true的重要性。。。。
作者:赵磊
博客:http://elf8848.iteye.com
测试环境: 笔记本电脑
CPU:I5
系统:MAC OS 10.7
内存:8G
硬盘:5400转,笔记本硬盘
MySql 版本:Oracle官网下载的mysql-5.5.24-osx10.6-x86_64, 默认安装
MySql JDBC驱动版本:mysql-connector-Java-5.1.20
MySql建表语句:
CREATE TABLE `dev`.`test_insert` (
`id` INT NOT NULL ,
`uname` VARCHAR(10) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
测试结果 :
创建连接用时355 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql非批量插入10万条记录,用时12128 ms,平均每秒执行8245条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql非批量插入10万条记录,用时11667 ms,平均每秒执行8571条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql非批量插入10万条记录,用时11744 ms,平均每秒执行8514条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql非批量插入10万条记录,用时14796 ms,平均每秒执行6758条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql非批量插入10万条记录,用时15917 ms,平均每秒执行6282条
----------------------------------
创建连接用时14 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql非批量插入10万条记录,用时89030 ms,平均每秒执行1123条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql批量插入10万条记录,用时1298 ms,平均每秒执行77041条
----------------------------------
创建连接用时16 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql批量插入10万条记录,用时1221 ms,平均每秒执行81900条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql批量插入10万条记录,用时1418 ms,平均每秒执行70521条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql批量插入10万条记录,用时2252 ms,平均每秒执行44404条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql批量插入10万条记录,用时9139 ms,平均每秒执行10942条
----------------------------------
创建连接用时10 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql批量插入10万条记录,用时80250 ms,平均每秒执行1246条
----------------------------------
测试代码:
作者:赵磊
博客:http://elf8848.iteye.com
测试环境: 笔记本电脑
CPU:I5
系统:MAC OS 10.7
内存:8G
硬盘:5400转,笔记本硬盘
MySql 版本:Oracle官网下载的mysql-5.5.24-osx10.6-x86_64, 默认安装
MySql JDBC驱动版本:mysql-connector-Java-5.1.20
MySql建表语句:
CREATE TABLE `dev`.`test_insert` (
`id` INT NOT NULL ,
`uname` VARCHAR(10) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
测试结果 :
创建连接用时355 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql非批量插入10万条记录,用时12128 ms,平均每秒执行8245条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql非批量插入10万条记录,用时11667 ms,平均每秒执行8571条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql非批量插入10万条记录,用时11744 ms,平均每秒执行8514条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql非批量插入10万条记录,用时14796 ms,平均每秒执行6758条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql非批量插入10万条记录,用时15917 ms,平均每秒执行6282条
----------------------------------
创建连接用时14 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql非批量插入10万条记录,用时89030 ms,平均每秒执行1123条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql批量插入10万条记录,用时1298 ms,平均每秒执行77041条
----------------------------------
创建连接用时16 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql批量插入10万条记录,用时1221 ms,平均每秒执行81900条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql批量插入10万条记录,用时1418 ms,平均每秒执行70521条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql批量插入10万条记录,用时2252 ms,平均每秒执行44404条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql批量插入10万条记录,用时9139 ms,平均每秒执行10942条
----------------------------------
创建连接用时10 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql批量插入10万条记录,用时80250 ms,平均每秒执行1246条
----------------------------------
测试代码:
论rewriteBatchedStatements=true的重要性。。。。
作者:赵磊
博客:http://elf8848.iteye.com
测试环境: 笔记本电脑
CPU:I5
系统:MAC OS 10.7
内存:8G
硬盘:5400转,笔记本硬盘
MySql 版本:Oracle官网下载的mysql-5.5.24-osx10.6-x86_64, 默认安装
MySql JDBC驱动版本:mysql-connector-Java-5.1.20
MySql建表语句:
CREATE TABLE `dev`.`test_insert` (
`id` INT NOT NULL ,
`uname` VARCHAR(10) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
测试结果 :
创建连接用时355 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql非批量插入10万条记录,用时12128 ms,平均每秒执行8245条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql非批量插入10万条记录,用时11667 ms,平均每秒执行8571条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql非批量插入10万条记录,用时11744 ms,平均每秒执行8514条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql非批量插入10万条记录,用时14796 ms,平均每秒执行6758条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql非批量插入10万条记录,用时15917 ms,平均每秒执行6282条
----------------------------------
创建连接用时14 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql非批量插入10万条记录,用时89030 ms,平均每秒执行1123条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql批量插入10万条记录,用时1298 ms,平均每秒执行77041条
----------------------------------
创建连接用时16 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql批量插入10万条记录,用时1221 ms,平均每秒执行81900条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql批量插入10万条记录,用时1418 ms,平均每秒执行70521条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql批量插入10万条记录,用时2252 ms,平均每秒执行44404条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql批量插入10万条记录,用时9139 ms,平均每秒执行10942条
----------------------------------
创建连接用时10 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql批量插入10万条记录,用时80250 ms,平均每秒执行1246条
----------------------------------
测试代码:
package com.devplatform.module.core.dao.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; /** MySql 插入(insert)性能测试 Oracle 插入(insert)性能测试 MySql建表语句: CREATE TABLE `dev`.`test_insert` ( `id` INT NOT NULL , `uname` VARCHAR(10) NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB; */ public class JdbcInsterTest { static int count=100000;//总次数 //一定要写rewriteBatchedStatements参数,Mysql批量插入才性能才理想 static String mySqlUrl="jdbc:mysql://127.0.0.1:3306/dev?rewriteBatchedStatements=true"; static String mySqlUserName="root"; static String mySqlPassword="1234"; static String oracleurl="jdbc:oracle:thin:@192.168.10.139:1521:orcl"; static String oracleuserName="scott"; static String oraclepassword="tiger"; static String sql = "insert into test_insert(id,uname) values(?,?)"; //每执行几次提交一次 static int[] commitPoint={count,10000,1000,100,10,1}; public static void main(String[] args) { for(int point:commitPoint){ test_mysql(point); } for(int point:commitPoint){ test_mysql_batch(point); } // for(int point:commitPoint){ // test_oracle(point); // } // for(int point:commitPoint){ // test_oracle_batch(point); // } } /** * 创建连接 * @return */ public static Connection getConn(String flag){ long a=System.currentTimeMillis(); try { if("mysql".equals(flag)){ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(mySqlUrl, mySqlUserName, mySqlPassword); conn.setAutoCommit(false); return conn; }else if("oracle".equals(flag)){ Class.forName("oracle.jdbc.OracleDriver"); Connection conn = DriverManager.getConnection(oracleurl, oracleuserName, oraclepassword); conn.setAutoCommit(false); return conn; }else{ System.out.println(); throw new RuntimeException("flag参数不正确,flag="+flag); } } catch (Exception ex) { ex.printStackTrace(); }finally{ long b=System.currentTimeMillis(); System.out.println("创建连接用时"+ (b-a)+" ms"); } return null; } /** * 关闭连接 * @return */ public static void close(Connection conn){ try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } /** * 删除旧数据 * @return */ public static void clear(Connection conn){ try{ Statement st=conn.createStatement(); boolean bl=st.execute("delete FROM test_insert"); conn.commit(); st.close(); System.out.println("执行清理操作:"+(bl==false?"成功":"失败")); }catch(Exception e){ e.printStackTrace(); } } /** * 打印信息 * @return */ public static void print(String key,long startTime,long endTime,int point){ System.out.println("每执行"+point+"次sql提交一次事务"); System.out.println(key+",用时"+ (endTime-startTime)+" ms,平均每秒执行"+(count*1000/(endTime-startTime))+"条"); System.out.println("----------------------------------"); } /** * mysql非批量插入10万条记录 */ public static void test_mysql(int point){ Connection conn=getConn("mysql"); clear(conn); try { PreparedStatement prest = conn.prepareStatement(sql); long a=System.currentTimeMillis(); for(int x = 1; x <= count; x++){ prest.setInt(1, x); prest.setString(2, "张三"); prest.execute(); if(x%point==0){ conn.commit(); } } long b=System.currentTimeMillis(); print("MySql非批量插入10万条记录",a,b,point); } catch (Exception ex) { ex.printStackTrace(); }finally{ close(conn); } } /** * mysql批量插入10万条记录 */ public static void test_mysql_batch(int point){ Connection conn=getConn("mysql"); clear(conn); try { PreparedStatement prest = conn.prepareStatement(sql); long a=System.currentTimeMillis(); for(int x = 1; x <= count; x++){ prest.setInt(1, x); prest.setString(2, "张三"); prest.addBatch(); if(x%point==0){ prest.executeBatch(); conn.commit(); } } long b=System.currentTimeMillis(); print("MySql批量插入10万条记录",a,b,point); } catch (Exception ex) { ex.printStackTrace(); }finally{ close(conn); } } /** * oracle非批量插入10万条记录 */ public static void test_oracle(int point){ Connection conn=getConn("oracle"); clear(conn); try { PreparedStatement prest = conn.prepareStatement(sql); long a=System.currentTimeMillis(); for(int x = 1; x <= count; x++){ prest.setInt(1, x); prest.setString(2, "张三"); prest.execute(); if(x%point==0){ conn.commit(); } } long b=System.currentTimeMillis(); print("Oracle非批量插入10万记录",a,b,point); } catch (Exception ex) { ex.printStackTrace(); }finally{ close(conn); } } /** * oracle批量插入10万条记录 */ public static void test_oracle_batch(int point){ Connection conn=getConn("oracle"); clear(conn); try { PreparedStatement prest = conn.prepareStatement(sql); long a=System.currentTimeMillis(); for(int x = 1; x <= count; x++){ prest.setInt(1, x); prest.setString(2, "张三"); prest.addBatch(); if(x%point==0){ prest.executeBatch(); conn.commit(); } } long b=System.currentTimeMillis(); print("Oracle批量插入10万记录",a,b,point); } catch (Exception ex) { ex.printStackTrace(); }finally{ close(conn); } } }
作者:赵磊
博客:http://elf8848.iteye.com
测试环境: 笔记本电脑
CPU:I5
系统:MAC OS 10.7
内存:8G
硬盘:5400转,笔记本硬盘
MySql 版本:Oracle官网下载的mysql-5.5.24-osx10.6-x86_64, 默认安装
MySql JDBC驱动版本:mysql-connector-Java-5.1.20
MySql建表语句:
CREATE TABLE `dev`.`test_insert` (
`id` INT NOT NULL ,
`uname` VARCHAR(10) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
测试结果 :
创建连接用时355 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql非批量插入10万条记录,用时12128 ms,平均每秒执行8245条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql非批量插入10万条记录,用时11667 ms,平均每秒执行8571条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql非批量插入10万条记录,用时11744 ms,平均每秒执行8514条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql非批量插入10万条记录,用时14796 ms,平均每秒执行6758条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql非批量插入10万条记录,用时15917 ms,平均每秒执行6282条
----------------------------------
创建连接用时14 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql非批量插入10万条记录,用时89030 ms,平均每秒执行1123条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行100000次sql提交一次事务
MySql批量插入10万条记录,用时1298 ms,平均每秒执行77041条
----------------------------------
创建连接用时16 ms
执行清理操作:成功
每执行10000次sql提交一次事务
MySql批量插入10万条记录,用时1221 ms,平均每秒执行81900条
----------------------------------
创建连接用时12 ms
执行清理操作:成功
每执行1000次sql提交一次事务
MySql批量插入10万条记录,用时1418 ms,平均每秒执行70521条
----------------------------------
创建连接用时15 ms
执行清理操作:成功
每执行100次sql提交一次事务
MySql批量插入10万条记录,用时2252 ms,平均每秒执行44404条
----------------------------------
创建连接用时13 ms
执行清理操作:成功
每执行10次sql提交一次事务
MySql批量插入10万条记录,用时9139 ms,平均每秒执行10942条
----------------------------------
创建连接用时10 ms
执行清理操作:成功
每执行1次sql提交一次事务
MySql批量插入10万条记录,用时80250 ms,平均每秒执行1246条
----------------------------------
测试代码:
相关文章推荐
- mysql存储程序
- 新建mysql服务
- Jmeter关于数据库的测试(mysql数据库)
- mysql出现1067
- Windows下安装 MySQL 5.7.7
- C#的mysql数据库的配置
- Mybatis打印可执行mysql语句(工具和拦截器两种方式)
- mysql union和union all的区别
- mysql 清空外键约束表
- MySQL · 答疑解惑 · 备库Seconds_Behind_Master计算
- mysql两个时间相减
- mysql 语句优化
- mongdb与mysql的联系和区别
- Mysql 事件(定时任务)
- MySQL锁之表级锁
- 05-雷海林-mysql备份原理与在TDSQL中的实践
- mysql 主从设计
- mysql从文件中导入数据
- Mysql数据库备份和还原常用的命令
- MySQL数据库管理常用命令