高性能MySQL -MySQL基準測試,(http_load , sysbench 使用介紹 )

一、爲什麼需要基準測試?

答:基準測試是針對系統設計的一種壓力測試。可以觀察系統在不同的壓力下的行爲,評估系統的容量,掌握哪些是重要的變化,或者觀察系統如何處理不同的數據。

⚠️ 不能根據測試結果做簡單的推斷。例如:假設想知道使用新數據庫服務後,系統能支撐多大的業務增長,這時候不能簡單地通過測試結果支持的TPS(每秒事務數)是原系統推斷說新系統一定可以支持40倍的業務增長,因爲在業務增長的同時,系統的流量、用戶、數據以及不同數據之間的交互都在增長,它們不可能都有40倍的支撐能力,尤其是相互之間的關係。

二、 基準測試的策略

  1. 針對整個系統的整體測試(集成式)2. 單獨測試Mysql(單組件式)。

集成式測試的好處:

  1. 測試整個應用系統,包括Web服務器,應用代碼,網絡和數據庫是非常有用的。因爲用戶關注的並不僅僅是MySQL本身的性能,而是整體應用的性能。
  2. Mysql並非總是應用的瓶頸
  3. 只有對應用整體測試,才能發現各部分之間的緩存帶來的影響。
  4. 整體應用集成式更能揭示應用的真實表現

如果能在真實的數據集上執行重複的查詢,那麼針對Mysql的基準測試也是游泳的,但是數據本身和數據集的大小是真實的,可以採用生成環境的數據快照。

三、測試何種指標:

  1. 吞吐量 單位時間內的事務處理數
  2. 響應時間或者延遲 測試任務所需的整體時間
  3. 併發性 任意時間內有多少同時發生的併發請求
  4. 可擴展性 給系統增加一倍的資源,可以獲得多少的吞吐量

四、基準測試方法

常見錯誤❌:
1. 使用真實數據的子集而不是全集。例如應用需要幾百GB的數據,測試只有1GB數據
2. 使用錯誤的數據分佈。例如使用均勻分佈的數據測試,而系統的真是數據與很多熱點區域。
3. 使用不真實的分佈參數,例如假定所有用戶的個人信息會被平均地讀取。
4. 在多用戶場景中,只做單用戶的測試
5. 在單服務區上測試分佈式應用。
6. 與真實用戶行爲不匹配。例如Web頁面中的“思考時間”。真實用戶在請求到一個頁面會閱讀一段時間,而不是不停頓地一個接一個點擊相關鏈接。
7. 反覆執行同一個查詢。
8. 沒有檢查錯誤。本應該慢的查詢突然變快了,就應該檢查是否有錯誤產生。
9. 忽略了系統預熱的過程
10. 使用默認的服務器配置
11. 測試時間太短。

五、基準測試的注意事項

  1. 設計和規劃基準測試
    選擇一個有代表性的時間段,比如高峯期一小時,或者一整天,記錄生產系統上的所有查詢。

  2. 基準測試應該運行多長時間
    有時候無法確認測試需要多長的時間才足夠。可以讓測試一直運行,持續觀察知道確認系統以及穩定。

  3. 獲取系統性能和狀態
    最好爲基準測試建立一個目錄,並且每執行一輪測試都創建單獨的子目錄,將測試結果,配置文件,測試指標,腳本和其他相關說明保存其中。

六、基準測試工具

1. 集成式測試工具

  1. ab Apache Http服務器基準測試工具。可以測試Http服務器每秒最多可以處理多少請求。只能針對單個URL進行儘可能快的壓力測試
  2. http_load 比ab更加靈活,可以通過一個輸入文件提供多個URL,http_load在這些URL中隨機選擇進行測試,也可以定製,使其按照時間比率進行測試。
  3. JMeter
    是一個java應用程序,可以加載其他應用並測試其性能。它雖然是設計用來測試Web應用的,但也可以用於測試其他諸如FTP服務器。比ab,http_load都要複雜得多。有繪圖接口。

2. 單組件式測試工具

  1. mysqlslap
    可以模擬服務器的負載,並輸出計時信息。
  2. MySQL Benchmark Suite(sql_bench)
    在Mysql的發行包中也提供了一款自己的基準測試套件,可以用於在不同數據庫服務器上進行測試,是單線程的,主要用於測試服務器執行查詢的速度。
  3. sysbench
    多線程系統壓測工具。可以根據影響數據庫服務器性能的各種因素來評估系統的性能,例如,可以用來測試文件I/O、操作系統調度去、內存分配和傳輸速度、POSIX線程。

七、MySQL 的BENCHMARK()函數

這裏寫圖片描述
如同,利用BENCHMARK()函數可以測試 MD5()和SHA1()哪個執行更快,但是這個函數只是簡單地返回服務器執行表達式的時間,而不會涉及分析和優化的開銷,不適合用來做真正的基準測試,因爲很難理解真正要測試什麼。

部分基準測試工具的使用

根據以上的學習,我在網上找到工具結合高性能MySQL書籍開始試用。

http_load

1. 安裝

老辦法,官網wget,然後tar 解壓
然後cd進入目錄,之後make, make install 兩個命令安裝即可
⚠️1. make前要先有gcc編譯器,但一般Linux都有集成
2. 可能會報一個錯誤:
無法創建普通文件”/usr/local/man/man1”: 沒有那個文件或目錄
解決方法:mkdir /usr/local/man 手動建立一個就可以
記得重新make install

2.使用

-parallel 簡寫-p :含義是併發的用戶進程數
-fetches 簡寫-f :含義是總計的訪問次數
-rate 簡寫-r :含義是每秒的訪問頻率
-seconds 簡寫-s :含義是總計的訪問時間
url 是你要訪問的網址名,參數可以是單個的網址也可以使包含網址的文件

所以可以先創建一個urls.txt,然後每一行放一個url
然後命令行運行 http_load -paraller 1 -seconds 10 urls.txt
即一個併發進程,總計10秒訪問時間

當我嘗試用500個併發訪問時,阿里雲學生機已經吃不消了。http_load -parallel 500 -second 10 urls.txt

sysbench

該工具可以在https://github.com/akopytov/sysbench github上面wget,然後解壓,之後按照readme的步驟安裝

⚠️./autogen.sh 可能報錯
需要1. 安裝yum install automake 2. 安裝yum install libtool
2. 可能在./configure 之後會error,錯誤信息大概是沒找到mysql庫之類的,找了各種解決辦法,都說配置一下目錄,結果還是不對。後來我嘗試 yum install mysql-devel ,之後再運行就可以了。

測試1. CPU基準測試

這裏寫圖片描述
上圖可以看到我的服務器的CPU情況
接下來運行測試 sysbench-master]# sysbench ==test=cpu --cpu-max-prime=2000 run
這裏寫圖片描述
可以看到需要的total時間,這個基準測試可以用來判斷兩臺服務器之間的CPU性能

測試2. 文件I/O基準測試

文件I/O (fileio)基準測試可以測試系統在不同I/O負載下的性能
對於比較不同的硬盤驅動器,不同的RAID卡,不同的RAID模式,都會很有幫助。可以根據測試結果來調整I/O子系統。

1. 準備階段
sysbench --test=fileio --file-num=16 --file-block-size=16384 --file-total-size=2G prepare
1. 測試運行階段

sysbench –test=fileio –file-num=16 –file-block-size=16384 –file-total-size=2G –num-threads=4 –max-requests=100000000 –max-time=180 –file-test-mode=seqwr –file-extra-flags=direct run

結果:
這裏寫圖片描述

–file-test-mode=seqwr(順序寫入)
seqrewr 順序重寫
seqrd順序讀取
rndrd隨機讀取
rndwr隨機寫入
rndrw混合隨機讀/寫

發佈了54 篇原創文章 · 獲贊 32 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章