sysbench 安裝
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
腳本介紹
sysbench壓測工具的使用 1. bulk_insert.lua 批量寫入操作
2. oltp_delete.lua 寫入和删除并行操作
3. oltp_insert.lua 純寫入操作
4. oltp_point_select.lua 隻讀操作,條件為唯一索引列
5. oltp_read_only.lua 隻讀操作,包含聚合,去重等操作
6. oltp_read_write.lua 讀寫混合操作,最常用的腳本
7. oltp_update_index.lua 更新操作,通過主鍵進行更新
8. oltp_update_non_index.lua 更新操作,不通過索引列
9. oltp_write_only.lua 純寫操作,常用腳本,包括insert update delete
10. select_random_points.lua 随機集合隻讀操作,常用腳本,聚集索引列的selete in操作
11. select_random_ranges.lua 随機範圍隻讀操作,常用腳本,聚集索引列的selete between操作
常用參數
Sysbench中常用的參數如下:
Sysbench中常用的參數如下:
--mysql-table-engine=innodb 表示選擇測試表的存儲引擎
--oltp_tables_count=10 表示會生成 10 個測試表
--oltp-table-size=100000 表示每個測試表填充資料量為 100000
--rand-init=on 表示每個測試表都是用随機資料來填充的
如果在本機,也可以使用 –mysql-socket 指定 socket 檔案來連接配接。加載測試資料時長視資料量而定,若過程比較久需要稍加耐心等待。
--oltp-read-only=off 表示不要進行隻讀測試,也就是會采用讀寫混合模式測試
--report-interval=10 表示每10秒輸出一次測試進度報告
--rand-type=uniform 表示随機類型為固定模式,其他幾個可選随機模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--max-time=120 表示最大執行時長為 120秒
--max-requests=0 表示總請求數為 0,因為上面已經定義了總執行時長,是以總請求數可以設定為 0;也可以隻設定總請求數,不設定最大執行時長
--percentile=99 表示設定采樣比例,預設是 95%,即丢棄1%的長請求,在剩餘的99%裡取最大值
--num-threads=12: 并發線程數,可以了解為模拟的用戶端并發連接配接數
--mysql-db=sbtest:測試使用的目标資料庫,這個庫名要事先建立
--oltp-tables-count=10:産生表的數量
--oltp-table-size=500000:每個表産生的記錄行數
--oltp-dist-type=uniform:指定随機取樣類型,可選值有 uniform(均勻分布), Gaussian(高斯分布), special(空間分布)。預設是special
--oltp-read-only=off:表示不止産生隻讀SQL,也就是使用oltp.lua時會采用讀寫混合模式。預設 off,如果設定為on,則不會産生update,delete,insert的sql。
--oltp-test-mode=nontrx:執行模式,這裡是非事務式的。可選值有simple,complex,nontrx。預設是complex
simple:簡單查詢,SELECT c FROM sbtest WHERE id=N
complex (advanced transactional):事務模式在開始和結束事務之前加上begin和commit, 一個事務裡可以有多個語句,如點查詢、範圍查詢、排序查詢、更新、删除、插入等,并且為了不破壞測試表的資料,該模式下一條記錄删除後會
在同一個事務裡添加一條相同的記錄。
nontrx (non-transactional):與simple相似,但是可以進行update/insert等操作,是以如果做連續的對比壓測,你可能需要重新cleanup,prepare。
--oltp-skip-trx=[on|off]:省略begin/commit語句。預設是off
--oltp_secondary=on:将ID設定為非主鍵防止主鍵沖突。
--oltp_range_size=5: 連續取值5個,必定走到5個分片。
--mysql_table_options='dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2':PolarDB-X 1.0支援拆分表,在建表的時候需要指定拆分方式。
壓測準備資料
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=10.0.16.10 --mysql-port=3307 --mysql-user=cjr --mysql-password=cjr
--mysql-db=sysbench --db-driver=mysql --tables=100 --table-size=100000 --time=1800 --max-requests=1000000 prepare
壓測
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=10.0.16.10 --mysql-port=3307 --mysql-user=cjr --mysql-password=cjr --mysql-db=sysbench --db-driver=mysql --tables=100 --table-size=100000 --report-interval=1 --threads=2 --rand-type=uniform --time=1800 --max-requests=1000000
SQL statistics:
queries performed:
read: 1791048 讀總數
write: 0 寫總數
other: 255864 其他操作總數
total: 2046912 總操作數
transactions: 127932 (71.06 per sec.) 事務總數
queries: 2046912 (1137.00 per sec.)讀寫總數
ignored errors: 0 (0.00 per sec.) 忽略錯誤次數
reconnects: 0 (0.00 per sec.) 重連次數
General statistics:
total time: 1800.2764s 總耗時
total number of events: 127932 共發生多少事務
Latency (ms):
min: 2.78 最小響應時間
avg: 28.14 平均響應時間
max: 469.89 最大響應時間
95th percentile: 66.84 95%響應時間小于
sum: 3599701.37 總響應時間
Threads fairness:
events (avg/stddev): 63966.0000/4.00
execution time (avg/stddev): 1799.8507/0.18