mysql insert 压力大_MySql 插入(insert)性能测试

MySql 插入(insert)性能测试

作者:赵磊

博客: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);

}

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2014-10-09 10:45

浏览 129

评论

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值