sysbench 0.5 oltp測試筆記

sysbench 0.5相比0.4版本的主要變化是,oltp測試結合了lua腳本,不須要修改源碼,經過自定義lua腳本就能夠實現不一樣業務類型的測試。同時0.5相比0.4須要消耗更多的cpu資源。
一、查看幫助
sysbench --help
sysbench --test=fileio help

能夠查看 fileio、 cpu、 memory、 threads、 mutex的詳細參數,0.4版本還能夠查看oltp的參數

二、初始化測試表
建立單表,c和pad包含隨機字符,k列是1到oltp-table-size的隨機整數:
./sysbench  --test=tests/db/oltp.lua --oltp-table-size=1000000 --mysql-table-engine=innodb --mysql-user=sysbench  --mysql-password=sysbench --mysql-port=3306 --mysql-host=10.0.37.123 --mysql-db=test prepare

參數說明:
--oltp-table-size:指定表的大小,即表的行數
--mysql-table-engine:指定存儲引擎,如myisam,innodb,heap,ndbcluster,bdb,maria,falcon,pbxt
--mysql-db:指定在哪一個數據庫建立測試表,默認爲sbtest庫,須要提早建立好
--test:指定Lua腳本,參數選項大部分同老版本的--test=oltp help
--db-driver:指定驅動,默認爲Mysql
--myisam-max-rows:指定Myisam表的MAX_ROWS選項
--oltp-secondary:測試表將使用二級索引KEY xid (ID) 替代 PRIMARY KEY (ID),innodb引擎內部爲每一個表 建立惟一6字節的主鍵索引
--oltp-auto-inc:設置id列爲auto-incremental,值爲on或off,默認爲on

建立多個表,使用--oltp-tables-count指定,默認爲1:
./sysbench --test=tests/db/oltp.lua --oltp-tables-count=25 prepare

使用多線程建立多表,節省準備時間:
./sysbench  --test=tests/db/parallel_prepare.lua --oltp-tables-count=64  --num-threads=8 run

--oltp-tables-count的數量應該是--num-threads的倍數。

三、進行oltp測試
單表:
./sysbench --test=tests/db/oltp.lua --oltp-table-size=1000000 --mysql-table-engine=innodb --mysql-user=sysbench  --mysql-password=sysbench --mysql-port=3306 --mysql-host=10.0.37.123 --mysql-db=test  --max-requests=0 --max-time=600 --num-threads=512 --report-interval=10 run

若是使用--max-time(這裏設置600s),須要設置--max-request爲0,默認是10000(總請求數)
--num-threads:指定併發線程數,每一個線程將選擇一個隨機的表
--oltp-dist-type:指定隨機取樣類型,默認爲special,容許的值:uniform、gauss、special
--oltp-dist-pct:記錄讀取百分比
--oltp-dist-res:分配的機率
--oltp-read-only:執行僅僅SELECT測試,默認off

多表:
./sysbench --test=tests/db/oltp.lua --oltp-tables-count=25 --num-threads=5 run

建立表從sbtest1到sbtest25。

SELECT測試:
./sysbench --test=tests/db/select.lua --oltp-table-size=1000000 --mysql-table-engine=innodb --mysql-user=sysbench  --mysql-password=sysbench --mysql-port=3306 --mysql-host=10.0.37.123 --mysql-db=test  --max-requests=0 --max-time=600 --oltp-tables-count=20 --report-interval=10 run

另外有兩個獨立腳本能夠進行Point select查詢和Range查詢的腳本:select_random_points.lua、select_random_ranges.lua

可選參數:
--oltp-point-selects:在一個事務裏面Point select的數量,默認爲10
--oltp-range-size:range查詢的範圍大小,默認100,應該小於oltp-table-size
--oltp-simple-ranges:在一個事務裏面簡單range查詢的數量,默認1
--oltp-sum-ranges:在一個事務裏面SUM range查詢的數量,默認1
--oltp-order-ranges:在一個事務裏面ORDER range查詢的數量,默認1
--oltp-distinct-ranges:在一個事務裏面DISTINCT range查詢的數量,默認1

UPDATE測試:
同時有兩個獨立腳本能夠進行update測試:update_index.lua、update_non_index.lua
./sysbench --test=tests/db/update_index.lua --oltp-table-size=1000000 --mysql-table-engine=innodb --mysql-user=sysbench  --mysql-password=sysbench --mysql-port=3306 --mysql-host=10.0.37.123 --mysql-db=test  --max-requests=0 --max-time=600 --oltp-tables-count=20 --report-interval=10 --num_threads=512 run

可選參數:
--oltp-index-updates:在單個事務中index update的數量,默認1;
--oltp-non-index-updates:在單個事務中non-index update的數量,默認1;

四、清除表
./sysbench --test=tests/db/oltp.lua  --oltp-tables-count=25 --num-threads=5 cleanup

五、oltp測試結果
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 512 #測試線程數量,當前爲512
Report intermediate results every 10 second(s) #每10秒打印下信息
Random number generator seed is 0 and will be ignored


Threads started!

[  10s] threads: 512, tps: 2169.58, reads/s: 30860.50, writes/s: 8706.12, response time: 456.99ms (95%)
[  20s] threads: 512, tps: 2233.20, reads/s: 31197.05, writes/s: 8929.02, response time: 469.47ms (95%)
[  30s] threads: 512, tps: 2249.30, reads/s: 31496.60, writes/s: 8995.40, response time: 445.78ms (95%)
[  40s] threads: 512, tps: 2202.50, reads/s: 30844.00, writes/s: 8807.40, response time: 481.42ms (95%)
[  50s] threads: 512, tps: 2263.60, reads/s: 31680.90, writes/s: 9052.30, response time: 441.13ms (95%)
[  60s] threads: 512, tps: 2259.20, reads/s: 31616.80, writes/s: 9042.50, response time: 441.92ms (95%)
[  70s] threads: 512, tps: 2276.20, reads/s: 31923.20, writes/s: 9115.90, response time: 444.04ms (95%)
[  80s] threads: 512, tps: 2276.30, reads/s: 31850.90, writes/s: 9100.90, response time: 443.78ms (95%) #tps表示10s內的平均事務數,reads/s表示select語句在10s內平均的執行數量,writes/s表示update、insert、delete語句在10s內平均的執行數量,response time表示95%語句的平均響應時間
...
OLTP test statistics:
    queries performed:
        read:                            19057346 #總select語句數量
        write:                           5444956 #總update、insert、delete語句數量
        other:                           2722478#爲commit、unlock tables以及其餘mutex的數量
        total:                           27224780
    transactions:                        1361239 (2268.17 per sec.) #一般須要關注的數字(TPS)
    deadlocks:                           0      (0.00 per sec.) #整個測試過程當中發生死鎖次數
    read/write requests:                 24502302 (40827.01 per sec.)
    other operations:                    2722478 (4536.33 per sec.)

General statistics:
    total time:                          600.1494s #總執行時間,若是使用了 max-request參數,能夠關注下這個結果
    total number of events:              1361239
    total time taken by event execution: 307190.3628s
    response time:
         min:                                  7.13ms
         avg:                                225.67ms
         max:                               1471.84ms  #最大響應時間
         approx.  95 percentile:             440.34ms #95%的語句的平均響應時間

Threads fairness:
    events (avg/stddev):           2658.6699/50.08
    execution time (avg/stddev):   599.9812/0.29

 在源碼文件db_driver.c和sb_fileio.c中有對各參數值進行定義。

同時測試時使用orzdba工具統計的數據部分以下:
-------- -------------------------io-usage-----------------------                                                 -QPS- -TPS-
  time  |   r/s    w/s    rkB/s    wkB/s  queue await svctm %util|  ins   upd   del    sel   iud|
20:04:29|    0.0 2475.2     0.0  16002.0   0.1    0.1   0.0   8.7| 2166  4330  2165  30326  8661|
20:04:39|    0.0 2670.6     0.0  16738.0   0.1    0.1   0.0   9.1| 2156  4313  2156  30187  8626|
20:04:49|    0.0 2356.0     0.0  14956.9   0.1    0.1   0.0   9.2| 2172  4344  2171  30423  8688|
20:04:59|    0.0 2725.8     0.0  15563.3   0.1    0.1   0.0   9.4| 2168  4336  2169  30356  8675|
20:05:09|    0.0 2569.7     0.0  15425.1   0.1    0.1   0.0   8.7| 2165  4333  2165  30327  8663|
20:05:19|    0.0 2640.6     0.0  15377.1   0.2    0.1   0.0   9.7| 2170  4338  2170  30401  8679|
20:05:30|    0.0 2376.1     0.0  14424.9   0.1    0.1   0.0   8.2| 2180  4357  2179  30495  8717|
20:05:40|    0.0 2553.4     0.0  15090.8   0.1    0.1   0.0   8.8| 2164  4333  2166  30297  8664|
20:05:50|    0.0 2416.2     0.0  15587.6   0.1    0.1   0.0   8.5| 2174  4345  2173  30447  8693|
20:06:00|    0.0 2422.9     0.0  15534.9   0.1    0.1   0.0   8.0| 2172  4344  2172  30404  8690|
20:06:10|    0.1 2499.2     0.4  15285.3   0.1    0.1   0.0   9.1| 2167  4337  2167  30360  8672|
20:06:20|    0.0 2364.3     0.0  14850.4   0.2    0.1   0.0   9.4| 2167  4333  2168  30354  8669|
20:06:30|    0.0 2645.1     0.0  15898.7   0.1    0.1   0.0   9.1| 2166  4334  2167  30330  8668|
20:06:40|    0.0 2276.3     0.0  15125.8   0.1    0.1   0.0   7.9| 2168  4333  2167  30323  8669|
20:06:50|    0.0 2482.1     0.0  16110.2   0.1    0.1   0.0   9.5| 2167  4336  2167  30346  8671|

能夠對比出sysbench的輸出值含義。

參考:
一、"白​皮​書​ ​M​y​S​Q​L​ ​性​能​基​準​測​試": http://wenku.baidu.com/view/c10eea360b4c2e3f57276314.html
二、"服​務​器​性​能​測​試​利​器​_​之​三​_​平​臺​處​理​性​能​工​具​S​Y​S​B​E​N​C​H": http://wenku.baidu.com/view/0b3e6ed45022aaea998f0f93.html
四、"Using Lua-enabled sysbench": https://blog.mariadb.org/using-lua-enabled-sysbench/




相關文章
相關標籤/搜索