????就是針對(duì)系統(tǒng)設(shè)計(jì)的一種壓力測試,是唯一方便有效的收捣、可以學(xué)習(xí)系統(tǒng)在給定的工作負(fù)載下會(huì)發(fā)生什么方法棉姐⊥懒校基準(zhǔn)測試畢竟不是真實(shí)壓力測試,所以做基準(zhǔn)測試只能說是進(jìn)行大概的測試伞矩,來確定系統(tǒng)大致的余量笛洛,其要求盡量簡單直接,結(jié)果之間容易相互比較乃坤,成本低且易于執(zhí)行
測試策略
????有兩種主要的策略:一是針對(duì)整個(gè)系統(tǒng)的整體測試苛让,另一個(gè)是單獨(dú)測試MySQL。其中對(duì)整個(gè)系統(tǒng)做集成式測試而不單獨(dú)測試MySQL的原因是:
1. 用戶不僅僅關(guān)注的是MySQL本身性能湿诊,而更多的是應(yīng)用整體性能
2. MySQL并非總是應(yīng)用的瓶頸狱杰,通過整體測試可以揭示這點(diǎn)
3. 對(duì)整體測試才會(huì)發(fā)現(xiàn)各部分之間的緩存帶來的影響
4. 更能揭示應(yīng)用的真實(shí)表現(xiàn)
????而由于對(duì)整體做基準(zhǔn)測試很難建立,有時(shí)候其實(shí)只需要關(guān)注MySQL本身的性能厅须,至少項(xiàng)目初期可以這么做仿畸,以下情況選擇只測試MySQL:
1. 需要比較不同的schema或查詢的性能
2. 針對(duì)應(yīng)用中某個(gè)具體問題的測試
3. 為畢淼漫長的基準(zhǔn)測試,想通過一個(gè)短期的基準(zhǔn)測試來檢測某些調(diào)整后的效果
測試指標(biāo)
????吞吐量:單位時(shí)間內(nèi)的事務(wù)處理數(shù)九杂。常用的測試單位是每秒事務(wù)數(shù)(TPS)或者分鐘事務(wù)數(shù)(TPM)颁湖。
????響應(yīng)時(shí)間或者延遲:用于測試任務(wù)所需的整體時(shí)間宣蠕。根據(jù)時(shí)間可以計(jì)算出平均響應(yīng)時(shí)間例隆、最小最大響應(yīng)時(shí)間和所占百分比。
????并發(fā)性:這里數(shù)據(jù)庫的并發(fā)性并不是同時(shí)創(chuàng)建的連接數(shù)抢蚀,而是同時(shí)執(zhí)行的查詢數(shù)镀层,換言之關(guān)注的是正在工作中的并發(fā)操作,或者是同時(shí)工作中的線程數(shù)或者連接數(shù)皿曲。當(dāng)并發(fā)性增加時(shí)唱逢,需要測量吞吐量是否下降,響應(yīng)時(shí)間是否變長屋休,如果是這樣坞古,應(yīng)用可能就無法處理峰值壓力。并發(fā)性測試通常不是為了測試應(yīng)用能達(dá)到的并發(fā)度劫樟,而是為了測試不同并發(fā)度下的性能痪枫。數(shù)據(jù)庫的并發(fā)性需要測量,可以通過sysbench指定32叠艳、64或128個(gè)線程測試奶陈,然后測試期間記錄MySQL的Threads_running狀態(tài)值。
????可擴(kuò)展性:指給系統(tǒng)增加一倍的工作附较,在理想情況下就能獲得兩倍的結(jié)果(即增加一倍吞吐量)吃粒,同時(shí)性能(響應(yīng)時(shí)間)必須在可接受的范圍內(nèi)。
測試方法
????如下錯(cuò)誤可能導(dǎo)致測試結(jié)果無用或者不準(zhǔn)確:
使用真實(shí)數(shù)據(jù)的子集而不是全集拒课,沒有結(jié)合實(shí)際的數(shù)據(jù)需求來
使用錯(cuò)誤的數(shù)據(jù)分布徐勃,數(shù)據(jù)分布狀態(tài)要符合真實(shí)數(shù)據(jù)的特點(diǎn)
使用不真實(shí)的分布參數(shù)事示,數(shù)據(jù)讀取特點(diǎn)不符合實(shí)際
多用戶場景下只做單用戶測試
單服務(wù)器上測試分布式應(yīng)用
與真實(shí)用戶行為不匹配
反復(fù)執(zhí)行同一個(gè)查詢
沒有檢查錯(cuò)誤,基準(zhǔn)測試后一定要檢查下錯(cuò)誤日志
忽略了系統(tǒng)預(yù)熱的過程疏旨,要了解系統(tǒng)重啟后需要多長時(shí)間才能達(dá)到正常的性能容量
使用默認(rèn)的服務(wù)器配置很魂,沒有使用優(yōu)化的配置
測試時(shí)間較短
總之就是要讓測試過程盡可能接近真實(shí)應(yīng)用的情況。
????要建立將參數(shù)和結(jié)果文檔化的規(guī)范檐涝,每一輪測試都必須進(jìn)行詳細(xì)記錄遏匆,做好設(shè)計(jì)和規(guī)劃。
????基準(zhǔn)測試應(yīng)該運(yùn)行足夠長的時(shí)間谁榜,系統(tǒng)需要預(yù)熱幅聘。(不然會(huì)有新版本沒有舊版本性能快的錯(cuò)覺)
????寫些腳本來獲取系統(tǒng)性能和狀態(tài),建議建立一個(gè)目錄為每一輪測試都創(chuàng)建單獨(dú)的子目錄窃植,里面保存著測試結(jié)果帝蒿、配置文件、測試指標(biāo)巷怜、腳本和其他說明葛超。
????為了確認(rèn)測試結(jié)果是否可重復(fù),每次重新測試之前要確保系統(tǒng)的狀態(tài)是一致的延塑,如果是非常重要的測試绣张,甚至每次都要重啟系統(tǒng)。一般情況下关带,需要測試的是經(jīng)過預(yù)熱的系統(tǒng)侥涵,還需要確保預(yù)熱時(shí)間足夠長、是否可重復(fù)宋雏。如果預(yù)熱采用的是隨機(jī)查詢芜飘,那么測試結(jié)果可能就不可重復(fù)。
????很多基準(zhǔn)測試都是用來做預(yù)測系統(tǒng)遷移后的性能的磨总,如從Oracle遷移到MySQL嗦明,很多情況下都需要重新設(shè)計(jì)MySQL的schema和查詢。
????基于MySQL的默認(rèn)配置測試沒有什么意義蚪燕,因?yàn)槠淠J(rèn)配置是基于消耗很少內(nèi)存的極小應(yīng)用娶牌,如果直接用其他的商業(yè)數(shù)據(jù)庫與MySQL默認(rèn)配置進(jìn)行對(duì)比測試是很沒有說服力的。
運(yùn)行與結(jié)果分析
????盡量采取自動(dòng)化測試邻薯,可以使用一個(gè)Makefile文件或者一組腳本裙戏。
????使用集成式的測試工具:
ab:一個(gè)Apache HTTP服務(wù)器基準(zhǔn)測試工具,可以測試HTTP服務(wù)器每秒最多可以處理多少請求厕诡。如果是針對(duì)應(yīng)用就是整個(gè)應(yīng)用每秒可以滿足多少請求累榜,是一個(gè)非常簡單的工具,但只能針對(duì)單個(gè)URL盡可能快的壓力測試。
http_load:與ab類似壹罚,但是可以輸入一個(gè)文件提供多個(gè)URL葛作,對(duì)這些URL進(jìn)行隨機(jī)選擇測試。
JMeter:一個(gè)java應(yīng)用程序猖凛,可以加載其他應(yīng)用并測試其性能赂蠢。比前兩個(gè)復(fù)雜,可以通過控制預(yù)熱時(shí)間等參數(shù)來更加靈活地模擬真實(shí)用戶的訪問辨泳,而且有繪圖接口虱岂,可以記錄測試數(shù)據(jù),然后離線重演測試結(jié)果菠红。
使用單組件測試工具(針對(duì)MySQL的):
mysqlslap:可以模擬服務(wù)器負(fù)載第岖,輸出計(jì)時(shí)信息。測試時(shí)可以執(zhí)行并發(fā)連接數(shù)量试溯,并指定sql語句蔑滓。如果沒有指定sql,會(huì)自動(dòng)生成查詢schema的select語句遇绞。
MySQL Benchmark Suite(sql-bench):可以用于不同MySQL數(shù)據(jù)庫服務(wù)器上進(jìn)行比較測試键袱,是單線程的,主要用于測試服務(wù)器執(zhí)行查詢的速度摹闽,比較哪種類型的操作在服務(wù)器上執(zhí)行得更快蹄咖。好處是包含大量預(yù)定義測試,容易使用钩骇,可以很輕松地用于比較不同存儲(chǔ)引擎或者不同配置的性能測試比藻,缺點(diǎn)是由于是單線程的铝量,所以無法測試多CPU的能力倘屹,只能比較單CPU服務(wù)器的性能差別。(該版本5.7已經(jīng)拿掉了慢叨,要學(xué)習(xí)只能參看5.6版本)
Super Smack:一款用于MySQL和PostgreSQL的基準(zhǔn)測試工具纽匙,可以提供壓力測試和負(fù)載生成,是一個(gè)強(qiáng)大復(fù)雜的工具拍谐,可以模擬多用于訪問烛缔,可以加載測試數(shù)據(jù)到數(shù)據(jù)庫,并使用隨機(jī)數(shù)據(jù)填充測試表轩拨。測試定義使用的是.smack文件践瓷。
Database Test Suite:一款類似某些工業(yè)標(biāo)準(zhǔn)測試的測試工具集。
Percona's TPCC-MySQL Tool:一個(gè)類似TPC-C的基準(zhǔn)測試工具集亡蓉,有部分是專門為MySQL測試開發(fā)的晕翠。(https://www.cnblogs.com/xuanzhi201111/p/4148434.html)
sysbench:一款多線程系統(tǒng)壓測工具,可以根據(jù)影響數(shù)據(jù)庫服務(wù)器性能的各種因素來評(píng)估系統(tǒng)性能。功能強(qiáng)大淋肾,且支持Lua腳本語言硫麻,更加靈活。(https://blog.csdn.net/kikajack/article/details/79977108)
總結(jié)
????每個(gè)MySQL使用者都應(yīng)該了解一些基準(zhǔn)測試的知識(shí)樊卓,正確描述問題拿愧,選擇合適基準(zhǔn)測試回答問題,設(shè)置測試參數(shù)碌尔,運(yùn)行浇辜,收集,分析唾戚。
????如果沒有做個(gè)基準(zhǔn)測試的建議至少要熟悉sysbench奢赂,可以先學(xué)習(xí)如何使用oltp和fileio測試【弊撸基準(zhǔn)測試很重要膳灶,比如SAN存儲(chǔ)真的出現(xiàn)壞盤,或者RAID控制器的緩存策略的配置不像工具中顯示哪有立由,通過對(duì)單磁盤測試如果發(fā)現(xiàn)每秒可以執(zhí)行14000次隨機(jī)讀轧钓,那么要么是碰到嚴(yán)重錯(cuò)誤或者配置出現(xiàn)問題。(一塊機(jī)械磁盤每秒只能執(zhí)行幾百次的隨機(jī)讀操作锐膜,因?yàn)閷さ啦僮餍枰獣r(shí)間的)