一住练、定義:
基準(zhǔn)測試是一種測量和評(píng)估軟件性能指標(biāo)的活動(dòng)绊诲,用于建立某個(gè)時(shí)刻的性能基準(zhǔn)限嫌,以便當(dāng)系統(tǒng)發(fā)生軟硬件變化時(shí)重新進(jìn)行基準(zhǔn)測試靴庆,以評(píng)估變化對性能的影響。
二怒医、比較
基準(zhǔn)測試:直接炉抒、簡單、易于比較稚叹,用于評(píng)估服務(wù)器的處理能力
可以不關(guān)心業(yè)務(wù)邏輯焰薄,所使用的查詢和業(yè)務(wù)的真實(shí)性和環(huán)境沒關(guān)系
壓力測試:對真實(shí)業(yè)務(wù)數(shù)據(jù)進(jìn)行測試,獲取系統(tǒng)所能承受的真實(shí)壓力
需要針對不同主題扒袖,所使用的的數(shù)據(jù)和查詢也是真實(shí)用到的
三塞茅、目的:
建立MySQL服務(wù)器的性能基準(zhǔn)線
確定當(dāng)前MySQL服務(wù)器運(yùn)行情況
模擬比當(dāng)前系統(tǒng)更高的負(fù)載,以找出系統(tǒng)的擴(kuò)展瓶頸
增加數(shù)據(jù)庫并發(fā)季率,觀察QPS野瘦,TPS變化,確定并發(fā)量與性能最優(yōu)化的關(guān)系
測試不同的硬件、軟件和操作系統(tǒng)配置
證明新的硬件設(shè)備是否配置正確
四鞭光、如何進(jìn)行基準(zhǔn)測試
1吏廉、對整個(gè)系統(tǒng)進(jìn)行基準(zhǔn)測試
優(yōu)點(diǎn):能夠測試整個(gè)系統(tǒng)的性能,包括web服務(wù)器緩存惰许、數(shù)據(jù)庫等
能反應(yīng)出系統(tǒng)中各個(gè)組件接口間的性能問題體現(xiàn)真實(shí)性能狀況
缺點(diǎn):測試設(shè)計(jì)復(fù)雜席覆,消耗時(shí)間長
2、單獨(dú)對MySQL進(jìn)行基準(zhǔn)測試
優(yōu)點(diǎn):測試設(shè)計(jì)簡單啡省,所需耗費(fèi)時(shí)間短
缺點(diǎn):無法全面了解整個(gè)系統(tǒng)的性能基線
五娜睛、MySQL基準(zhǔn)測試常見指標(biāo)
1、TPS:單位時(shí)間內(nèi)所處理的事務(wù)數(shù)
2卦睹、QPS:單位時(shí)間內(nèi)所處理的查詢數(shù)
3畦戒、響應(yīng)時(shí)間
平均響應(yīng)時(shí)間、最小響應(yīng)時(shí)間结序、最大響應(yīng)時(shí)間障斋、個(gè)時(shí)間所占百分比
4、并發(fā)量:同時(shí)處理的查詢請求的數(shù)量(不等于鏈接數(shù)量)
正在工作中的并發(fā)的操作或同時(shí)工作的數(shù)量
六徐鹤、基準(zhǔn)測試的步驟
1垃环、計(jì)劃和設(shè)計(jì)基準(zhǔn)測試(目標(biāo)、數(shù)據(jù)返敬、時(shí)間遂庄、次數(shù))
對整個(gè)系統(tǒng)還是某一組件
使用什么樣的數(shù)據(jù)
準(zhǔn)備基準(zhǔn)測試及數(shù)據(jù)收集腳本
CPU使用率、IO劲赠、網(wǎng)絡(luò)流量涛目、狀態(tài)與計(jì)數(shù)器信息等
2、運(yùn)行基準(zhǔn)測試
七凛澎、基準(zhǔn)測試中容易忽略的問題
1霹肝、使用生產(chǎn)環(huán)境數(shù)據(jù)時(shí)只是用了部分?jǐn)?shù)據(jù)(推薦使用真實(shí)數(shù)據(jù)庫完全備份來測試)
2、在多用戶的場景中塑煎,只做單用戶的測試(推薦使用多線程的并發(fā)測試)
3沫换、在單服務(wù)器上測試分布式應(yīng)用
4、反復(fù)執(zhí)行同一查詢(容易緩存命中最铁,無法反應(yīng)真實(shí)查詢性能)
八讯赏、MySQL基準(zhǔn)測試工具與軟件
1、mysqlslap(MySQL自帶)
特點(diǎn):可以模擬服務(wù)器負(fù)載冷尉,并輸出相關(guān)統(tǒng)計(jì)信息
可以指定也可以自動(dòng)生成查詢語句
常用參數(shù)說明
--auto-generate-sql //由系統(tǒng)自動(dòng)生成SQL腳本進(jìn)行測試
--auto-generate-sql-add-autoincrement //在生成的表中增加自增ID(innodb推薦)
--auto-generate-sql-load-type //指定測試中使用的查詢類型
--auto-generate-sql-write-number //指定初始化數(shù)據(jù)時(shí)生成的數(shù)據(jù)量
--concurrency //指定并發(fā)線程的數(shù)量
--engine //指定要測試表的存儲(chǔ)引擎待逞,可以用逗號(hào)分割多個(gè)存儲(chǔ)引擎
--no-drop //指定不清理測試數(shù)據(jù)
--iterations //指定測試運(yùn)行的次數(shù)(于--no-drop沖突,不能同時(shí)指定)
--number-of-queries //指定每個(gè)線程執(zhí)行的查詢數(shù)量
--debug-info //指定輸出額外的內(nèi)存及CPU統(tǒng)計(jì)信息
--number-int-cols //指定測試表中包含的INT類型列的數(shù)量
--number-char-cols //指定測試表中包含的varchar類型的數(shù)量
--create-schema //指定用于執(zhí)行測試的數(shù)據(jù)庫的名字
--query //用于指定自定義的SQL的腳本
--only-print //不運(yùn)行測試腳本网严,只把生成的腳本打印出來
2、sysbench
下載地址:https://github.com/akopytov/sysbench/archive/0.5.zip
安裝:
unzip sysbench-0.5.zip
cd sysbench
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysql/include/ \ --with-mysql- lib=/usr/local/mysql/lib/
make && make install
常用參數(shù):
--test //用于指定所要執(zhí)行的測試類型嗤无,支持一下參數(shù)
Fileio //文件系統(tǒng)I/O性能測試
cpu //cpu性能測試
memory //內(nèi)存性能測試
Oltp //測試要指定具體的lua腳本Lua腳本位于sysbench-0.5/sysbench/tests/db
--mysql-db //用于指定執(zhí)行基準(zhǔn)測試的數(shù)據(jù)庫名
--mysql-table-engine //用于指定所使用的存儲(chǔ)引擎
--oltp-tables-count //執(zhí)行測試的表的數(shù)量
--oltp-table-size //指定每個(gè)表中數(shù)據(jù)的行數(shù)
--num-threads //指定測試的并發(fā)線程數(shù)量
--max-time //指定最大的測試時(shí)間
--report-interval //指定間隔多長時(shí)間輸出一次統(tǒng)計(jì)信息
--mysql-user //指定執(zhí)行測試的mysql用戶
--mysql-password //指定執(zhí)行測試的mysql用戶密碼
prepare //用于準(zhǔn)備測試數(shù)據(jù)
run //用于實(shí)際進(jìn)行測試
cleanup //用于清理測試數(shù)據(jù)