MySQL性能测试分析
MySQL性能测试分析
测试环境
操作系统:Linux AS release 4,内核2.6.9-42.ELsmp #1 SMP
CPU:Intel(R) Xeon(TM) CPU 3.00GHz,4核
内存:1G,主要运行MySQL服务
硬盘:cciss 37G
文件系统:ext3,支持大文件
MySQL:MySQL-5.0.51a
网卡:100M
网络环境:100M交换局域网
测试方法
数据规模分为1万条、10万条、100万条和1000万条记录级别。
在每种数据规模下分别执行2000次随机查询,这样可以防止数据库直接从缓存中返回查询结果,更加接近真实的查询情况。以系统时间为随机种子,在现有的记录范围内随机执行查询操作。
查询类型分为:单表select、双表select、insert、单表delete和双表delete。
因为MyISAM和InnoDB是MySQL使用最多的两种引擎,也是我们公司目前使用最频繁的引擎,因此分别做对比测试有一定的参考价值。
每个执行条目都为单次查询的平均执行时间,单位为微妙。如果要看整体执行时间,则乘以2000即可。
由于脚本插入数据很慢,采用mysql客户端工具测试效率很低且不能保证足够的随机性,所以插入数据和测试性能都是自己编写相应的程序来完成。
开启二进制更新日志。
测试记录
测试数据
MyISAM引擎跨主机查询操作平均执行时间(单位:微秒)
项目记录数 |
单表select |
双表select |
insert |
update |
单表delete |
双表delete |
1万条 |
358 |
484 |
1188 |
269 |
298 |
464 |
10万条 |
375 |
505 |
1227 |
283 |
322 |
521 |
100万条 |
3174 |
5293 |
1242 |
4142 |
7981 |
17212 |
1000万条 |
12302 |
19920 |
1261 |
12355 |
20449 |
39890 |
MyISAM引擎本地查询操作平均执行时间(单位:微秒)
项目记录数 |
单表select |
双表select |
insert |
update |
单表delete |
双表delete |
1万条 |
178 |
247 |
694 |
141 |
170 |
345 |
10万条 |
195 |
271 |
705 |
157 |
186 |
585 |
100万条 |
3055 |
5164 |
746 |
4308 |
12373 |
22533 |
1000万条 |
8665 |
15259 |
803 |
11033 |
17224 |
35485 |
发现对innodb的配置参数进行优化后,更新和插入速度可以提高10倍多。
InnoDB引擎跨主机单次查询操作平均执行时间(单位:微秒)
项目记录数 |
单表select |
双表select |
insert |
update |
单表delete |
双表delete |
1万条 |
387 |
521 |
1215 |
327 |
293 |
519 |
10万条 |
399 |
567 |
1231 |
338 |
322 |
663 |
100万条 |
2255 |
4950 |
1320 |
1988 |
3832 |
9550 |
1000万条 |
10556 |
18702 |
1362 |
10823 |
19078 |
36666 |
InnoDB引擎本地单次查询操作平均执行时间(单位:微秒)
项目记录数 |
单表select |
双表select |
insert |
update |
单表delete |
双表delete |
1万条 |
180 |
264 |
709 |
165 |
156 |
312 |
10万条 |
226 |
340 |
754 |
204 |
205 |
590 |
100万条 |
1853 |
4530 |
746 |
1782 |
2771 |
9816 |
1000万条 |
9275 |
17609 |
889 |
6941 |
14727 |
36282 |
性能比较
单表select
双表select
Insert操作
update操作
单表delete
双表delete
性能分析
1、可以看出在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大,与官方的说法基本接近。
2、1万和10万的select、delete或update操作都很快,1毫秒以下。
3、Insert操作性能降低较慢,受数据规模影响相对较小。
4、性能从10万条规模升到100万条时降低非常明显,从100万到1000万性能降低更明显。
5、InnoDB引擎在缺省参数配置下性能较差。
6、推荐InnoDB的配置(1G内存情况,主要运行mysql服务器):
innodb_buffer_pool_size = 600M
innodb_additional_mem_pool_size = 64M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 256M
#innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
innodb_file_per_table
其中innodb_flush_log_at_trx_commit和innodb_file_per_table对I/O性能影响最大。
7、my-large.cnf等文件只是优化myisam引擎的参数,这一点在优化配置时特别要注意。
8、在数据规模较大(100万条以上),InnoDB引擎性能有相对优势。
9、在数据规模较小(10万条以下),MyISAM引擎性能有相对优势。