MySQL基准測試(benchmark)


基准測試是唯一方便有效的、可以學習系統在給定的工作負載下會發生什么的方法。基准測試可以觀察系統在不同壓力下的行為,評估系統的容量,掌握哪些是重要的變化,或者觀察系統如何處理不同的數據。

  • 驗證基於系統的一些假設,確認這些假設是否符合實際情況
  • 重現系統中的某些異常行為,以解決這些異常
  • 測試系統當前的運行情況。如果不清楚系統的當前性能,就無法確認某些優化的效果如何。也可以利用歷史的基准測試結果來分析診斷一些無法預測的問題。
  • 模擬比當前系統更高的負載,以找出系統隨着壓力增加而可能遇到的擴展性瓶頸。
  • 規划未來的業務增長。基准測試可以評估在項目未來的負載下,需要什么樣的硬件,需要多大容量的網絡,以及其他相關資源。這有助於降低系統升級和重大變更的風險。
  • 測試應用適應可變環境的能力。
  • 測試不同的硬件、軟件和操作系統配置
  • 證明新采購的設備是否配置正確。

基准測試的一個主要問題在於其不是真實壓力測試。基准測試施加給系統的壓力相對於真實壓力來說,比較簡單。

我們只能進行大概的測試,來確定系統大致的余量有多少。基准測試要盡量簡單直接,結果之間容易相互比較,成本低切易於執行。

基准測試的策略

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

針對整個系統做集成式測試,而不是單獨測試MySQL的原因如下:

  • 測試整個應用系統,包括Web服務器、應用代碼、網絡和數據庫是非常有用的,因為用戶關注的並不僅僅是MySQL本身的性能,而是應用整體的性能。
  • MySQL並非總是應用的瓶頸,通過整體的測試可以揭示這一點。
  • 只有對應用做整體測試,才能發現各個部分之間的緩存帶來的影響。
  • 整體應用的集成式測試更能揭示應用的真實表現,而單獨組件的測試很難做到這一點。

針對於以下情況,可以只測試MySQL:

  • 需要比較不同的schema或查詢的性能
  • 針對應用中某個具體問題的測試
  • 為了避免漫長的基准測試,可以通過一個短期的基准測試,做到快速的“周期循環”,來檢測出某些調整后的效果。

測試指標

吞吐量 單位時間內的事務處理數。(標准測試TPC-C) 這類基准測試主要針對OLTP的吞吐量,適用於多用戶的交互式應用。常用的測試單位是每秒事務數(TPS),有些也采用每分鍾事務數(TPM)

響應時間或延遲 用於測試任務所需的整體時間。根據具體應用,測試的時間單位可能是微秒、毫秒或者分鍾。根據不同的時間單位可以計算出平均響應時間、最小響應時間、最大響應時間和所占百分比。 使用圖表有助於理解測試結果。

並發性 並發性基准測試需要關注的是正在共組哦中的並發操作,或者是同時工作中的線程數或者連接數。當並發性增加時,需要測量吞吐量是否下降,響應時間是否變長。並發性測量完全不同於響應時間的吞吐量。它不像是一個結果,更像是設置基准測試的一種屬性。

可擴展性 在系統的業務壓力可能發生變化的情況下,測試可擴展性就非常必要了。可擴展性是指給系統增加一倍的工作,在理想情況下就能獲得兩倍的結果。或者說,給系統增加一倍的資源(比如兩倍的CPU數),就可以獲得兩倍的吞吐量。當然,同時性能也必須在可以接受的范圍內。(大多數系統是無法做到如此理想的線性擴展的。隨着壓力的變化,吞吐量和性能都可能越來越差)。

規划基准測試的第一步是提出問題並明確目標,然后決定是采用標准的基准測試還是設計專用的測試。
如果采用標准的基准測試,應該確認了選擇合適的測試方案。設計專用的基准測試是很復雜的,往往需要一個迭代的過程。首先需要獲得生產數據的數據集快照,並且該快照很容易還原,以便進行后續的測試。

針對數據運行查詢,可以建立一個單元測試集是作為初步的測試,並運行多遍。但是這和真實的數據庫環境還是有差別的。更好的辦法是選擇有個代表性的時間段,記錄生產系統上的所有查詢。如果時間段選得比較小,則可以選擇多個時間段。這樣有助於覆蓋整個系統的活動狀態。

可以在不同級別記錄查詢,可以記錄Web服務器上的HTTP請求,也可以打開MySQL的查詢日志。

即使不需要創建專用的基准測試,詳細地寫下測試規則也是必需的。測試可能要多次反復運行,因此需要精確地重現測試過程。測試規划應該記錄測試數據、系統配置的步驟、如何測量和分析結果,以及預熱的方案等。

應該建立將參數和結果文檔化的規范,每一輪測試都必須進行詳細記錄。需要記住的是,經常要寫一些腳本來分析測試結果,因此能夠不用打開電子表格或者文本文件等額外操作,當然是更好的。

基准測試工具

已有的集成式測試工具如下:

  • ab 是一個Apache HTTP 服務器基准測試工具,它可以測試HTTP服務器每秒最多可以處理多少請求。如果測試的是Web應用服務,這個結果可以轉換成整個應用每秒可以滿足多少個請求。
  • http_load 概念上與ab相似,但比ab要更加靈活。可以通過一個輸入文件提供多個URL,http_load在這些URL中隨機選擇進行測試。
  • JMeter 可以加載其他應用並測試其性能。它雖然是設計用來測試Web應用的,但可以用於測試FTP服務器,或者通過JDBC進行數據庫查詢測試。

已有的單組件測試工具如下:

  • mysqlslap 可以模擬服務器的負載,並輸出計時信息。如果沒有指定SQL語句,mysqlslap會自動生成查詢schema的select語句。
  • MYSQL Benchmark Suyite 可以用於在不同數據庫服務器上進行比較測試。它是單線程的,主要用於測試服務器執行查詢的速度。結果會顯示哪種類型的操作在服務器上執行得更快。
  • Super Smack 一款用於MySQL和PostgreSQL的基准測試工具,可以提供壓力測試和負載生成。可以模擬多用戶訪問,可以加載測試數據到數據庫,並支持使用隨機數據填充測試表。
  • Database Test Suite 一款類似某些工業標准測試的測試工具集。
  • Percona's TPCC-MySQL Tool 類似於TPC-C的基准測試工具集,其中有部分是專門為MySQL測試開發的。
  • sysbench 一款多線程系統壓測工具。它可以根據影響數據庫服務器性能的各種因素來評估系統的性能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM