MySQL壓測④--壓測報告

繪圖部分

需要部署gnuplot

yum install -y gnuplot

關(guān)于繪圖相關(guān)腳本的使用

TPCC部分

首先葉總網(wǎng)站上的tpcc指令里面有一個-f生成log的項(xiàng),說實(shí)話并不知道這個-f生成的log有什么作用,因?yàn)槟壳霸诰W(wǎng)上找到的繪圖工具都無法讀取這個-f生成的數(shù)據(jù),所以后續(xù)tpcc的命令并未采用-f參數(shù)去生成腳本。

葉總版本里面自帶的analyze.sh在我的測試中顯得不太好使(沒有仔細(xì)看腳本,直接復(fù)制過來了),本次壓測采用的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腳本內(nèi)容如下(粘貼時最好去掉加黑的注釋)

#!/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應(yīng)該是線段的參數(shù),需要有多少條線就set多少條;這里4行的lw都是3,這個3可能是線段的寬度等參數(shù),而前面的lt 1 5 7 9個人覺得可能和顏色之類的有關(guān)

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列數(shù)據(jù)..標(biāo)題..使用第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列數(shù)據(jù)..標(biāo)題..使用第3條線

EOP


通過前期的數(shù)據(jù)觀察,不同并發(fā)數(shù)、log_file、log_buffer等參數(shù)情況下的圖像差距并不明顯,為了讓生成圖像能更直觀的展示測試結(jié)果,選取不同buffer_pool_size作為甄別條件

使用分析腳本分別提取對應(yīng)log中的數(shù)據(jù)

[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

將提取的數(shù)據(jù)匯總

[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如下圖

一開始個人覺得這個圖并沒有什么卵用,更偏向于采用最終的評估值來結(jié)合excel折線圖進(jìn)行分析

后來在通過sysbench對不同log_file參數(shù)進(jìn)行測試時發(fā)現(xiàn)gnuplot生成的走勢圖能更直觀的發(fā)現(xiàn)一些折線圖不能很好展現(xiàn)的尖刺情況


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


針對上面幾個腳本的解釋

首先請?jiān)彵救俗诫u的awk水平...

加黑部分的'/10s]/,/1800s]?這2個參數(shù)是需要根據(jù)實(shí)際情況進(jìn)行更改的,我sysbench采取的是10s計(jì)數(shù)一次,累計(jì)運(yùn)行1800s,所以統(tǒng)計(jì)是從10s開始直到1800s結(jié)束;

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

而qps沒有這個值,個人的理解是read/s和write/s值之和,所以腳本采取了單純的加法,也就是$7+$9

至于響應(yīng)時間(avg),只有從最后的結(jié)果獲取,并不知道如何獲取實(shí)時的值,因此不存在該腳本,而且在報告里面也沒有這個值的走勢圖

對于繪圖腳本,也就是坐標(biāo)的名字換一下,其他和tpcc的繪圖沒區(qū)別


腳本的使用方法與前面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.測試環(huán)境

? ? ? ? ?MySQL服務(wù)器IP地址:172.17.100.100

???????? 操作系統(tǒng):CentOSrelease 6.8 (Final)

???????? CPU:4核

???????? 內(nèi)存:8G

???????? 硬盤:普通SAS硬盤

???????? 基線測試工具:tpcc和sysbench


2.測試方案

TPCC

1. 統(tǒng)計(jì)buffer_pool分別取2G、4G、6G時并發(fā)數(shù)分別取32、100、200、300的TpmC值(log_buffer=16M、log_file=8G)

2. 統(tǒng)計(jì)log_buffer=16M,innodb_buffer_size=6G,Log_file=4G時測試并發(fā)數(shù)分別取32、200、300、400、500、600對應(yīng)的TpmC值

3. 統(tǒng)計(jì)log_file分別取1G、2G、4G、8G時并發(fā)數(shù)為100的TpmC值(log_buffer=16M、buffer_pool=6G)

4. 統(tǒng)計(jì)log_buffer分別取8M、16M、64M、128M時時并發(fā)數(shù)為100的TpmC值(buffer_pool=6G、log_file=4G、8G)

5. 每次測試完成,重啟mysql

Sysbench

1. 統(tǒng)計(jì)buffer_pool分別取4G、6G時,并發(fā)數(shù)分別取2、100、200、300、500、800時的TPS、QPS、響應(yīng)時間(avg)值

2. 統(tǒng)計(jì)buffer_pool為6G,log_buffer為16M,并發(fā)數(shù)為100時log_file分別取100M,1G,4G時的TPS值

3. 每次測試完成,重啟mysql


3.測試結(jié)論

基于TPCC的測試

測試一

測試條件

Log_file=8G,log_buffer=16M時并發(fā)數(shù)分別取32、100、200、300;

測試innodb_buffer_size分別取2G、4G、6G對應(yīng)的TpmC值


測試結(jié)論

當(dāng)log_file=8G,log_buffer=16M時,在并發(fā)數(shù)一定的情況下,TpmC值隨著buffer_pool的增大而增大,當(dāng)buffer_pool值達(dá)到系統(tǒng)內(nèi)存的75%(6G)時,TpmC值達(dá)到最優(yōu)

在buffer_pool值一定的情況下,并發(fā)數(shù)在100時TpmC值接近最大值,但本組測試中除開buffer_pool=4G這一組外,其余2組的TpmC值并沒有隨著并發(fā)數(shù)的增加而出現(xiàn)規(guī)律性的減小


測試二

測試條件

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

測試并發(fā)數(shù)分別取32、200、300、400、500、600對應(yīng)的TpmC值

(當(dāng)并發(fā)數(shù)大于600后,TPCC測試導(dǎo)致數(shù)據(jù)庫變得極易崩潰)


測試結(jié)論

當(dāng)log_file=4G,log_buffer=16M,buffer_pool=6G時,TpmC值隨著并發(fā)數(shù)的不斷增加而逐漸降低

并發(fā)數(shù)在32-300之間時的TpmC值比較接近,當(dāng)并發(fā)數(shù)增長到400以后TpmC值出現(xiàn)了相對明顯的下降


測試三

測試條件

log_buffer=16M,并發(fā)數(shù)=100,innodb_buffer_size=6G時;

測試log_file分別取1G、2G、4G、8G對應(yīng)的TpmC值



測試結(jié)論

當(dāng)buffer_pool,并發(fā)數(shù),log_buffer這3個參數(shù)值一定時,TpmC值隨著log_file值的增大而增大,當(dāng)log_file值增長到4G以后,TpmC的值趨于平穩(wěn)。

(注:為了加快測試進(jìn)度,此次測試時長由半小時縮減到10分鐘,正式測試仍然以半小時為標(biāo)準(zhǔn))


測試四

測試條件

并發(fā)數(shù)=100,innodb_buffer_size=6G時;

測試log_file分別取4G、8G,log_buffer分別取8M、16M、64M、128M對應(yīng)的TpmC值


測試結(jié)論

當(dāng)并發(fā)數(shù)、buffer_pool這2個參數(shù)值一定時,log_file取8G時的TpmC值相較于該參數(shù)取4G時要略高一些,但總體差異并不明顯,針對此次TPCC測試推薦將log_file設(shè)置為4G能獲得最佳的TpmC值

在上述3個參數(shù)一致的情況下,無論log_buffer的取值如何對于TpmC值的影響都幾乎可以忽略,本次壓測中使用log_buffer=16M



基于sysbench的測試

測試一

測試條件

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

測試并發(fā)數(shù)分別取2、100、200、300,500、800時對應(yīng)的TPS、QPS、響應(yīng)時間(avg)值




測試結(jié)論

在log_file,log_buffer,并發(fā)數(shù)這3個條件一定的情況下,TPS和QPS隨著buffer_pool的增大而增大,平均響應(yīng)時間也隨之增加;

在log_file,log_buffer,buffer_pool這3個條件一定的情況下,當(dāng)并發(fā)數(shù)為2時,TPS、QPS、響應(yīng)時間(avg)都處在較低的水平;隨著并發(fā)數(shù)達(dá)到100,TPS、QPS這2個指標(biāo)基本維持在峰值水平,不會隨著并發(fā)數(shù)的增長而產(chǎn)生明顯變化;響應(yīng)時間(avg)則隨著并發(fā)數(shù)的增大而增大。

在測試中發(fā)現(xiàn)并發(fā)數(shù)達(dá)到1200時,無法使用sysbench進(jìn)行正常的測試。


測試二

測試條件

buffer_pool=6G,log_buffer=16M,并發(fā)數(shù)=100;

測試log_file分別取100M、1G、4G時對應(yīng)的TPS值


測試結(jié)論

在buffer_pool,log_buffer,并發(fā)數(shù)這3個條件一定的情況下,當(dāng)log_file≥1G時,TPS值穩(wěn)定在峰值水平;當(dāng)log_file取值為100M時,TPS有較大的波動,表明這個取值在本次sysbench測試中對性能有較大的限制,需要根據(jù)實(shí)際log產(chǎn)生的量重新制定合理的log_file值。


測試總結(jié)

通過使用TPCC和sysbench這2種基線測試工具對配置為4核8G的虛擬機(jī)進(jìn)行壓力測試可以發(fā)現(xiàn),當(dāng)buffer_pool=6G,log_file=1G,log_buffer=16M,并發(fā)=100時,測試得到最佳性能。在該環(huán)境下

TPS≈1300

QPS≈25000

單次響應(yīng)時間(avg)≈77ms

TpmC≈18000

采用TPCC測試,并發(fā)數(shù)在大于500以后存在使MySQL崩潰的隱患

采用sysbench測試,并發(fā)數(shù)在大于1200以后存在使MySQL崩潰的隱患



參考文檔

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內(nèi)容