MySQL效能基礎測試

來源:互聯網
上載者:User

MySQL效能基礎測試
測試原因

 為什麼需要做效能測試
  • 類比比當前系統更高的負載,找出效能瓶頸
  • 重現線上異常
  • 測試不同硬體軟體配置
  • 規劃未來的業務增長
 測試分類 效能測試的分類
  • 裝置層的測試
  • 業務層的測試
  • 資料庫層的測試
 裝置層的測試
  • 關注哪些指標
    • 伺服器,磁碟效能
    • 磁碟壞塊率
    • 伺服器壽命
 業務層測試
  • 針對業務進行測試
 資料庫層的測試
  • 什麼情況下要做Mysql的測試
    • 測試不同的Mysql分之版本
    • 測試不同的mysql版本
    • 測試不同的mysql參數搭配
 mysql測試分類
  • CPU Bound --全記憶體的測試,測試的資料遠小於配置的記憶體;這樣就可以不用因為磁碟IO的效能不同,而影響測試結果。
  • IO  Bound-- 測試的資料量遠大於記憶體,這就有大量的資料從磁碟IO讀取寫入;
 4小類:
  • 寫入測試
  • 更新測試
  • 純度測試
  • 混合模式(根據業務不同)
 常用的測試載入器
  • 開源的mysql效能測試工具
    • sysbench
    • tpcc-mysql
    • mysqlslap
  • 針對業務編寫效能測試工具
    • blogbench--根據網易部落格,的具體業務來做的測試載入器
 效能測試衡量指標:
  • 服務輸送量
    • TPS--每秒執行事務的總量
    • QPS--每秒執行的請求總量
  • 服務回應時間
  • 服務並發性---正在工作中的並行作業,或者是同時工作中的線程數或者串連數。例如一個web網站"同時有50000個使用者"訪問,卻可能只有10--15個並發請求到mysql資料庫,此時並發數只有10--15。
  • 可擴充性---------------簡單來說,給系統增加一倍的資源(比如兩倍的CPU數),就可以獲得兩倍的輸送量。當然,同時效能(回應時間)也必須在可以接受的範圍內。大多數系統是無法做到如此理想的線性擴充的。
 測試方法 設計基準測試的常見錯誤:
  • 使用真實資料的子集而不是全集。
  • 與真實使用者行為不匹配。
  • 沒有檢查錯誤。-----------測試中遇到不是預期結果,就應該檢查錯誤記錄檔,這時基本要求。
  • 忽略了系統預熱的過程----系統重啟後,緩衝是沒有資料的,這時測試與實際情況不符,實際很可能是 緩衝中已經有很多資料。
  • 測試時間太短
 1 測試規劃:
  • 記錄測試資料
  • 系統配置的步驟
  • 如何測試的步驟
  • 分析結果
  • 預熱的方案
 應該建立將參數和結果文檔化的規範,每一輪測試都必須進行詳細記錄 2  基準測試應該運行多長時間 一個簡單的測試規則,就是等系統看起來穩定的時間至少等於系統預熱的時間。 基準測試應該運行足夠長的時間。 如果沒有實際去完成準確完整的基準測試,那麼已經花費的所有時間都是一種浪費。有時候要相信別人的測試結果,這總比做一次半拉子的測試來得到一個錯誤的結論要好。 3  擷取系統效能和狀態 需要記錄的資料包括系統狀態和效能指標:
  • cpu使用率
  • 磁碟I/O
  • 網路流量統計
  • show global status 計數器等
使用指令碼對這些資料進行收集。 基於mysql的預設配置的是沒有什麼意義,因為預設配置是基於消耗很少記憶體的極小應用的。 4 運行基準測試並分析結果 自動化基準測試,是個不錯的方案。可以是一個makefile或者一組指令碼。 要儘可能地使用所有測試過程都自動化,包括資料裝載,系統預熱,執行測試,記錄結果。等。 多次測量 5 繪圖的重要性 通過圖形可以立刻發現一些問題,而這些問題在未經處理資料中卻很難被注意到。 在執行基準測試的時候要儘可能收集更多的細節資料,然後將資料繪製成圖形,這樣可以協助快速地發現問題。 gnuplot或者R繪圖; 測試載入器 Sysbench
  • 業界較為出名的效能測試工具
  • 可以測試磁碟,CPU,資料庫
  • 支援多種資料庫:Oracle,DB2,MYSQL
  • 需要自己下載編譯安裝
  • 建議版本:sysbench0.5
 sysbench,不僅用來測試資料庫的效能,也可以測試回合資料庫的伺服器的效能。 強烈建議熟悉sysbench測試,在mysql使用者的工具包中,這應該是最有用的工具之一。 
  • sysbench 的cpu基準測試
  • sysbench 的檔案I/O基準測試
  • sysbench 的OLTP基準測試
 sysbench 其他的基準測試,但和資料庫效能沒有直接關係。
  • 記憶體-----測試記憶體的連續讀寫效能
  • 線程-----測試線程調度器的效能。
  • 互斥鎖---測試互斥鎖效能。
  • 順序寫---測試順序寫的效能。
Tpcc-mysql 
  • TPC-C是專門針對聯機交易處理系統(OLTP系統)的規範
  • Tpcc-mysql由percona根據規範實現
TPCC流程  更能類比線上業務使用該測試載入器:需要建立資料和表結構,載入資料,執行測試三個步驟。 benchmark()mysql的benchmark():可以測試某些特定操作的執行速度。 
mysql> set @input := 'hello world';Query OK, 0 rows affected (0.00 sec) mysql> select benchmark(1000000,MD5(@input));+--------------------------------+| benchmark(1000000,MD5(@input)) |+--------------------------------+|                              0 |+--------------------------------+1 row in set (1.45 sec) mysql> select benchmark(1000000,SHA1(@input));+---------------------------------+| benchmark(1000000,SHA1(@input)) |+---------------------------------+|                               0 |+---------------------------------+1 row in set (1.40 sec) 
雖然benchmark()函數用起來很方便,但是不適合用來做真正的基準測試,因為該函數只是簡單地返回伺服器執行運算式的時間,不會涉及分析和開銷,等因素。而且運算式必須像這個例子一樣包含使用者定義的變數(input),否則會多次執行同樣的運算式會因為系統快取命中而影響結果。 具體測試實踐,請看sysbench實踐,tpcc-mysql實踐;  總結 
  •  四小類:寫入測試,更新測試,純度測試,混合模式
  •  效能測試衡量指標:
    •  服務輸送量
      •  TPS--每秒執行事務的總量
      •  QPS--每秒執行請求的總量
    •  服務回應時間
    •  服務並發性
  •  設計測試常見錯誤:
    • 使用資料子集而不是全集,
    • 與真實使用者行為不匹配,
    • 沒有檢查錯誤,
    • 忽略了系統預熱過程,測試時間太短;
  • 測試方法
    •  測試規劃:
      • 記錄測試資料,
      • 系統配置步驟,
      • 測試步驟,
      • 分析結果,
      • 預熱方案;
    •  測試時間:測試應該運行足夠長的時間,至少等於系統預熱的時間。
    •  擷取系統效能和狀態:cpu,IO,網路流量,mysql狀態計數器;
    •  運行測試:自動化測試包含:資料裝載,系統預熱,執行測試,記錄結果。
    •  繪圖分析:直觀的發現問題;
    •  測試載入器:sysbench,tpcc-mysql,benchmark()
  •  測試小結:
    •  IO Bound測試資料量要遠大於記憶體,cpu Bound測試資料量要小於記憶體
    •  測試時間建議大於60分鐘,減小誤差;有系統預熱時間;
    •  Sysbench更傾向於測試Mysql效能,Tpcc更接近於業務
    •  運行測試程式需要同時監控機器負載,Mysql各項監控指標

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.