MySQLSlap是從MySQL的5.1.4版引入的壓力測試工具。該工具我們可以在Mysql的安裝目錄的bin目錄裏面找到,如C:\Program Files\MySQL\MySQL Server 5.7\bin>
。
名詞解釋
TPS
:Transactions Per Second
(每秒傳輸的事物處理個數),這是指服務器每秒處理的事務數,支持事務的存儲引擎如InnoDB等特有的一個性能指標。TPS = (COM_COMMIT + COM_ROLLBACK)/UPTIME
QPS
:Queries Per Second
(每秒查詢處理量)同時適用與InnoDB和MyISAM 引擎。QPS=QUESTIONS/UPTIME
- 等待時間:執行Sql等待返回結果之間的等待時間
主要功能
- 創建測試庫、測試表、測試表結構 ;
- 運行負載測試,可以使用多個併發客戶端連接;
- 測試環境清理(刪除創建的數據、表等,斷開連接);
主要參數
…參數 | 作用 |
---|---|
--create-schema=name |
指定測試的數據庫名,默認是mysqlslap。 |
--engine=engine_name ,-e engine_name |
代表要測試表的引擎,可以有多個用逗號分隔符隔開,如:--engines=myisam,innodb 。 |
--concurrency=N ,-c N |
模擬N個客戶端併發執行。可指定多個值,以逗號隔開,如:--concurrency=1,50,100,200 。 |
--number-of-queries=N |
總的測試查詢次數(併發客戶數×每客戶查詢次數),比如併發是10,總次數是100,那麼10個客戶端各執行10個 |
--iterations=N ,-i N |
迭代執行的次數,即重複的次數(相同的測試進行N次,求一個平均值),指的是整個步驟的重複次數,包括準備數據、測試load、清理。 |
--commit=N |
執行N條DML後提交一次。 |
--auto-generate-sql , -a |
自動生成測試表和數據,表示用mysqlslap工具自己生成的SQL腳本來測試併發壓力。 |
--auto-generate-sql-load-type=name |
測試語句的類型。代表要測試的環境是讀操作還是寫操作還是兩者混合的。 取值包括: read (scan tables), write (insert into tables), key (read primary keys), update (update primary keys), or mixed (half inserts, half scanning selects). 默認值是:mixed 。 |
--auto-generate-sql-add-auto-increment |
對生成的表自動添加auto_increment列。 |
--number-char-cols=name ,-x N |
自動生成的測試表中包含N個字符類型的列,默認1。 |
--number-int-cols=name ,-y N |
自動生成的測試表中包含N個數字類型的列,默認1。 |
--debug-info |
打印內存和CPU的信息。 |
--compress , -C |
如果服務器和客戶端支持都壓縮,則壓縮信息傳遞。 |
--only-print |
只打印測試語句而不實際執行。 |
命令示例
- 併發數100,循環10次,主動建表和生成數據,指定表引擎爲innodb,總的查詢次數爲100:
mysqlslap -uroot -proot --concurrency=100 --iterations 10 -a --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=100
-uroot -proot
:是數據庫用戶名和密碼
輸出結果:
PS C:\Program Files\MySQL\MySQL Server 5.7\bin> ./mysqlslap -uroot -proot --concurrency=100 --iterations 10 -a --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=100
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.175 seconds
Minimum number of seconds to run all queries: 0.031 seconds
Maximum number of seconds to run all queries: 1.078 seconds
Number of clients running queries: 100
Average number of queries per client: 1
Running for engine innodb
:運行的存儲引擎是innodb
。Average number of seconds to run all queries: 0.175 seconds
:運行所有查詢的平均秒數。Minimum number of seconds to run all queries: 0.031 seconds
:運行所有查詢的最小秒數。Maximum number of seconds to run all queries: 1.078 seconds
:運行所有查詢的最大秒數。Number of clients running queries: 100
:運行查詢的客戶端數(併發數)。Average number of queries per client: 1
:平均每個客戶的查詢數量。
- 分別執行1,50,100,200的併發,循環3次,表有5個字符串字段,5個int型字段,自動創建建數據,新增自動自動增長列,分別測試myisam,innodb兩個引擎,指定測試庫的名稱爲enjoytest1,輸出內存情況
mysqlslap -uroot -proot --concurrency=1,50,100,200 --iterations=3 --number-char-cols=5 --number-int-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --create-schema='enjoytest1' --debug-info
輸出結果:
PS C:\Program Files\MySQL\MySQL Server 5.7\bin> ./mysqlslap -uroot -proot --concurrency=1,50,100,200 --iterations=3 --number-char-cols=5 --number-int-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --create-schema='enjoytest1'
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.010 seconds
Minimum number of seconds to run all queries: 0.000 seconds
Maximum number of seconds to run all queries: 0.016 seconds
Number of clients running queries: 1
Average number of queries per client: 0
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.375 seconds
Minimum number of seconds to run all queries: 0.031 seconds
Maximum number of seconds to run all queries: 1.047 seconds
Number of clients running queries: 50
Average number of queries per client: 0
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.041 seconds
Minimum number of seconds to run all queries: 0.015 seconds
Maximum number of seconds to run all queries: 0.093 seconds
Number of clients running queries: 100
Average number of queries per client: 0
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.427 seconds
Minimum number of seconds to run all queries: 0.015 seconds
Maximum number of seconds to run all queries: 1.125 seconds
Number of clients running queries: 200
Average number of queries per client: 0
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.010 seconds
Minimum number of seconds to run all queries: 0.000 seconds
Maximum number of seconds to run all queries: 0.016 seconds
Number of clients running queries: 1
Average number of queries per client: 0
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.494 seconds
Minimum number of seconds to run all queries: 0.156 seconds
Maximum number of seconds to run all queries: 1.172 seconds
Number of clients running queries: 50
Average number of queries per client: 0
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.343 seconds
Minimum number of seconds to run all queries: 0.328 seconds
Maximum number of seconds to run all queries: 0.359 seconds
Number of clients running queries: 100
Average number of queries per client: 0
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 1.250 seconds
Minimum number of seconds to run all queries: 0.593 seconds
Maximum number of seconds to run all queries: 1.579 seconds
Number of clients running queries: 200
Average number of queries per client: 0