MySQL压测④--压测报告

绘图部分

需要部署gnuplot

yum install -y gnuplot

关于绘图相关脚本的使用

TPCC部分

首先叶总网站上的tpcc指令里面有一个-f生成log的项,说实话并不知道这个-f生成的log有什么作用,因为目前在网上找到的绘图工具都无法读取这个-f生成的数据,所以后续tpcc的命令并未采用-f参数去生成脚本。

叶总版本里面自带的analyze.sh在我的测试中显得不太好使(没有仔细看脚本,直接复制过来了),本次压测采用的analyze.sh脚本如下

#!/bin/sh

TIMESLOT=1

if [ -n "$2" ]

then

TIMESLOT=$2

fi

cat $1 | grep -v HY000 | grep -v payment | grep -v neword | awk -v timeslot=$TIMESLOT 'BEGIN { FS="[,():]"; s=0; cntr=0; aggr=0 } /MEASURING START/ { s=1} /STOPPING THREADS/ {s=0} /0/ { if (s==1) { cntr++; aggr+=$2; } if ( cntr==timeslot ) { printf ("%d %3d\n",$1,(aggr/timeslot)) ; cntr=0; aggr=0 } }'


tpcc-graph.sh脚本内容如下(粘贴时最好去掉加黑的注释)

#!/bin/bash

gnuplot << EOP

set style line 1 lt 1 lw 3                        

set style line 2 lt 5 lw 3

set style line 3 lt 7 lw 3

set style line 4 lt 9 lw 3                        #个人理解lt 1 和 lw 3应该是线段的参数,需要有多少条线就set多少条;这里4行的lw都是3,这个3可能是线段的宽度等参数,而前面的lt 1 5 7 9个人觉得可能和颜色之类的有关

set terminal png size 960,480             #图片分辨率

set grid x y

set xlabel "Time(sec)"                         #X轴名

set ylabel "Transactions"                    #Y轴名

set output "$2"

plot "$1" using 1:2 title "5.7.22 threads=100 buffer_pool=2G" ls 1 with lines,\                    #使用第1列和第2列数据..标题..使用第1条线

    "$1" using 3:4 title "5.7.22 threads=100 buffer_pool=4G" ls 2 with lines,\

    "$1" using 5:6 title "5.7.22 threads=100 buffer_pool=6G" ls 3 with lines axes x1y1        #使用第5列和第6列数据..标题..使用第3条线

EOP


通过前期的数据观察,不同并发数、log_file、log_buffer等参数情况下的图像差距并不明显,为了让生成图像能更直观的展示测试结果,选取不同buffer_pool_size作为甄别条件

使用分析脚本分别提取对应log中的数据

[root@GTID02 tpcc-yejr-mysql]# ./analyze.sh tpcc_2G_bufferpool_100_threads_16M_logbuffer_8G_logsize > 2G.data

[root@GTID02 tpcc-yejr-mysql]# ./analyze.sh tpcc_4G_bufferpool_100_threads_16M_logbuffer_8G_logsize > 4G.data

[root@GTID02 tpcc-yejr-mysql]# ./analyze.sh tpcc_6G_bufferpool_100_threads_16M_logbuffer_8G_logsize > 6G.data

将提取的数据汇总

[root@GTID02 tpcc-yejr-mysql]# paste 2G.data 4G.data 6G.data > tpcc.data

使用绘图脚本作图

(后面的报错是一个字体问题,不用理会)

[root@GTID02 tpcc-yejr-mysql]# ./tpcc-graph.sh tpcc.data tpcc.jpg

Could not find/open font when opening font "arial", using internal non-scalable font

生成的tpcc.jpg如下图

一开始个人觉得这个图并没有什么卵用,更偏向于采用最终的评估值来结合excel折线图进行分析

后来在通过sysbench对不同log_file参数进行测试时发现gnuplot生成的走势图能更直观的发现一些折线图不能很好展现的尖刺情况


sysbench部分

采集tps的脚本

[root@GTID02 sysbench]# cat analyze_tps.sh

#!/bin/bash

cat $1|awk '/10s]/,/1800s]/{print $0}'|awk -F '[' '{print $2}'|awk -F ']' '{print $1,$2}'|awk '{print $1,$5}'|awk -F ',' '{print $1}'|awk -F 's' '{print $1 $2}' > $2


采集qps的脚本

[root@GTID02 sysbench]# cat analyze_qps.sh

#!/bin/bash

cat $1|awk '/10s]/,/1800s]/{print $0}'|awk -F '[' '{print $2}'|awk -F ']' '{print $1,$2}'|awk '{print $1,$7+$9}'|awk -F ',' '{print $1}'|awk -F 's' '{print $1 $2}' > $2


绘图脚本

[root@GTID02 sysbench]# cat sysbench-graph.sh

#!/bin/bash

gnuplot << EOP

set style line 1 lt 1 lw 3

set style line 2 lt 2 lw 3

set style line 3 lt 3 lw 3

set style line 4 lt 4 lw 3

set style line 5 lt 5 lw 3

set style line 6 lt 6 lw 3

set style line 7 lt 7 lw 3

set terminal png size 960,480

set grid x y

set xlabel "Time(sec)"

set ylabel "TPS"

set output "$2"

plot "$1" using 1:2 title "threads=2" ls 1 with lines,\

    "$1" using 3:4 title "threads=100" ls 2 with lines,\

    "$1" using 5:6 title "threads=200" ls 3 with lines,\

    "$1" using 7:8 title "threads=300" ls 4 with lines,\

    "$1" using 9:10 title "threads=500" ls 5 with lines,\

    "$1" using 11:12 title "threads=800" ls 6 with lines axes x1y1                                                   

EOP


针对上面几个脚本的解释

首先请原谅本人捉鸡的awk水平...

加黑部分的'/10s]/,/1800s] 这2个参数是需要根据实际情况进行更改的,我sysbench采取的是10s计数一次,累计运行1800s,所以统计是从10s开始直到1800s结束;

其中tps的值在过滤之后位于$5的位置,可以直接取出

而qps没有这个值,个人的理解是read/s和write/s值之和,所以脚本采取了单纯的加法,也就是$7+$9

至于响应时间(avg),只有从最后的结果获取,并不知道如何获取实时的值,因此不存在该脚本,而且在报告里面也没有这个值的走势图

对于绘图脚本,也就是坐标的名字换一下,其他和tpcc的绘图没区别


脚本的使用方法与前面tpcc部分相同,这里就只贴一下history

./analyze_tps.sh 100_threads_6G_buffer_100M_logsize.log log100M.data

./analyze_tps.sh 100_threads_6G_buffer_1G_logsize.log log1G.data

./analyze_tps.sh 100_threads_6G_buffer.log log4G.data

paste log100M.data log1G.data log4G.data > log.data

./sysbench-graph.sh log.data log.jpg


生成的log.jpg如下



##############################################


压测报告

1.测试环境

         MySQL服务器IP地址:172.17.100.100

         操作系统:CentOSrelease 6.8 (Final)

         CPU:4核

         内存:8G

         硬盘:普通SAS硬盘

         基线测试工具:tpcc和sysbench


2.测试方案

TPCC

1. 统计buffer_pool分别取2G、4G、6G时并发数分别取32、100、200、300的TpmC值(log_buffer=16M、log_file=8G)

2. 统计log_buffer=16M,innodb_buffer_size=6G,Log_file=4G时测试并发数分别取32、200、300、400、500、600对应的TpmC值

3. 统计log_file分别取1G、2G、4G、8G时并发数为100的TpmC值(log_buffer=16M、buffer_pool=6G)

4. 统计log_buffer分别取8M、16M、64M、128M时时并发数为100的TpmC值(buffer_pool=6G、log_file=4G、8G)

5. 每次测试完成,重启mysql

Sysbench

1. 统计buffer_pool分别取4G、6G时,并发数分别取2、100、200、300、500、800时的TPS、QPS、响应时间(avg)值

2. 统计buffer_pool为6G,log_buffer为16M,并发数为100时log_file分别取100M,1G,4G时的TPS值

3. 每次测试完成,重启mysql


3.测试结论

基于TPCC的测试

测试一

测试条件

Log_file=8G,log_buffer=16M时并发数分别取32、100、200、300;

测试innodb_buffer_size分别取2G、4G、6G对应的TpmC值


测试结论

当log_file=8G,log_buffer=16M时,在并发数一定的情况下,TpmC值随着buffer_pool的增大而增大,当buffer_pool值达到系统内存的75%(6G)时,TpmC值达到最优

在buffer_pool值一定的情况下,并发数在100时TpmC值接近最大值,但本组测试中除开buffer_pool=4G这一组外,其余2组的TpmC值并没有随着并发数的增加而出现规律性的减小


测试二

测试条件

log_buffer=16M,innodb_buffer_size=6G,Log_file=4G时;

测试并发数分别取32、200、300、400、500、600对应的TpmC值

(当并发数大于600后,TPCC测试导致数据库变得极易崩溃)


测试结论

当log_file=4G,log_buffer=16M,buffer_pool=6G时,TpmC值随着并发数的不断增加而逐渐降低

并发数在32-300之间时的TpmC值比较接近,当并发数增长到400以后TpmC值出现了相对明显的下降


测试三

测试条件

log_buffer=16M,并发数=100,innodb_buffer_size=6G时;

测试log_file分别取1G、2G、4G、8G对应的TpmC值



测试结论

当buffer_pool,并发数,log_buffer这3个参数值一定时,TpmC值随着log_file值的增大而增大,当log_file值增长到4G以后,TpmC的值趋于平稳。

(注:为了加快测试进度,此次测试时长由半小时缩减到10分钟,正式测试仍然以半小时为标准)


测试四

测试条件

并发数=100,innodb_buffer_size=6G时;

测试log_file分别取4G、8G,log_buffer分别取8M、16M、64M、128M对应的TpmC值


测试结论

当并发数、buffer_pool这2个参数值一定时,log_file取8G时的TpmC值相较于该参数取4G时要略高一些,但总体差异并不明显,针对此次TPCC测试推荐将log_file设置为4G能获得最佳的TpmC值

在上述3个参数一致的情况下,无论log_buffer的取值如何对于TpmC值的影响都几乎可以忽略,本次压测中使用log_buffer=16M



基于sysbench的测试

测试一

测试条件

buffer_pool分别取4G、6G,Log_file=4G,log_buffer=16M;

测试并发数分别取2、100、200、300,500、800时对应的TPS、QPS、响应时间(avg)值




测试结论

在log_file,log_buffer,并发数这3个条件一定的情况下,TPS和QPS随着buffer_pool的增大而增大,平均响应时间也随之增加;

在log_file,log_buffer,buffer_pool这3个条件一定的情况下,当并发数为2时,TPS、QPS、响应时间(avg)都处在较低的水平;随着并发数达到100,TPS、QPS这2个指标基本维持在峰值水平,不会随着并发数的增长而产生明显变化;响应时间(avg)则随着并发数的增大而增大。

在测试中发现并发数达到1200时,无法使用sysbench进行正常的测试。


测试二

测试条件

buffer_pool=6G,log_buffer=16M,并发数=100;

测试log_file分别取100M、1G、4G时对应的TPS值


测试结论

在buffer_pool,log_buffer,并发数这3个条件一定的情况下,当log_file≥1G时,TPS值稳定在峰值水平;当log_file取值为100M时,TPS有较大的波动,表明这个取值在本次sysbench测试中对性能有较大的限制,需要根据实际log产生的量重新制定合理的log_file值。


测试总结

通过使用TPCC和sysbench这2种基线测试工具对配置为4核8G的虚拟机进行压力测试可以发现,当buffer_pool=6G,log_file=1G,log_buffer=16M,并发=100时,测试得到最佳性能。在该环境下

TPS≈1300

QPS≈25000

单次响应时间(avg)≈77ms

TpmC≈18000

采用TPCC测试,并发数在大于500以后存在使MySQL崩溃的隐患

采用sysbench测试,并发数在大于1200以后存在使MySQL崩溃的隐患



参考文档

http://imysql.com/2014/10/10/tpcc-mysql-full-user-manual.shtml

https://www.hi-linux.com/posts/38534.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容