前言:
基準測試benchmark:基本技能,是針對系統設計的一種壓力測試,是唯一方便有效、可學習系統在給定的工作負載下回傳生什麼 的方法,他可以觀察系統在不同壓力下的行為,評估系統的容量,掌握哪些是重要的變化,或觀察系統如何處理不同的資料,可在系統實際負載外建立虛擬情境進行測試(掌握系統行為)
本文:
如前言,基準測試很、重、要!可以完成的工作: 總的來說:測試硬體、預估硬體、驗證系統、測壓力、調配置
1、驗證基於系統的假設,確認假設是否符合實際情況;2、重現系統中某些異常行為,以解決;3、測試系統當前的運行情況,利用曆史結果分析診斷無法預測的問題; 4、類比更高的負載找出系統隨壓力增加而可能遇到的擴充性瓶頸;5、規劃未來的業務增長,硬體、網路容量、相關資源;6、測試應用適應可變環境的能力;7、測試不同的硬體、軟體和作業系統配置,證明裝置是否配置正確;
對資料庫的基準測試的作用,就是分析在當前的配置下(包括硬體設定、OS、資料庫設定等),資料庫的效能表現,從而找出MySQL的效能閾值,並根據實際系統的要求調整配置。【源】
與真實壓力不同:真實的複雜多變;基準測試要求儘可能快執行完成,簡單直接、結果易比較、成本低易行
2.2策略
針對系統整體:整合式full-stack
單獨測試MySQL:單組件式single-component
推薦整體測試:要正確設定
1、使用者關注的是整體的效能;2、MySQL並非總是瓶頸;3、更能揭示應用的真實表現
推薦單獨測試:需要資料
1、需比較不同schema或查詢的效能;2、針對某個具體問題的測試;3、避免漫長,做短期、快速周期迴圈
2.2.1指標
目標:細化為一系列問題,具體問題具體分析
輸送量:
單位時間內交易處理數,TPC-C、多使用者互動式應用,每秒事務數,每分鐘事務數
回應時間或延遲
測試工作所需的整體時間,平均響時、最小響時、最大和所佔百分比;藉助圖表
並發性:
測試應用在不同並發下的效能,關注正在工作中的並行作業、同時工作中的線程數 串連數;
web伺服器並發性!=資料庫的,僅表會話儲存機制資料處理能力;測web並發 任意時間有多少並發;
可擴充性
可擴充性:給系統增加一倍工作,理性情況下能獲得兩部的結果;給系統增一倍資源可或2倍輸送量
系統業務壓力可能發生變化:測可擴充性非常必要;該指標對容量規範有用:提供資訊來發現應用瓶頸
儘可能收集測試需求,基於需求設計測試,忌只關注部分指標,而忽略其他指標
2.3方法
要儘可能接近真實應用的情況:
使用全集、資料分布特點、真實分布參數、是否多使用者、匹配使用者行為、多類型、檢查錯誤記錄檔、系統預熱:重啟後多長時間才達到正常效能容量、持續一定時間;
2.3.1設計、規範
提出問題、目標明確
標準的基準測試:合適的方案 TPC-H OLTP
專用的測試:複雜、迭代,獲易還原的生產資料集快照
計劃: 參數、結果文檔化、測試詳細記錄
2.3.2時間
基準測試應運行足夠長的時間,無法確認時間可一直運行,持續觀察知道確認系統已穩定
一個簡單的測試規則:等系統看起來穩定的時間至少=系統預熱的時間
2.3.3擷取系統效能和狀態
盡量多地收集被測系統的資訊
best建目錄、每執行一輪測試建立單獨子目錄,將結果、設定檔、測試單位、指令碼和其他相關說明儲存其中
需要記錄是資料:
系統狀態、效能指標:CPU使用率 、磁碟I/O、網路流量統計、SHOWGLOBAL STATUS計數器
合理的間隔,記錄開始時間、利用時間戳記、只是收集就好
2.3.4擷取準確的結果
回答些問題:
是否選擇了正確的基準測試?是否為問題收集了資料?預熱時間是否足夠長?
是否採用了錯誤的測試標準:IO密集型引用採用CPU密集型測試標準來評估效能?
測試結果是否可重複?重測前確保系統狀態一致;對症測
影響因素:
外部壓力、效能分析、監控系統、詳細日誌、周期性作業
注意:
過程中所需資源是專來測試的;測試中盡量少修改參數、通過迭代逐步修改基準測試的參數;認真研究過程中的異常情況並找到原因
2.3.5運行測試分析結果
自動化:減少人為失誤,Makefile檔案、指令碼
測試結果滿足目前需求,簡單運行幾輪測試,看看結果就OK了,如結果變化很大,可多運行幾次、或更長時間
結果:
分析,將數字變成知識,最終的目的是回答在設計時的問題
如何抽象有意義的結果,依賴於如何收集資料,寫指令碼分析資料、減少人為失誤、工作量、可重複、文檔化
2.3.6繪圖重要性
一張圖勝過千言萬語嘛,本來有些知識點寶寶是想畫導圖的,但是麼有畫
書中有這麼一個語句,分享一下:SHOW FULL PROCESSLIST SHOW PROCESSLIST顯示哪些線程正在運行,您也可以使用mysqladmin processlist語句得到此資訊,如果您有SUPER許可權,您可以看到所有線程,否則,您只能看到您自己的線程,不使用FULL關鍵詞,則只顯示每個查詢的前100個字元【源】
2.4基準測試載入器
整合測試載入器:整個應用
1、ab是Apache HTTP,每秒最多可處理多少請求【參考】【2】
2、http_load:ab類似更靈活,被設計為對web伺服器測試,通過一個輸入檔案提供多個URL,隨機播放進行測試,也可定製,使其按照時間比率進行測試【參考】
3、JMeter,java程式,可載入其他應用並測試其效能,這個聽不錯的,上面兩個沒有接觸過,不評論
單組件式:測MySQL,基於MySQL的系統效能
1、mysqlslap:mysql5.1後內建,類比伺服器的負載,輸出計時資訊,可執行並發串連數、指定sql語句,否則自動產生select語句【參考】
2、MySQL Benchmark Suite(sql-bench):內建、5.7拿掉,基準測試套件,用於不同資料庫伺服器上進行比較測試,單線程串列執行,測執行查詢的速度;包含了大量預定義測試,易使用,輕鬆比較不同引擎或配置的效能測試,CPU密集型的,結果會顯示哪些類型的操作在伺服器上執行更快,缺點:測試資料集小且無法用指定的資料,需要perl BDB支援;【參考】
3、Super Smack:MySQL、PostgreSQL,提供壓力測試和負載平衡,複雜而強大的工具,可類比多使用者訪問,載入測試資料到庫、隨機資料填充測試表【參考】
4、Database Test Suite:類似某些工業標準測試的工具集,免費TPC-C OLTP測試載入器
5、sysbench:多線程系統壓測,據影響資料庫伺服器效能的因素評估系統的效能,全能測試載入器,支援MySQL、作業系統、硬體的硬體測試【參考】【2】
MySQL的BENCHMARK()函數:測試特定操作的執行速度,參數可以是需要執行的次數或運算式(任何標量運算式)
2.5案例
此處省略n字
2.6總結
終於等到你~音樂起;建議至少要熟悉sysbench,如何使用oltp(比較不同系統效能) 和fileio 測試;經常執行基準測試,制定一些原則很必要,選擇合適的測試載入器、建立指令碼庫,收集資訊分析結果,熟練一種繪圖工具;
大佬都這麼說了,所以你知道我的下一篇是什麼了嗎?
相關文章:
【MySQL資料庫】第一章解讀:MySQL架構與曆史
【MySQL資料庫】第三章解讀:伺服器效能剖析 (下)