【壓力測試】使用mysqlslap進行mysql基準測試

1、應用場景

一、對新的或調整後的數據庫服務器進行測試,驗證或比較配置結果;
二、創建Mysql服務器的性能基準線,即獲得健康環境下的指標,協助後續實際使用中的監控、優化;
三、模擬多用戶併發訪問MySQL來進行壓力測試,找出系統的擴張瓶頸,增長數據庫的併發,觀察QPS、TPS變化,肯定併發量與性能最優的關係;
四、對比多個存儲引擎(MyISAM,InnoDB等)在相同環境下的相同併發壓力下的性能差異。mysql

2、測試計劃

一、肯定測試工具,根據測試目標和業務制定測試計劃、測試場景、測試命令;
二、使用生產環境的數據庫備份,根據測試用例進行測試;
三、分析測試結果。redis

3、簡介mysqlslap

mysqlslap是版本高於5.1的mysql自帶的工具。sql

【參數說明】
-a
//若命令中沒經過語句或文件提供SQL表和數據,則將自動建立SQL表和數據數據庫

--auto-generate-sql-add-autoincrement
//給自動建立的表添加一個auto_increment列segmentfault

--auto-generate-sql-execute-number=N
//對每一個模擬用戶的自動生成N次查詢緩存

--auto-generate-sql-guid-primary
//給自動建立的表添加基於GUID的主鍵性能優化

--auto-generate-sql-load-type=name
//指定測試語句類型:mixed(查詢與插入對半),update(更新主鍵),write(插入),key(讀主鍵)或read(查詢),默認爲mixed服務器

--auto-generate-sql-secondary-indexes=N
//給自動建立的表增長N個二級索引,默認爲0網絡

--auto-generate-sql-unique-query-number=N
//指定自動建立的表中不一樣查詢的數量併發

--auto-generate-sql-unique-write-number=N
//指定自動建立的表中不一樣插入的數量

--auto-generate-sql-write-number=N
//自動建立的表中,對每一個線程插入N行數據(默認N爲100)

--commit=N
//每N條DML提交一次(即一次事務)

-C,--compress
//若server和client的協議都支持壓縮,則壓縮信息後傳送

-c N,--concurrency-name
/模擬N個用戶併發執行查詢

--create="字符串或.sql文件路徑"
//指定用來建立表的字符串或 .sql文件

--create-schema="數據庫名"
指定測試用的數據庫(mysql中的database就是schema)

-#,--debug
--debug-check
-T,--debug-info //輸出CPU以及內存的相關信息
【遇到 [Error]mysqlslap:option ‘...’ used,but is disabled,暫時沒法解決】

-F,--delimiter=name
此參數指定的值做爲sql語句中使用的分隔符

--detach=N
每執行完N條請求,就斷開重連一次

-e,--engine=name
指定測試表使用的存儲引擎

-h,--host=name
鏈接指定host

-i,--iterations=N
指定測試迭代次數

-x,--number-char-cols=N
指定自動建立的表中含N個char類型的字段,默認值爲1

-y,--number-int-cols=N
指定自動建立的表中含N個int類型的字段,默認值爲1

--number-of-queries=N
生成N次總查詢(平均每一個用戶查詢次數=總查詢次數/併發數)

--only-print
不實際執行,打印模擬執行的過程

-u,--user=name
鏈接server用的用戶名

-p,--password[=name]
鏈接server用的密碼,參數與值之間沒有空格,如-p123

-P,--port=端口號
指定鏈接server的端口

--post(/pre)-query=name
指定測試完成後(/前)執行的含sql語句的字符串或.sql文件

--post(/pre)-system=name
指定測試完成後(/前)執行的系統語句

--protocol=name
指定用來鏈接的協議:tcp,socket,pipe,memory

-q "查詢語句或包含查詢語句的sql文件",--query="查詢語句或包含查詢語句的sql文件"
自定義要運行的查詢語句

–defaults-file="配置文件路徑"
指定.cnf配置文件

【注意】
不用-a自動生成數據表或自定義指定,就會報1049 error;
命令行中,參數--number-of-queries=N(N爲總查詢次數)和--auto-generate-sql-execute-number=N(N爲每一個併發的查詢次數)只能存在1個。

4、測試執行:一些栗子

1)自動生成複雜表;並分別模擬50和100個用戶,對每一個用戶自動生成5次查詢,迭代測試10次:

mysqlslap -uroot -proot -a --auto-generate-sql-add-increment --auto-generate-sql-load-type=mixed --number-int-cols=5 --number-char-cols=20  -e innodb  -c 50,100 --auto-generate-sql-execute-number=5  i 10

2)指定數據庫‘test’,自定義sql語句,模擬50個併發用戶進行測試:

mysqlslap -uroot -proot -c 50  --create-schema=test -q "select * from table1;"

3)

//將建立表和數據的sql語句寫入一個.sql文件,以後在測試中使用
echo "多個sql語句(建立多個表,插入數據)" > 文件路徑(如 路徑/schema.sql)  

//將查詢語句寫入一個.sql文件,以後以在測試中使用
echo "多個sql查詢語句(如 select * from table1;select * from table2;...)" > 文件路徑(如c:/users/administrator/desktop/select_query.sql)    

//從指定的.sql文件中加載sql語句進行測試
mysqlslap -uroot -proot -c 50 --number-of-queries=100 --create="路徑/schema.sql" -q "c:/users/administrator/desktop/select_query.sql" --delimiter=";"

ps:
進行mysql基準測試前,可考慮其餘方面的優化,如利用redis集羣來前置緩存,經過讀寫分離、分庫分表來減輕數據庫壓力等。
性能優化的一些資料:
mysql性能優化
mysql性能優化小結

本文亦有參考網絡資料,感謝!
相關文章
相關標籤/搜索