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