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引擎性能有相对优势。