天天看點

sysbench壓測工具的使用

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