sysbench 壓測工具

參考:mysql

https://yq.aliyun.com/articles/66651git

下載sysbench:github

http://github.com/akopytov/sysbenchsql

sysbench文檔:ubuntu

http://github.com/akopytov/sysbenchcentos

安裝:緩存

1)源碼安裝:bash

build requirements:服務器

1.ubuntu:併發

apt -y install make automake libtool pkg-config libaio-dev

# For MySQL support

apt -y install libmysqlclient-dev libssl-dev

# For PostgreSQL support

apt install libpq-dev

2.centos:

yum -y install make automake libtool pkgconfig libaio-devel
# For MySQL support, replace with mysql-devel on RHEL/CentOS 5
yum -y install mariadb-devel openssl-devel
# For PostgreSQL support
yum -y install postgresql-devel

build and install:

./autogen.sh
# Add --with-pgsql to build with PostgreSQL support
./configure
make -j
make install

2)二進制包安裝:

1.ubuntu:

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench

2.centos:

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench

測試:

1)測試cpu:sysbench --test=cpu --cpu-max-prime=2000 run

2) 測試線程:sysbench --test=threads --num-threads=500 --thread-yields=100 --thread-locks=4 run

3) 測試IO:

準備

sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw prepare

測試                

sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw run

清理

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup

4)測試內存:sysbench --test=memory --memory-block-size=8k --memory-total-size=1G run

 

5)測試oltp:

1.準備階段,生成須要測試的表(測試生成10個表,每一個表5000000條數據)

sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=yourpassword  --test=tests/db/oltp.lua(根據具體位置填寫) --oltp_tables_count=10 --oltp-table-size=5000000 --rand-init=on prepare

參數詳解:

--test=tests/db/oltp.lua 表示調用 tests/db/oltp.lua 腳本進行 oltp 模式測試
--oltp_tables_count=10 表示會生成 10 個測試表
--oltp-table-size=5000000 表示每一個測試表填充數據量爲 5000000 
--rand-init=on 表示每一個測試表都是用隨機數據來填充的
若是在本機,也可使用 –mysql-socket 指定 socket 文件來鏈接。加載測試數據時長視數據量而定,若過程比較久須要稍加耐心等待。
真實測試場景中,數據表建議不低於10個,單表數據量不低於500萬行,固然了,要視服務器硬件配置而定。若是是配備了SSD或者PCIE SSD這種高IOPS設備的話,則建議單表數據量最少不低於1億行。

2.oltp測試:

這次測試啓動了256個線程,10個測試表,每一個表中灌入500W條數據,測試時間1個小時

./sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=yourpassword --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=5000000 --num-threads=256 --oltp-read-only=off --report-interval=10 --rand-type=uniform --max-time=3600  --max-requests=1000000 --percentile=99 run >> ./log/sysbench_oltpX_256_20160403.log

幾個選項稍微解釋下
--num-threads=8 表示發起 8個併發鏈接
--oltp-read-only=off 表示不要進行只讀測試,也就是會採用讀寫混合模式測試
--report-interval=10 表示每10秒輸出一次測試進度報告
--rand-type=uniform 表示隨機類型爲固定模式,其餘幾個可選隨機模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累託)
--max-time=3600 表示最大執行時長爲 3600秒

--oltp-test-mode 執行模式,這裏是非事務式的。可選值有simple,complex,nontrx。默認是complex

--max-requests=0 表示總請求數爲 0,由於上面已經定義了總執行時長,因此總請求數能夠設定爲 0;也能夠只設定總請求數,不設定最大執行時長

--percentile=99 表示設定採樣比例,默認是 95%,即丟棄1%的長請求,在剩餘的99%裏取最大值
即:模擬 對10個表併發OLTP測試,每一個表1000萬行記錄,持續壓測時間爲 1小時。 

 

測試結果:

sysbench 0.5:  multi-threaded system evaluation benchmark
 
Running the test with following options:
Number of threads: 256
Report intermediate results every 10 second(s)
Random number generator seed is 0 and will be ignored
 
-- 線程啓動
Threads started!
 
-- 每10秒鐘報告一次測試結果,tps、每秒讀、每秒寫、99%以上的響應時長統計
[  10s] threads: 256, tps: 524.19, reads/s: 7697.05, writes/s: 2143.56, response time: 1879.46ms (99%)
[  20s] threads: 256, tps: 96.50, reads/s: 1351.01, writes/s: 373.30, response time: 9853.49ms (99%)
[  30s] threads: 256, tps: 235.50, reads/s: 3297.01, writes/s: 946.90, response time: 2150.47ms (99%)
[  40s] threads: 256, tps: 115.50, reads/s: 1617.00, writes/s: 491.40, response time: 4562.75ms (99%)
[  50s] threads: 256, tps: 262.10, reads/s: 3669.41, writes/s: 1016.10, response time: 2049.90ms (99%)
[  60s] threads: 256, tps: 121.50, reads/s: 1701.00, writes/s: 499.10, response time: 3666.03ms (99%)
[  70s] threads: 256, tps: 201.40, reads/s: 2735.10, writes/s: 769.50, response time: 3867.82ms (99%)
[  80s] threads: 256, tps: 204.70, reads/s: 2950.29, writes/s: 838.10, response time: 2724.99ms (99%)
[  90s] threads: 256, tps: 118.40, reads/s: 1657.61, writes/s: 490.00, response time: 3835.53ms (99%)
 
 
OLTP test statistics:
    queries performed:
        read:                            8823206    -- 讀總數
        write:                           2520916    -- 寫總數
        other:                           1260458    -- 其餘操做總數(SELECT、INSERT、UPDATE、DELETE以外的操做,例如COMMIT等)
        total:                           12604580    -- 所有總數
    transactions:                        630229 (174.94 per sec.)    -- 總事務數(每秒事務數)
    deadlocks:                           0      (0.00 per sec.)        -- 發生死鎖總數
    read/write requests:                 11344122 (3148.86 per sec.)    -- 讀寫總數(每秒讀寫次數)
    other operations:                    1260458 (349.87 per sec.)    -- 其餘操做總數(每秒其餘操做次數)
 
 
General statistics:        -- 一些統計結果        
    total time:                          3602.6152s    -- 總耗時
    total number of events:              630229        -- 共發生多少事務數
    total time taken by event execution: 921887.7227s    -- 全部事務耗時相加(不考慮並行因素)
    response time:                    -- 響應時間
         min:                                  6.52ms    -- 最小耗時
         avg:                               1462.78ms    -- 平均耗時
         max:                               9918.51ms    -- 最長耗時
         approx.  99 percentile:            3265.01ms    -- 超過99%平均耗時
 
 
Threads fairness:                -- 線程的穩定性
    events (avg/stddev):           2461.8320/34.60      -- 事件(平均值/誤差)
    execution time (avg/stddev):   3601.1239/0.63    -- 執行時間(平均值/誤差)

每輪測試完成後,都重啓mysqld實例,而且用下面的方法刪除系統cache,釋放swap(若是用到了swap的話),甚至能夠重啓整個OS。

# sync  -- 將髒數據刷新到磁盤
# sync  -- 將髒數據刷新到磁盤
# echo 3 > /proc/sys/vm/drop_caches  -- 清除OS Cache
# swapoff -a && swapon -a     -- 清除OS swap緩存

四、再次啓動測試流程

清理測試數據

./sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=yourpassword --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=5000000 --num-threads=256 --oltp-read-only=off --report-interval=10 --rand-type=uniform --max-time=3600  --max-requests=1000000 --percentile=99 cleanup

相關文章
相關標籤/搜索