mysqlslap介紹和使用
mysqlslap是一個MySQL自帶的負載仿真工具,它可以在模擬多個客戶端對MySQL服務器進行併發執行SQL語句,還可以指定存儲引擎。
1. 調用方式
$./mysqlslap [options]
2. 執行步驟
mysqlslap分三個階段運行
- 創建數據庫,表以及可選的任何存儲程序或數據以用於測試。此階段使用單個客戶端連接。
- 運行負載測試。此階段可以使用許多客戶端連接。
- 清理(斷開連接,刪除表–如果指定的話)。此階段使用單個客戶端連接。
3. 測試方式
mysqlslap有三種測試方式
3.1 指定SQL語句
--create
:指定表創建語句和插入語句。
--query
:指定查詢時執行的語句,不一定要是Select語句,可以是任意SQL語句。
--delimiter
:指定分隔符爲";"
--concurrency
: 併發時模擬客戶端的數量。可以指定多個值逗號隔開。
--iterations
: 測試執行的次數。
使用create和query指定SQL語句,5個客戶端併發查詢,執行10次。
$./mysqlslap --delimiter=";"
--create="CREATE TABLE `t1` (intcol1 INT(32) ,intcol2 INT(32) );"
--query="SELECT * FROM t1" --concurrency=5 --iterations=10
3.2 自動生成SQL
--auto-generate-sql
:指定自動生成查詢語句,還有其他–auto開頭參數可以具體配置查詢內容。
--number-int-cols
:指定創建表有幾個INT列
--number-char-cols
: 指定創建表有幾個VARCHAR列
自動生成SQL語句測試,使用的表有2個INT列,2個VARCHAR,5個客戶端併發查詢,執行10次。
$./mysqlslap --concurrency=5 --iterations=10
--number-int-cols=2 --number-char-cols=2
--auto-generate-sql
3.3 指定SQL文件
--create
和--query
還可以指定文件,語句以分隔符分開,注意文件中不能包含註釋。
--create
:指定文件,文件中包含多個以分隔符分隔的語句,表創建語句和插入語句。
--query
:指定文件,文件將包含多個以分隔的查詢語句,不一定要是Select語句,可以是任意SQL語句。
--delimiter
:指定分隔符。
$./mysqlslap --concurrency=5 --iterations=10 --delimiter=";"
--query=query.sql --create=create.sql
4. 選項
mysqlslap 支持以下選項
選項名 | 描述 |
---|---|
--auto-generate-sql |
文件中未提供或未使用命令選項時自動生成SQL語句 |
--auto-generate-sql-add-autoincrement |
將AUTO_INCREMENT列添加到自動生成的表中 |
--auto-generate-sql-execute-number |
指定自動生成多少個查詢 |
--auto-generate-sql-guid-primary |
將基於GUID的主鍵添加到自動生成的表中 |
--auto-generate-sql-load-type |
指定測試負載類型,代表要測試的是讀還是寫還是兩者混合的(read,write,update,mixed) |
--auto-generate-sql-secondary-indexes |
指定要添加到自動生成的表中的二級索引的數量 |
--auto-generate-sql-unique-query-number |
爲自動測試生成多少個不同的查詢 |
--auto-generate-sql-unique-write-number |
爲–auto-generate-sql-write-number生成多少個不同的查詢 |
--auto-generate-sql-write-number |
每個線程要執行多少行插入 |
--commit |
提交前要執行多少條語句 |
--compress |
壓縮客戶端和服務器之間發送的所有信息 |
--concurrency |
併發時要模擬的客戶端數量 |
--create |
包含用於創建表的語句的文件或字符串 |
--create-schema |
運行測試的schema |
--csv |
生成以逗號分隔的值格式的輸出 |
--debug Write |
編寫調試日誌 |
--debug-check |
程序退出時打印調試信息 |
--debug-info |
程序退出時打印調試信息,內存和CPU統計信息 |
--default-auth |
身份驗證插件使用 |
--defaults-extra-file |
除了通常的選項文件,還讀取命名的選項文件 |
--defaults-file |
只讀命名的選項文件 |
--defaults-group-suffix |
選項組後綴值 |
--delimiter |
在SQL語句中使用的定界符 |
--detach |
在每條N條語句後分離(關閉並重新打開)每個連接 |
--enable-cleartext-plugin |
啓用明文身份驗證插件 |
--engine |
用於創建表的存儲引擎 |
--help |
顯示幫助信息並退出 |
--host |
MySQL服務器所在的主機 |
--iterations |
運行測試的次數 |
--login-path |
從.mylogin.cnf中讀取登錄路徑選項 |
--no-defaults |
不讀取選項文件 |
--no-drop |
不要刪除測試運行期間創建的任何schema |
--number-char-cols |
如果指定了–auto-generate-sql,則要使用的VARCHAR列數 |
--number-int-cols |
如果指定了–auto-generate-sql,則要使用的INT列數 |
--number-of-queries |
將每個客戶端限制爲大約此查詢數量 |
--only-print |
不連接數據庫。只打印它會做的事情 |
--password |
連接服務器時使用的密碼 |
--pipe |
使用命名管道連接到服務器(僅Windows) |
--plugin-dir |
安裝插件的目錄 |
--port |
用於連接的TCP / IP端口號 |
--post-query |
包含要在測試完成後執行的語句的文件或字符串 |
--post-system |
測試完成後使用system()執行的字符串 |
--pre-query |
包含要在運行測試之前執行的語句的文件或字符串 |
--pre-system |
在運行測試之前使用system()執行的字符串 |
--print-defaults |
打印默認選項 |
--protoco l |
使用的連接協議 |
--query |
包含用於檢索數據的SELECT語句的文件或字符串 |
--secure-auth |
不要以舊(4.1之前)格式向服務器發送密碼 |
--shared-memory-base-name |
用於共享內存連接的共享內存的名稱 |
--silent |
靜音模式 |
--socket |
Unix套接字文件或Windows命名管道使用 |
--ssl |
啓用連接加密 |
--ssl-ca |
包含受信任的SSL證書頒發機構列表的文件 |
--ssl-capath |
包含受信任的SSL證書頒發機構證書文件的目錄 |
--ssl-cert |
包含X.509證書的文件 |
--ssl-cipher |
連接加密的允許密碼 |
--ssl-crl |
包含證書吊銷列表的文件 |
--ssl-crlpath |
包含證書吊銷列表文件的目錄 |
--ssl-key |
包含X.509密鑰的文件 |
--ssl-mode |
與服務器連接的所需安全狀態 |
--ssl-verify-server-cert |
根據服務器證書的公用名身份驗證主機名 |
--user |
連接服務器時要使用的MySQL用戶名 |
--verbose |
詳細模式 |
--version |
顯示版本信息並退出 |
5. 常用參數
--auto-generate-sql
:自動生成SQL語句。
--auto-generate-sql-execute-number
:指定自動生成多少個查詢。
--auto-generate-sql-load-type
:指定測試負載類型,read,write,update,mixed。
--number-char-cols
: 如果指定了–auto-generate-sql,則要使用的VARCHAR列數。
--number-int-cols
: 如果指定了–auto-generate-sql,則要使用的INT列數。
--concurrency
: 併發時要模擬的客戶端數量。
--iterations
: 運行測試的次數。
--create
: 包含用於創建表的語句的文件或字符串。
--query
: 包含用於檢索數據的SELECT語句的文件或字符串。
--delimiter
: 在SQL語句中使用的定界符。
--engine
: 用於創建表的存儲引擎,值可以通過“show engines;”命令查看。
--help
: 顯示幫助信息並退出。
--no-drop
: 不要刪除測試運行期間創建的任何schema。schema在MySQL對應的是數據庫。
--only-print
: 不連接數據庫。只打印它會做的事情。可用於查看測試執行的語句。
--post-query
: 包含要在測試完成後執行的語句的文件或字符串。SQL語句。
--post-system
: 測試完成後使用system()執行的字符串。系統命令。
--pre-query
: 包含要在運行測試之前執行的語句的文件或字符串。SQL語句。
--pre-system
: 在運行測試之前使用system()執行的字符串。系統命令。
6.查詢結果
Benchmark
Average number of seconds to run all queries: 149.766 seconds
Minimum number of seconds to run all queries: 149.766 seconds
Maximum number of seconds to run all queries: 149.766 seconds
Number of clients running queries: 5
Average number of queries per client: 100
Average number of seconds to run all queries: 所有查詢的平均時間。
Minimum number of seconds to run all queries: 所有查詢的最短時間。
Maximum number of seconds to run all queries: 所有查詢的最長時間。
Number of clients running queries: 併發模擬客戶端數量,對應–concurrency配置值。
Average number of queries per client: 平均每個客戶端執行語句數量。自動生成語句時,由--auto-generate-sql-execute-number
指定。或者是--number-of-queries
指定,平均執行數=--number-of-queries
/--concurrency
。