MySQL作為關(guān)系型數(shù)據(jù)庫,一般在項目開發(fā)當(dāng)中是作為程序的首選,但網(wǎng)站的性能的瓶頸總是出現(xiàn)在數(shù)據(jù)庫身上,一般項目開發(fā)后都會根據(jù)對應(yīng)業(yè)務(wù)來進(jìn)行數(shù)據(jù)庫的壓測。檢查數(shù)據(jù)庫能夠承受線上環(huán)境的用戶的訪問請求。
一般都會采用mysqlslap壓測工具,模擬出大量客戶端同時操作數(shù)據(jù)庫的情況,通過結(jié)果信息來了解數(shù)據(jù)庫的性能狀況。然后進(jìn)行數(shù)據(jù)庫的優(yōu)化。
壓力測試工具
mysqlslap是Mysql自帶的壓力測試工具,主要工就是對數(shù)據(jù)庫服務(wù)器做基準(zhǔn)測試。
注:基準(zhǔn)測試的具體做法是:在系統(tǒng)上運(yùn)行一系列測試程序并把性能計數(shù)器的結(jié)果保存起來。這些結(jié)構(gòu)稱為“性能指標(biāo)”。性能指標(biāo)通常都保存或歸檔,并在系統(tǒng)環(huán)境的描述中進(jìn)行注解。對于業(yè)務(wù)開發(fā)人員也能夠知道服務(wù)器的性能指標(biāo)在哪個區(qū)間。
以后在實際運(yùn)行過程中,當(dāng)監(jiān)控的數(shù)據(jù)接近了基準(zhǔn)指標(biāo)時,說明數(shù)據(jù)庫服務(wù)器快要滿負(fù)荷了,需要分析是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計、SQL語句這類用法問題,還是硬件資源的確不夠了,然后進(jìn)對應(yīng)進(jìn)行的處理
數(shù)據(jù)庫服務(wù)器也可能需要硬件升級,升級之后也需要進(jìn)行基準(zhǔn)測試,和之前的測試結(jié)果對比,確保升級后的性能是提升的,防止不恰當(dāng)?shù)纳壔蛘咤e誤的配置引起性能下降。
mysqlslap用法介紹
對數(shù)據(jù)庫做一個簡單的自動測試,基于原生內(nèi)容來做
mysqlslap--user=root--password=test--auto-generate-sql
--auto-generate-sql作用是自動生成測試SQL
結(jié)果中各項含義:
Averagenumberof...
運(yùn)行所有語句的平均秒數(shù)
Minimumnumberof...
運(yùn)行所有語句的最小秒數(shù)
Maximumnumberof...
運(yùn)行所有語句的最大秒數(shù)
Numberofclients...
客戶端數(shù)量
Averagenumberofqueriesperclient
每個客戶端運(yùn)行查詢的平均數(shù)
并發(fā)是大型項目都會遇到并且頭疼的問題,所以測試可以加入并發(fā)的參數(shù)。
mysqlslap--user=root--password=test--concurrency=100--number-of-queries=1000--auto-generate-sql
--concurrency=100指定同時有100個客戶端連接
--number-of-queries=1000指定總的測試查詢次數(shù)(并發(fā)客戶端數(shù)*每個客戶端的查詢次數(shù))
自動測試可以幫助我們了解硬件層面的狀況,對于產(chǎn)品特定的情況,還是需要使用自己的庫來測試比較好,可以復(fù)制一份產(chǎn)品庫過來,然后對此庫測試,例如
mysqlslap--user=root--password=test--concurrency=70--create-schema=test--query="SELECT*FROMdept_emp;"
--create-schema用來指定測試庫名稱
--query是自定義的測試語句
實際場景中,一般是測試多個復(fù)雜的語句,可以定義一個腳本文件,例如
echo"SELECT*FROMemployees;SELECT*FROMtitles;SELECT*FROMimage;SELECT*FROMdept_manager;SELECT*FROMtheme;">~/select_query.sql
把多個查詢語句寫入了一個sql文件,然后使用此文件執(zhí)行測試
mysqlslap--user=root--password=111111--concurrency=20--number-of-queries=1000--create-schema=employees--query="select_query.sql"--delimiter=";"
--query中指定了sql文件
--delimiter說明sql文件中語句間的分隔符是什么
如果有感悟,額