mysql的一个简单的性能测试
1. 机器配置
cpu:
Intel(R) Pentium(R) D CPU 3.00GHz
内存:
类型: Kingston PC5300
MemTotal: 2066620 kB
硬盘:
类型:希捷 酷鱼7200.9/ST3160812AS
容量:160G
转速:7200rpm
缓存容量:8M
2. 系统版本
uname -a
Linux master.test.com 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux
Mysql版本:
mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i386) using readline 4.3
3. 测试单条记录的插入和读出
测试项目(单位:条)
|
Threads
|
表数
|
CPU
|
内存
|
time(ms)
|
speed
|
写
500W
|
1
|
1
|
90%
|
4%
|
690997
|
7235.9
|
写
500W
|
1
|
5
|
90%
|
4%
|
677359
|
7381.6
|
写
500W
|
5
|
5
|
99.99%
|
9.50%
|
348277
|
14356.4
|
写
500W
|
2
|
5
|
99.99%
|
9.50%
|
328023
|
15242.8
|
从
500W写到1000W
|
2
|
5
|
同上
|
同上
|
331168
|
15098.1
|
写
1000W
|
2
|
1
|
同上
|
同上
|
658227
|
15192.3
|
从
1000W中随机读3W
|
1
|
1
|
70%
|
13.60%
|
5726
|
5239.2
|
写
1亿(均分到5个表)
|
2
|
5
|
99.99%
|
10.00%
|
6949762
|
14389.1
|
从
1亿随机读3W
|
1
|
5
|
14.30%
|
3.30%
|
455516
|
65.9
|
从
1亿随机读2W
|
2
|
5
|
同上
|
同上
|
329657
|
60.7
|
表的结构:
CREATE TABLE `table0000`
(
`docid` bigint(20) unsigned NOT NULL,
`ip` int(4) NOT NULL,
`port` smallint(2) unsigned NOT NULL,
`fileid` smallint(2) unsigned NOT NULL,
`offset` int(4) unsigned NOT NULL,
`length` int(4) unsigned NOT NULL,
`attr` int(4) NOT NULL,
`attr2` int(4) NOT NULL,
PRIMARY KEY (`docid`),
UNIQUE KEY `Index_2` (`docid`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=gbk
CPU显示可能有些问题,比如写一亿那行,双核的cpu应该显示150%之类的,100多才对。 不过,在top下看,已经是把两个核都用满了。 好像是只能显示到100%以下了。
结论:
1. mysql的管理是以DB位单位的。想通过增加表的数目增加IO量是错误的。DB的索引应该是统一管理的。
2. 最高写入速度是1.5W左右。 这个跟socket的长链接的最高握手次数是基本相同的的。
3. mysql可以利用多核CPU的优势
4. DB里边的数据量小的情况下,select单条的速度是5000条左右!
5. 写入速度基本上是相同的。
6. 当数据量上亿以后,读出速度急剧下降。估计是在倒硬盘。
我把mysql的API封装了一下。简单的封装。不支持多字符集的应用。但是对我们的平时的应用估计应该够了!附在后边! 生成库以后,链接的时候只要链接我的头和库文件就好了。 不需要再链接mysql的。 我把它们隐藏了。呵呵!
下载地址:
http://download.csdn.net/source/347569
测试的地方如有不对,或者代码有bug请告知。 我做的也是比较匆忙。一块讨论!