MySQL性能测试分析

1628阅读 0评论2011-02-28 ubuntuer
分类:Mysql/postgreSQL

操作系统: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引擎性能有相对优势。

上一篇:starting MySQ Manager of pid-file quit
下一篇:通过修改mysql源码添加审计功能