原帖:http://hi.baidu.com/jabber/blog/item/4df7e150a0df935c1138c202.html
查看文章
|
反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明
2006-11-21 11:23
在 JavaEye 上看到一篇对 MySQL FUD(Fear, uncertainty and doubt) 的文章 用MySQL InnoDB Benchmark 性能测试来说明 http://www.javaeye.com/topic/34676 文中提到:"InnoDB 的磁盘性能很令人担心,MySQL 缺乏良好的 tablespace 真是天大的缺陷!……网上有用户反映存在同样的插入性能问题,百万行记录插入之后,插入速度下降到了 1/30,从开始的 1600行/秒衰退到 50行/秒……" 50行/秒这么慢我从来没见过,见也没人反驳,所以自己再专门验证一下。 Tim's 环境: MySQL 5.0.26 x86_64 Linux x86_64 iddata 文件大小17G,未使用innodb_file_per_table分表选项 表1: 1000万行左右,表大小 2.2G,含主键有6个索引字段 表2: 3000万行左右,表大小 6.3G,含主键有6个索引字段 MySQL还有其他一些数据也在iddata中,但测试时候其他数据未访问。 MySQL Server Hardware 环境 双 XEON 3G 4G 内存, SCSI 硬盘 非专业非名牌,普通组装的服务器。 表结构就是一般的用户表,包含 int, varchar, datetime 字段类型,无 text,blob 类型字段。 单行长度 0.1K 左右 对表1测试2分钟插入操作,在1千万的表中每个调用插入1行,通过Java JDBC在另外一台测试机上调用。 服务器 CPU 30% JDBC Result: INSERT OK /ERR: 73824/0 Java HEAP: 7.12MB of 63.56 MB (11.2%) used TIME elapse(sec): 129 AVG平均/CUR当前/MAX最大 Inserts/SEC: 572/620/620 再测试一个3000万的表,通过Java JDBC在另外一台测试机上调用。 可能上一个测试2分钟会让人觉得没有说服力,3000万的表二就测试久一点吧。测试了10多分钟,又插入了100万条新的数据 一个调用只插入1行,8个线程。使用了连接池。 测试结果速度非常稳定。 服务器 CPU 30% OK /ERR: 1,006,907/0 HEAP: 6.57MB of 63.56 MB (10.3%) used TIME elapse(sec): 1683 AVG/CUR/MAX Inserts/Sec: 598/586/647 测试结果是:3000万行的表再插入100万行速度持续在将近 600行/秒 论坛文章中还提到"看着文件尺寸 100KB 100KB 的增长,是没法体会痛苦的", 根据MySQL文档,这个增长的size可以配置的,如果数据库大量INSERT, 可以把innodb文件设成每次增长100M或更大。 测试后打算回复一下,可惜JavaEye上新注册了的账号没有论坛发文的权限,只好先放在自己家了。感兴趣的朋友可以去那边讨论。 第二天补充:今天觉得文章说服力不够,因为我的测试表没有TEXT/BLOB字段,所以再测试下大字段,加了个TEXT字段,每行TEXT插入10K,整体速度比上个肯定会低一点, 但可以证明没有线性下降的问题,也可以给大家提供更多参考。 表中已有1000万行记录,采用上面相同的程序。 服务器 CPU 持续在 30%左右,测试结果见下图 测试结果每行插入10k数据,速度维持在300行/秒左右。数据库写入速度大致为: 3M/S 下次有时间再试试单表1亿条记录的。我觉得速度应该还会保持。 |
最近读者:
<script type="text/javascript">document.write("<a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"' target='_self'>登录</a>后,您就出现在这里。");</script>登录后,您就出现在这里。 | 花衣燕子 |
网友评论:
<script type="text/javascript"> function writecmt(type,id,cmtname,cmturl,portraitId){ var html1=""; if(type==1){ html1="
"+cmtname+""; }else{ if(cmtname=="" || cmtname=="匿名网友"){ if(cmturl==""){ html1=" 匿名网友"; }else{ html1=" "+cmtname+""; } }else{ if(cmturl==""){ html1="
网友:
"+cmtname+"
"; }else{ html1="
网友:
"+cmtname+"
"; } } } document.write(html1); } </script>
1 | 2006-11-21 17:18 |
2 | 2006-11-21 21:05 |
3 | 2006-11-21 22:07 |
4 | 2006-11-21 22:11 |
5 | 2006-11-21 22:17 |
6 | 2006-11-21 22:40 |
7 | 2006-11-21 22:40 |
8 | 2006-11-21 22:41 |
9 | 2006-11-21 23:33 |
10 | 2006-11-21 23:34 |
11 | 2006-11-21 23:36 |
12 | 2006-11-21 23:53 |
13 | 2006-11-22 01:22 |
14 | 2006-11-23 01:19 |
15 | 2006-12-06 15:15 |
18 | 2007-03-14 21:14 |