新聞中心
| 導(dǎo)語
成都創(chuàng)新互聯(lián)服務(wù)緊隨時代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十載的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團(tuán)隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進(jìn)行成都做網(wǎng)站、成都網(wǎng)站建設(shè)、建設(shè)、維護(hù)、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
最近在配合某同事做一項性能壓測,發(fā)現(xiàn)相同數(shù)據(jù)量、相同數(shù)據(jù)庫參數(shù)、相同sysbench壓力、相同數(shù)據(jù)庫版本和sysbench版本、相同服務(wù)器硬件環(huán)境下,我和同事的壓測結(jié)果天差地別:一個小時壓測結(jié)束后,我的壓測結(jié)果中出現(xiàn)了高頻率周期性阻塞(tps,qps為0),而同事的壓測結(jié)果中未出現(xiàn)阻塞(tps,qps從頭到尾都比較穩(wěn)定)。正常情況下,在環(huán)境完全相同時,不可能會出現(xiàn)如此巨大的性能差異。但這次,不可能發(fā)生的事情它的確發(fā)生了。經(jīng)過復(fù)測與排查,終于發(fā)現(xiàn)了其中的奧妙。
服務(wù)器硬件信息
-
數(shù)據(jù)庫主機(jī)
* CPU:72 process
* memory:128G
* 磁盤:某存儲 100G
* 網(wǎng)卡:intel 萬兆網(wǎng)卡 -
數(shù)據(jù)庫版本:MySQL 5.7.21
-
sysbench版本:1.0.9
-
sysbench主機(jī)
* CPU:20 process
* memory:128G
* 磁盤:本地SAS 50G
* 網(wǎng)卡:intel 萬兆網(wǎng)卡
| 復(fù)測結(jié)果數(shù)據(jù)
先來看看壓測結(jié)果數(shù)據(jù),如下圖所示(注:此處只截取了前幾十秒的數(shù)據(jù)進(jìn)行對比):
-
我的壓測結(jié)果(下圖可見,明顯的周期性tps,qps為0的情況)
-
同事的壓測結(jié)果(下圖可見,tps,qps較為穩(wěn)定且并未出現(xiàn)阻塞情況)
| 抓取等待事件
看到上文第1節(jié)中的結(jié)果,如果根據(jù)以往的經(jīng)驗、常識來快速判斷...估計會懵圈!!當(dāng)?shù)弥碌臏y試結(jié)果很穩(wěn)定時,我本能地想:要把等待事件信息拉出來瞧瞧!!下面是我與同事各自在復(fù)測時截取的等待事件信息(復(fù)測時間為3分鐘)(不想仔細(xì)看等待事件內(nèi)容的親可直接跳至第3節(jié))
operation操作時間統(tǒng)計(每秒查詢一次,查詢數(shù)十次截取時間最長的5次)
使用lua腳本隨機(jī)生成主鍵值時:假設(shè)當(dāng)delete操作刪除id=1的數(shù)據(jù)行時,緊接著insert也會使用相同的id=1的主鍵值。所以高概率會出現(xiàn)innodb重復(fù)使用delete數(shù)據(jù)行所在的頁來存放insert數(shù)據(jù),在sysbench高并發(fā)壓力下,大部分的insert數(shù)據(jù)存儲可能只需要在內(nèi)存中已存在的頁內(nèi)操作即可,無需太多IO操作
不使用lua腳本隨機(jī)生成的主鍵值,而是使用表的自增屬性生成主鍵值時:假設(shè)當(dāng)delete操作刪除id=1的數(shù)據(jù)行時,緊接著insert由于是表自增屬性自己生成,也就是說幾乎不太可能id=1,所以高概率會出現(xiàn)innodb重新申請一個數(shù)據(jù)頁來寫入insert數(shù)據(jù),在sysbench高并發(fā)壓力下,大部分的insert數(shù)據(jù)存儲可能需要從磁盤文件中重新申請空間,IO操作較為頻繁
至此,我和同事的壓測結(jié)果有巨大差異的原因大致確定,后續(xù)經(jīng)過反復(fù)的驗證,也確認(rèn)了是由于oltp.lua腳本的微小差異導(dǎo)致的。由于我們大多數(shù)時候都是使用的本地盤,而本地盤IO延遲低,通常情況下sysbench壓測時這點微小的差異容易被忽略。而在此案例中,由于我們測試的環(huán)境中使用了某存儲設(shè)備,相對于本地盤,IO延遲大大增加,進(jìn)而造成了因為oltp.lua腳本的微小差異而導(dǎo)致最后壓測結(jié)果的巨大差異。
提示:如果不想改動lua腳本,又想避免主鍵沖突有辦法解決嗎?有的,從sysbench 0.5版本開始,新增了一個隱藏選項--mysql-ignore-errors,用于忽略指定的錯誤,如果要避免主鍵沖突,指定選項--mysql-ignore-errors=1062 即可。
| 作者簡介
羅小波·沃趣科技高級數(shù)據(jù)庫技術(shù)專家
IT從業(yè)多年,歷任運維工程師、高級運維工程師、運維經(jīng)理、數(shù)據(jù)庫工程師,曾參與版本發(fā)布系統(tǒng)、輕量級監(jiān)控系統(tǒng)、運維管理平臺、數(shù)據(jù)庫管理平臺的設(shè)計與編寫,熟悉MySQL體系結(jié)構(gòu),Innodb存儲引擎,喜好專研開源技術(shù),追求完美。
當(dāng)前標(biāo)題:sysbench的lua小改動導(dǎo)致的性能差異
鏈接分享:http://ef60e0e.cn/article/gseosh.html