阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736
分类: Mysql/postgreSQL
2012-09-06 16:11:21
目的
根据现有硬件环境下,测试MySQL单实例测试随着innodb_buffer_pool_size的变化,不同数据量的MySQL数据库性能。便于DBA和开发人员根据应用需求,安装和部署。
实验测试环境
1、实验测试硬件环境
Summary: Dell R620, 1 x Xeon E5-2630 0 2.30GHz, 63GB / 64GB 1600MHz DDR3 System: Dell PowerEdge R620 (Dell 036FVD) Processors: 1 (of 2) x Xeon E5-2630 0 2.30GHz 7200MHz FSB (HT enabled, 6 cores, 24 threads) Memory: 63GB / 64GB 1600MHz DDR3 == 8 x 8GB, 16 x empty |
2、实验测试软件环境
实验测试的软件环境主要包括,操作系统、MySQL数据库以及测试工具,具体内容如下:
操作系统:
CentOS 6.2 (Final), Linux 2.6.32-220.23.1.el6.x86_64 x86_64, 64-bit
MySQL版本:Percona Server 5.5.20
TPC-C测试工具:tpcc-mysql
其中TPC-C测试工具的安装和使用说明文档参照相关内容。
测试方案
实验方案为单机单实例主要为了探索MySQL参数innodb_buffer_pool_size的较优值,从而得到较优的MySQL性能,以及不同warehouse数据量下MySQL的性能。主要测试方案如下:
该测试在环境一机器上,单机单实例主要测试随着innodb_buffer_pool_size的变化,其他参数不变的情况下,MySQL性能的影响。测试的数据量分别为100warehouse、1000warehouse时,数据大小大约分别为10G、100G。具体如下:
测试 |
innodb_buffer_pool_size的值 |
占系统内存的比例 |
1 |
24G |
37.5% |
2 |
32G |
50% |
3 |
38G |
59.375% |
4 |
45G |
70.3125% |
5 |
51G |
79.6875% |
6 |
55G |
85.9375% |
7 |
58G |
90.625% |
测试的参数具体如下所示:
Parameters |
Value |
Value |
[warehouse] |
100 |
1000 |
[connection] |
16 |
16 |
[rampup] |
1800 (sec.) |
7200 (sec.) |
[measure] |
1800 (sec.) |
7200 (sec.) |
测试
测试结果如下所示:
Innodb_buffer_pool_size大小(G) |
100W吞吐量(tpmc) |
1000W吞吐量(tpmc) |
24 |
22934.367 |
4091.533 |
32 |
25893.566 |
5550.767 |
38 |
24105.268 |
6038.867 |
45 |
21302.900 |
6442.2 |
51 |
20585.732 |
6869.417 |
55 |
19872.533 |
6940.85 |
58 |
20054.301 |
6827.983 |
通过以上测试结果可知,在测试数据为100Warehouse时,数据可以全部cache到innodb buffer pool中。从曲线图来看,随着innodb_buffer_pool_size的增大,MySQL的性能反而有所降低。
在测试数据为1000Warehouse时,当innodb_buffer_pool_size的大小在55G(大约占内存的85.9375%)时,性能达到最大。但是从图中可以看出,当innodb_buffer_pool_size的大小为51G(大约占内存的79.6875%)时,性能基本达到较优。而当innodb_buffer_pool_size的大小为58G(大约占内存的90.625%)时,性能降低,这是由于innodb_buffer_pool_size过大,导致swap的原因。
结论
从以上测试可知,对于单机单实例的测试中可知,当测试的数据量远远大于内存大小时,随着innodb_buffer_pool_size的不断增大,MySQL的性能也不断地提高。当innodb_buffer_pool_size占内存大小的80%~85%时,MySQL的性能达到最大。而继续增大innodb_buffer_pool_size时,MySQL的性能降低,这是由于导致内存swap的原因。并且,此时的瓶颈为服务器的IO,CPU利用率较低。
当测试的数据量小于innodb_buffer_pool_size的大小时,随着innodb_buffer_pool_size的不断增大,MySQL的性能反而有所降低。此时,所有操作都在内存中完成,MySQL的性能较高。