老叶倡议:MySQL压力测试基准值

标签: MySQL优化设计 压力测试 | 发表时间:2016-02-16 22:12 | 作者:OurMySQL
出处:http://ourmysql.com

   通常,我们会出于以下几个目的对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-mysqlsysbenchmysqlslap 等几个。

   关于压力测试工具的使用,可以查看我之前在ORACLE技术嘉年华上的分享: MySQL压力测试经验,在这里不再细说。

   基于促进同行间的交流,统一MySQL压测标准,并且可以相互分享、对比、借鉴测试结果的目的。因此老叶特别发起MySQL压力测试基准值倡议。建议大家采用以下几种压力测试基准值。

倡议:MySQL压力测试建议基准值(2015试行版)

倡议: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倍以上。

    延伸阅读:

抱歉猜想失败,您看看下面的文章有用吗?

相关 [mysql 压力测试] 推荐:

Mysql压力测试shell脚本

- - CSDN博客数据库推荐文章
转载请注明,来自: http://blog.csdn.net/skyman_2001. Mysql自带了压力测试工具mysqlslap,所以我们可以不用自己编写程序来测试Mysql读取的压力. 上面脚本的意思是每隔100ms循环做这样的事:模拟100个mysql客户端,对数据库test的表test执行200次插入(number-of-queries = concurrency * 每个mysql客户端的查询次数,所以这里的每个mysql客户端的查询次数是2次),迭代10次.

老叶倡议:MySQL压力测试基准值

- - OurMySQL
   通常,我们会出于以下几个目的对MySQL进行压力测试:.    针对上面这几种压测的目的,相应的测试方法也有所不同.    先说第四种,需要和线上业务结合起来,这时候就需要自行开发测试工具,或者利用. tcpcopy 将线上实际用户请求导向测试环境,进行仿真模拟测试.    对于前三种,我们通常采用基准测试就可以.

(总结)MySQL自带的性能压力测试工具mysqlslap详解

- - 服务器运维与网站架构|Linux运维|X研究
PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用. 其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的. mysqlslap是从5.1.4版开始的一个MySQL官方提供的压力测试工具. 通过模拟多个并发客户端访问MySQL来执行压力测试,同时详细的提供了“高负荷攻击MySQL”的数据性能报告.

linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

- - SegmentFault 最新的文章
一、linux 系统内核参数. /etc/sysctl.conf文件常用参数. net.core.netdev_max_backlog = 32768 #允许送到队列的数据包的最大数目 net.core.rmem_max = 8388608. #SOCKET读缓存区大小 net.core.wmem_max = 8388608.

压力测试工具Benchmark

- - 企业架构 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

使用webbench做压力测试

- - 三水清
元旦假期帮朋友折腾VPS,安装了centOS和lnmp,网站部好了,而且定时任务也加上了,觉得应该做个压力测试,之前用过apache自带的ab,不过今天使用的是 webbench做压力测试. 首先我们先来安装webbench吧, 为了测试准确,请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时,自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉.

Jmeter教程 简单的压力测试

- - 行业应用 - ITeye博客
Jmeter是一个非常好用的压力测试工具.   Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.     做压力测试的常用工具.     做压力测试的步骤如下:.     本文做压力测试的例子.     第一步: 使用CSV Data Set Config 来参数化.

tcpcopy,模拟在线压力测试的好帮手

- kissingwolf - MySQL 中文网 -
主要信息来自:http://code.google.com/p/tcpcopy/. tcpcopy是一个基于底层的应用请求复制(所有基于tcp的packets)开源项目,可用于替代ab做在线模拟压力测试,可转发各种在线请求到测试服务器上,进行较为详尽的近乎实际的测试,从而避免了新业务、系统上线带来的潜在问题.

压力测试工具集合【ab,webbench,Siege,http_load,Web Application Stress】

- - 小彰
-------------------------------------------------- 1 Apache附带的工具ab. ab的全称是ApacheBench,是Apache附带的一个小工具,专门用于HTTP Server的benchmark testing,可以同时模拟多个并发请求.

XMPP、HTTP 模拟压力测试工具 Tsung 教程

- - CSDN博客推荐文章
由于需要erlang支持,那么下载erlang-R14B04. 使用该脚本测试的时候,要禁用XMPP服务器的auth验证模块,不然账号密码不对,登陆不进去. 单个IP的端口65535的问题导致单个机器模拟的连接数有限,这个问题我没解决,只能通过使用很多机器都开这个服务来解决. 作者:smm11230704 发表于2012-4-17 3:21:36 原文链接.