倡议:MySQL压力测试基准值
通常,我们会出于以下几个目的对MySQL进行压力测试:
1、确认新的MySQL版本性能相比之前差异多大,比如从5.6变成5.7,或者从官方版本改成Percona分支版本; 2、确认新的服务器性能是否更高,能高多少,比如CPU升级了、阵列卡cache加大了、从机械盘换成SSD盘了; 3、确认一些新的参数调整后,对性能影响多少,比如 innodb_flush_log_at_trx_commit、sync_binlog 等参数; 4、确认即将上线的新业务对MySQL负载影响多少,是否能承载得住,是否需要对服务器进行扩容或升级配置;
针对上面这几种压测的目的,相应的测试方法也有所不同。
先说第四种,需要和线上业务结合起来,这时候就需要自行开发测试工具,或者利用 tcpcopy 将线上实际用户请求导向测试环境,进行仿真模拟测试。
对于前三种,我们通常采用基准测试就可以。比较常用的MySQL基准压力测试工具有 tpcc-mysql、sysbench、mysqlslap 等几个。
关于压力测试工具的使用,可以查看我之前在ORACLE技术嘉年华上的分享:MySQL压力测试经验,在这里不再细说。
基于促进同行间的交流,统一MySQL压测标准,并且可以相互分享、对比、借鉴测试结果的目的。因此老叶特别发起MySQL压力测试基准值倡议。建议大家采用以下几种压力测试基准值。
倡议:MySQL压力测试建议基准值(2015试行版)
也可以查看本文附件excel文档:压力测试基准建议及数据采集模板,里面已附带了压力测试相关的数据采集点建议,压测结果整理及自动生成对比图表。欢迎各位同行拍砖提出不同的见解和补充意见,先谢过大家。
关于压力测试的其他几个方面:
1、如何避免压测时受到缓存的影响
【老叶建议】有2点建议
a、填充测试数据比物理内存还要大,至少超过 innodb_buffer_pool_size 值,不能将数据全部装载到内存中,除非你的本意就想测试全内存状态下的MySQL性能。
b、每轮测试完成后,都重启mysqld实例,并且用下面的方法删除系统cache,释放swap(如果用到了swap的话),甚至可以重启整个OS。
[root@imysql.com]# sync -- 将脏数据刷新到磁盘 [root@imysql.com]# echo 3 > /proc/sys/vm/drop_cache -- 清除OS Cache [root@imysql.com]# swapoff -a && swapon -a
2、如何尽可能体现线上业务真实特点
【老叶建议】有2点建议
a、其实上面已经说过了,就是自行开发测试工具或者利用 tcpcopy(或类似交换机的mirror功能) 将线上实际用户请求导向测试环境,进行仿真模拟测试。
b、利用 http_load 或 siege 工具模拟真实的用户请求URL进行压力测试,这方面我不是太专业,可以请教企业内部的压力测试同事。
3、压测结果如何解读
【老叶建议】压测结果除了tps/TpmC指标外,还应该关注压测期间的系统负载数据,尤其是 iops、iowait、svcmtm、%util、每秒I/O字节数(I/O吞吐)、事务响应时间(tpcc-mysql/sysbench 打印的测试记录中均有)。另外,如果I/O设备能提供设备级 IOPS、读写延时 数据的话,也应该一并关注。
加入两次测试的tps/TpmC结果一样的话,那么谁的 事务响应时间、iowait、svctm、%util、读写延时 更低,就表示那个测试模式有更高的性能提升空间。
4、如何加快tpcc_load加载数据的效率
【老叶建议】tpcc_load其实是可以并行加载的,一方面是可以区分 ITEMS、WAREHOUSE、CUSTOMER、ORDERS 四个维度的数据并行加载。
另外,比如最终想加载1000个 warehouse的话,也可以分开成1000个并发并行加载的。看下 tpcc_load 工具的参数就知道了:
usage: tpcc_load [server] [DB] [user] [pass] [warehouse] OR tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh] * [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS
本来想自己写个并行加载脚本的,后来发现万能的github上已经有人做好了,我就直接拿来用了,这是项目链接 tpcc_load_parallel.sh,加载效率至少提升10倍以上。
延伸阅读:
建议继续学习:
- 给Apache做压力测试时遇到的问题 (阅读:5891)
- Super Smack (阅读:3353)
- 用httpclient做压力测试时Too many open files的解决办法 (阅读:3202)
- [转]VPS服务器性能 压力测试工具 http_load、webbench、ab、Siege使用教程 (阅读:2637)
- tcpcopy,模拟在线压力测试的好帮手 (阅读:2409)
- MySQL小工具 之 压测Groovy (阅读:2332)
- easy_runner一个简单的压测程序 (阅读:2274)
- 降低应用latency方法谈 (阅读:2117)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:叶金荣 来源: iMySQL
- 标签: 压力测试
- 发布时间:2016-02-16 22:12:05
- [66] Go Reflect 性能
- [65] Oracle MTS模式下 进程地址与会话信
- [64] 如何拿下简短的域名
- [59] android 开发入门
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则