《MySQL 性能測(cè)試經(jīng)驗(yàn)》要點(diǎn):
本文介紹了MySQL 性能測(cè)試經(jīng)驗(yàn),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
一、背景
近期在進(jìn)行資源調(diào)度管理平臺(tái)的重構(gòu)工作,其中的Resource/Property數(shù)據(jù)庫(kù)設(shè)計(jì),在沒(méi)有更加優(yōu)化的方案前,打算沿用當(dāng)前平臺(tái)的數(shù)據(jù)庫(kù)結(jié)構(gòu);這就需要對(duì)當(dāng)前平臺(tái)的數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行剖析研究,并對(duì)其性能進(jìn)行測(cè)試與分析,得出的數(shù)據(jù)結(jié)果作為后續(xù)設(shè)計(jì)和優(yōu)化的參考.
二、測(cè)試方法
1、測(cè)試工具:mysqlslap,mysqlslap是MySQL5.1.4之后自帶的benchmark基準(zhǔn)測(cè)試工具,該工具可以模擬多個(gè)客戶(hù)端同時(shí)并發(fā)的向服務(wù)器發(fā)出查詢(xún)更新,給出了性能測(cè)試數(shù)據(jù)而且提供了多種引擎的性能比較.官方介紹:http://dev.mysql.com/doc/refman/5.6/en/mysqlslap.html,
使用方法:http://my.oschina.net/moooofly/blog/152547
2、測(cè)試流程:建立測(cè)試數(shù)據(jù)庫(kù)database和待測(cè)試的表tables → 根據(jù)table的結(jié)構(gòu),利用腳本生成一定數(shù)量的有效隨機(jī)數(shù)據(jù) → 利用mysqlslap對(duì)相應(yīng)query語(yǔ)句進(jìn)行測(cè)試 → 結(jié)果數(shù)據(jù)的分析.
3、關(guān)鍵語(yǔ)句:考慮到資源平臺(tái)的實(shí)際應(yīng)用情況,通過(guò)資源屬性查詢(xún)資源的操作為主要操作,且這類(lèi)操作的耗時(shí)占總操作耗時(shí)的比例為最大,故對(duì)應(yīng)這類(lèi)操作的查詢(xún)語(yǔ)句為關(guān)鍵語(yǔ)句,對(duì)整個(gè)數(shù)據(jù)庫(kù)性能影響很大,我們可以通過(guò)測(cè)試這個(gè)關(guān)鍵語(yǔ)句得出的結(jié)果來(lái)評(píng)估整個(gè)數(shù)據(jù)庫(kù)的性能.
三、測(cè)試過(guò)程
1、建表:
通過(guò)屬性查詢(xún)資源需要兩張表:設(shè)備表device和設(shè)備屬性對(duì)應(yīng)表deviceattr.device表對(duì)應(yīng)資源,記錄資源的基本信息,如name,type,group,creator等等;deviceattr表對(duì)應(yīng)資源和屬性的關(guān)系,記錄每個(gè)資源的每個(gè)屬性和屬性值;它們的結(jié)構(gòu)如下所示:
通過(guò)多個(gè)屬性組合查詢(xún)deviceattr表,獲得相應(yīng)的id ,id即是滿(mǎn)足條件的設(shè)備id,進(jìn)而能直接在device表中查詢(xún)得到其基本屬性.
本次測(cè)試的關(guān)鍵語(yǔ)句即是從deviceattr表中組合查詢(xún)出滿(mǎn)足條件的id,故本測(cè)試只需要用到deviceattr一張表.
2、生成隨機(jī)數(shù)據(jù)并插入相應(yīng)的表中:
這里編寫(xiě)了幾個(gè)生成隨機(jī)數(shù)據(jù)的sql函數(shù)rand_name(),rand_value(),rand_num(),rand_creator(),并編寫(xiě)了存儲(chǔ)過(guò)程insert_devattr,用來(lái)將一定量數(shù)據(jù)批量插入deviceattr表中.
然后將整個(gè)建表和存儲(chǔ)數(shù)據(jù)的過(guò)程寫(xiě)進(jìn)一個(gè)sql腳本中,并在mysql中運(yùn)行這個(gè)腳本,待測(cè)試的表和數(shù)據(jù)就建立好了.(sql腳本在附錄)如下圖所示,生成的deviceattr隨機(jī)數(shù)據(jù)有4020條:
3、利用mysqlslap進(jìn)行測(cè)試:
整個(gè)數(shù)據(jù)庫(kù)的關(guān)鍵操作為通過(guò)屬性查詢(xún)資源,該操作的關(guān)鍵sql語(yǔ)句就是:
select id from deviceattr where [ n attr ] group by id;
例:查詢(xún)擁有attr10或者attr20屬性的所有資源的id為:
select id from deviceattr where name = ‘a(chǎn)ttr10’ or name = ‘a(chǎn)ttr20’ group by id;
在建立好待測(cè)數(shù)據(jù)庫(kù)后,就可以利用mysqlslap進(jìn)行測(cè)試,mysqlslap命令如下所示:
shell < mysqlslap --create-schema='test1' --query="select id from deviceattr where name='attr10' or name='attr20' group by id;" -c 50 -i 100
以上語(yǔ)句表示:使用test1數(shù)據(jù)庫(kù),使用query所指定的語(yǔ)句,測(cè)試50個(gè)并發(fā)查詢(xún),每一個(gè)查詢(xún)100次.
該語(yǔ)句的測(cè)試結(jié)果如下圖所示:
結(jié)果中可以看到執(zhí)行語(yǔ)句的平均耗時(shí),最大耗時(shí)和最小耗時(shí),并發(fā)線(xiàn)程數(shù)等等.
四、結(jié)果分析
在不同數(shù)據(jù)容量,不同并發(fā)數(shù),不同查詢(xún)屬性數(shù)的條件下進(jìn)行多次測(cè)試并取平均值,所得到的數(shù)據(jù)分以下幾種情況進(jìn)行分析:
1、在deviceattr表數(shù)據(jù)容量為4000條,并發(fā)數(shù)分別為1、5、10、20、40、80,查詢(xún)屬性數(shù)分別為2、3、4、5、6的情況下,查詢(xún)語(yǔ)句的耗時(shí):
從上表可以看出,在查詢(xún)屬性數(shù)相同條件下,并發(fā)數(shù)增長(zhǎng)一倍,耗時(shí)也基本增加一倍;在40并發(fā)數(shù)以下時(shí),查詢(xún)耗時(shí)不超過(guò)100毫秒;在10并發(fā)左右的實(shí)際應(yīng)用情況下,耗時(shí)在40毫秒左右;性能基本滿(mǎn)足新資源平臺(tái)的要求.
2、在10并發(fā),deviceattr表容量分別為3000、4000、8000條,查詢(xún)屬性數(shù)從2至6的情況下,查詢(xún)語(yǔ)句的耗時(shí):
從上表可以看出,在并發(fā)數(shù)一定的情況下,隨著語(yǔ)句中查詢(xún)屬性數(shù)的增多,耗時(shí)線(xiàn)性增加,這種線(xiàn)性關(guān)系數(shù)據(jù)容量無(wú)關(guān).
3、在10并發(fā),查詢(xún)屬性數(shù)為5,不同數(shù)據(jù)容量的情況下,查詢(xún)語(yǔ)句的耗時(shí):
從上表可以看出,在其他條件一定的情況下,隨著數(shù)據(jù)容量的增長(zhǎng),耗時(shí)呈線(xiàn)性增長(zhǎng),在貼近實(shí)際條件的情況下(4000左右數(shù)據(jù)容量,10左右并發(fā)數(shù),5左右查詢(xún)屬性),耗時(shí)為25毫秒,滿(mǎn)足新資源管理平臺(tái)的需求.
附錄:
生成測(cè)試數(shù)據(jù)的sql腳本:
use test1
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MySQL 性能測(cè)試經(jīng)驗(yàn)》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7668.html