« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。 |
Blog信息 |
blog名称: 日志总数:210 评论数量:205 留言数量:-19 访问次数:924895 建立时间:2007年5月10日 |

| |
[MYSQL]Mysql Innodb性能测试结果 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/3/23 0:01:42 |
今天看了一个“反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明“的文章 http://hi.baidu.com/jabber/blog/item/4df7e150a0df935c1138c202.html 文章内容就是要证明”Mysql innodb 在百万数据量插入数据并不满“。 中午抽空我也测试了下,写写我的一些体会。 测试环境:独立两台机器,千兆内网 linux As4 + weblogic 9.2 (HP DL380 G4, 2CPU*2core, 4G RAM, SCSI) linux As4 + Mysql 5.0.45 (HP DL380 G4, 2CPU*2core, 4G RAM, SCSI) 语言:Java, 使用weblogic连接池 数据量:表user原有数据为600万条。 测试内容:循环插入数据,计算每秒插入条数。 最初的插入代码如下:
Java代码 500)this.width=500'>
Statement stmt = conn.createStatement();
for(int i=1;i<=1000;i++){
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
String time=sdf.format(new Date());
String sql="insert into user(username,createTime) values('"+n+"_"+i+"','"+time+"')";
stmt.execute(sql);
} Statement stmt = conn.createStatement();
for(int i=1;i<=1000;i++){
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
String time=sdf.format(new Date());
String sql="insert into user(username,createTime) values('"+n+"_"+i+"','"+time+"')";
stmt.execute(sql);
}
运行时间为:17秒 也就是说每秒只能执行58条sql插入。 为什么这么慢呢? 分析了下原因,发现jdbc默认是使用autocommit=true,也就是说每一条sql语句都会触发mysql事务commit,这就会让mysql去操作日志文件。这样需要进行的操作就很多,当然速度就会慢很多了。 加入
Java代码 500)this.width=500'>
conn.setAutoCommit(false); conn.setAutoCommit(false);
运行时间:2秒 也就是说每秒可以插入500条,可见autocommit对innodb的影响有多大。 这也就是那篇文章中不同人测试innodb性能有如此大差异的原因了。 另外把多线程的测试结果也公布下: 15线程,每线程插入10000条数据,共31秒,即4838条/秒 100线程,每线程插入10000条数据,共217秒,即4608条/秒 (可见我这台mysql的吞吐量也就是4800条/秒) |
|
|