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如下图

《MySQL压测④--压测报告》

一开始个人觉得这个图并没有什么卵用,更偏向于采用最终的评估值来结合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如下

《MySQL压测④--压测报告》

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

压测报告

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值

《MySQL压测④--压测报告》

测试结论

当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测试导致数据库变得极易崩溃)

《MySQL压测④--压测报告》

测试结论

当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值

《MySQL压测④--压测报告》

测试结论

当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值

《MySQL压测④--压测报告》

测试结论

当并发数、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)值

《MySQL压测④--压测报告》

《MySQL压测④--压测报告》

《MySQL压测④--压测报告》

测试结论

在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值

《MySQL压测④--压测报告》

测试结论

在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

    原文作者:飞翔的Tallgeese
    原文地址: https://www.jianshu.com/p/f15d2a35dfd7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞