1. 程式人生 > 資料庫 >資料庫壓測-sysbench

資料庫壓測-sysbench

ubuntu安裝

##前提:先安裝PostgreSQL和PostgreSQL-devel,如果軟體倉庫中版本太低,就直接編譯安裝
wget https://github.com/akopytov/sysbench/archive/1.0.20.tar.gz
sudo apt install -y  automake
sudo apt install -y  libtool
sudo apt install -y  pkg-config
sudo apt install -y libmysqlclient-dev
mv 1.0.20.tar.gz sysbench.tar.gz
tar -xzvf sysbench.tar.gz
cd sysbench-1.0.20/
./autogen.sh
./configure --with-pgsql --with-pgsql-includes=/mnt/d/work/ubuntu/app/postgresql/include --with-pgsql-libs=/mnt/d/work/ubuntu/app/postgresql/lib 
make
sudo make install

export LD_LIBRARY_PATH=/mnt/d/work/ubuntu/app/postgresql/lib/:$LD_LIBRARY_PATH
sysbench --help

centos安裝

沒有測試

##前提:先安裝PostgreSQL和PostgreSQL-devel,如果軟體倉庫中版本太低,就直接編譯安裝
yum install gcc gcc-c++ automake make libtool mysql-community-devel mysql-devel
yum install automake libtool –y
yum -y install postgresql postgresql-devel

wget https://github.com/akopytov/sysbench/archive/1.0.20.tar.gz
mv 1.0.20.tar.gz sysbench.tar.gz
tar -xzvf sysbench.tar.gz
cd sysbench-1.0.20/
./autogen.sh
./configure --with-pgsql --with-pgsql-includes=/usr/pgsql-10/include --with-pgsql-libs=/usr/pgsql-10/lib
make -j 2
sudo make install

使用

壓測PostgreSQL

##準備資料
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare

##執行workload oltp_read_only/oltp_write_only/oltp_read_write
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --table_size=25000 --tables=250 --events=0 --time=600 --threads=2 --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run

##清理
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --table_size=25000 --tables=250 --events=0 --time=600 --threads=2 --percentile=95 --range_selects=0 oltp_read_only cleanup

指定lua指令碼

sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --oltp-table-size=10000 --threads=10 --time=120 --events=0 --report-interval=10 --percentile=99 ./sysbench-1.0.20/tests/include/oltp_legacy/oltp.lua prepare

sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --oltp-table-size=10000 --threads=10 --time=120 --events=0 --report-interval=10 --percentile=99 ./sysbench-1.0.20/tests/include/oltp_legacy/oltp.lua run

sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=test --oltp-table-size=10000 --threads=10 --time=120 --events=0 --report-interval=10 --percentile=99 ./sysbench-1.0.20/tests/include/oltp_legacy/oltp.lua cleanup

壓測mysql

##準備資料
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare

##執行workload
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run

##清理
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup

輸出結果解析

-- 每10秒鐘報告一次測試結果,tps、每秒讀、每秒寫、99%以上的響應時長統計    
[ 100s ] thds: 10 tps: 967.59 qps: 19659.36 (r/w/o: 13785.63/3868.85/2004.88) lat (ms,99%): 22.28 err/s: 17.10 reconn/s: 0.00
[ 110s ] thds: 10 tps: 727.29 qps: 14821.11 (r/w/o: 10396.20/2913.34/1511.57) lat (ms,99%): 31.94 err/s: 15.30 reconn/s: 0.00
[ 120s ] thds: 10 tps: 570.63 qps: 11608.69 (r/w/o: 8140.82/2280.92/1186.96) lat (ms,99%): 27.66 err/s: 11.10 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            1093134   -- 讀總數
        write:                           305474    -- 寫總數
        other:                           159493    -- 其他操作總數(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
        total:                           1558101   -- 全部總數
    transactions:                        76350  (636.18 per sec.)     -- 總事務數(每秒事務數)
    queries:                             1558101 (12982.76 per sec.)  -- 查詢總數(每秒查詢數)
    ignored errors:                      1731   (14.42 per sec.)      -- 忽略的錯誤數
    reconnects:                          0      (0.00 per sec.)       -- 重連次數

General statistics:
    total time:                          120.0115s     -- 總耗時
    total number of events:              76350         -- 共發生多少事務

Latency (ms):
         min:                                    3.18  -- 最小耗時
         avg:                                   15.71  -- 平均耗時
         max:                                 2019.94  -- 最長耗時
         99th percentile:                       38.25  -- 超過99%平均耗時
         sum:                              1199632.83  -- 總耗時

Threads fairness:
    events (avg/stddev):           7635.0000/378.32  --標準差:標準偏差越小,這些值偏離平均值就越少,反之亦然
    execution time (avg/stddev):   119.9633/0.00  

作圖

作圖可以參考:https://www.jianshu.com/p/5250abb16fc3