- 浏览: 7188831 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
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); } } }
发表评论
-
MySQL体系结构
2014-05-20 21:17 1884了解MySql必须牢牢记住其体系结构图,Mysql是由SQ ... -
mysql 性能优化方案
2014-05-18 00:28 2872内容简介:这是一篇关 ... -
从Oracle迁移到Mysql之前必须知道的50件事
2014-01-22 11:52 46241、 对子查询的优化表现不佳。 2、 对复杂查询的 ... -
mysql limit分页查询优化写法
2013-08-07 23:23 6065在mysql中进行分页查询 ... -
MySQL是否区分大小写
2013-08-04 10:28 30711、是否区分 库名、表名、列名、别名 的大小写? --- ... -
MySQL方面不错的文章
2013-08-03 21:13 1873MySQL方面不错的文章 以下文章源自博客:ht ... -
MySQL性能优化的最佳20+条经验
2013-08-02 14:37 2823今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于W ... -
Mac OS安装MySQL(使用二进制PGK包安装)
2013-07-26 23:03 15627下载二进制PGK安装 ... -
MySql分析整理命令
2013-05-19 13:16 2191Analyze Table 分析表----------- ... -
MySql优化参数论述
2013-05-04 10:10 2420ITEYE官方的MySQL优化论 ... -
关于 MySQL connections 的一些知识
2013-04-15 10:48 9412关于 MySQL connections 的一些知识 查 ... -
Got error 134,28 from storage engine
2013-04-12 15:54 5993Got error 134 from storage ... -
Mysql JDBC Url参数说明
2012-09-24 15:44 56677MySQL的 JDBC URL 格式 for Con ... -
MySql 的批量操作,要加rewriteBatchedStatements参数
2010-09-23 20:58 33212MySql 的批量操作,要加rewriteBatchedSta ... -
源码编译安装MySQL-5.1.58,常规参数优化配置
2009-11-13 14:07 46851. 软件获得 可以从官方网站获得稳定版本mysq ... -
源码编译安装MySQL-5.0.84
2009-08-15 10:43 4112安装mysql有三种方式: 1、RPM包安装 ... -
MySQL管理命令、备份与恢复、授权远程访问
2009-04-18 14:00 7489MySql命令行登录 ----------------- ... -
JDBC连接MySQL数据库
2009-02-25 10:59 8708JDBC连接MySql数据库 第一个例子: ...
相关推荐
通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...
通过上述分析,我们可以看出这份MySQL性能测试脚本主要用于模拟大规模数据的批量插入操作,以便对MySQL数据库的性能进行测试。其中涉及到了数据库表结构的设计、数据的批量插入、自定义函数及存储过程的编写等关键...
mysql合并插入性能测试测试数据Mysql合并插入可以带来*10的吞吐提升,而事务提交没有明显的收益。下面是在一台普通MYSQL机型下的TPS实测数据:[root@10-9-136-206 mysql-bulk-insert]# ...
- 尽管这不在文档中直接提及,但提升磁盘I/O性能对于提高MySQL插入速度同样重要。这包括优化文件系统、使用更快的磁盘或者使用SSD等措施。 9. 使用第三方工具监控和管理: - 使用如Unix的top、Windows的任务管理...
**综合性能测试** 当同时应用上述三种优化方法时,可以看到性能有显著提升。批量插入减少了日志写入和解析次数,事务处理减少了磁盘I/O,有序插入则优化了索引维护。这些优化策略结合使用,可以显著改善大量数据插入...
在优化MySQL的INSERT性能时,面对大量数据的系统,我们需要考虑如何有效地减少插入时间,以降低潜在的风险和提高系统的稳定性。以下是一些经过测试的有效策略: 1. **批量插入**: - 传统的方式是逐行插入数据,...
为了验证这些方法的效果,可以进行性能测试,比较单条INSERT与批量INSERT、使用事务与不使用事务、无序插入与有序插入在不同数据规模下的表现。测试结果通常会显示,上述优化策略能够显著减少数据导入的时间,尤其是...
本测试数据集提供了一张包含200万条数据的单表,这对于数据库性能测试、查询优化、大数据处理以及系统负载测试等方面具有极高的价值。下面将围绕这个主题,详细介绍MySQL数据库的相关知识点。 1. 数据库设计: 在...
在插入记录时,使用了 mysql_query 函数来执行 INSERT 语句,并使用了 lr_save_string 函数来保存插入语句。接着,使用了 mysql_query 函数来执行 SELECT 语句,并使用了 lr_error_message 函数来处理错误。 该脚本...
MySQL 数据库在处理插入性能时,受到其现有架构的限制,特别是当涉及到批量插入操作时。本文主要讨论了这两种常见的插入语句:“insert table_name values”以及“insert table_name values...”的执行过程,并分析...
本文将深入探讨`mysql-connector-java-5.1.6-bin.jar`在JMeter中的应用,以及与接口测试和性能测试的相关知识点。 首先,`mysql-connector-java-5.1.6-bin.jar`是MySQL官方发布的版本为5.1.6的JDBC驱动包。这个驱动...
MySQL 提供了多种方法来实现大批量数据插入,包括使用批量插入语句、使用 LOAD DATA 语句、使用 MySQL 的 Bulk Insert 机制等。 在 MySQL 中,使用批量插入语句可以大大提高数据插入的速度。批量插入语句的格式如下...
为了解决这个问题,MySQL官方推荐使用批量插入,即将多条数据一次性插入,如`INSERT INTO TBL_TEST (id) VALUES (1), (2), (3)`。这种方式减少了网络传输的负担,同时减少了服务器的解析次数,从而提高了性能。 ...
### MySQL 数据库安装与测试详解 #### 一、MySQL 数据库简介 MySQL 是一款非常流行的开源关系型数据库管理系统,因其高性能、稳定性和易用性而被广泛应用于各种规模的应用程序中。MySQL 支持多种操作系统,包括 ...
Mysql 构造百万条测试数据 在实际应用中,许多企业都拥有庞大的数据量,为了提高...使用 MySQL 构造百万条测试数据需要了解 MySQL 的内存表、函数、存储过程、索引等知识点,并且需要根据实际情况调整参数和优化性能。
针对描述中的内容,本文将详细探讨几种提升MySQL插入性能的方法,适用于处理报表系统等需要大量数据导入的场景。 1. **一次性插入多条数据**: - 传统的做法是逐条插入,例如使用多个独立的INSERT语句。然而,这样...
综上所述,这个Node.js模块提供了完整的MySQL数据库操作解决方案,结合连接池和大量测试数据,不仅方便开发者快速构建数据库相关功能,还为性能测试和优化提供了便利。通过深入理解和使用这个模块,可以提升你在Node...
在实际项目开发中,快速填充大量测试数据对于进行性能测试、压力测试等非常有用。例如,在开发电子商务系统时,可能需要模拟大量的交易记录来测试系统的处理能力。通过编写如上所示的存储过程,可以在几分钟内轻松...