1. 程式人生 > >sysbench壓力測試工具的安裝-轉載-老僧觀天下

sysbench壓力測試工具的安裝-轉載-老僧觀天下

轉載自老僧觀天下:https://www.cnblogs.com/hally/p/8360637.html

sysbench是一款壓力測試工具,可以測試系統的硬體效能,也可以用來對資料庫進行基準測試

wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"  下載之後的名字是1.0.zip。解壓之後為sysbench-1.0

百度雲網盤:https://pan.baidu.com/s/1mjoa25y   密碼:i4pm

cd sysbench-1.0

執行autogen.sh用它來生成configure這個檔案

./autogen.sh

執行configure && make && make install 來完成sysbench的安裝

./configure && make && make install  這個命令是用於mysql預設的安裝路徑
./configure --prefix=/usr/local/sysbench/ --with-mysql --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib 這個是用於指定mysql安裝的路徑(我的mysql是預設路徑,所以我用第一種)
當然了,用上面的引數編譯的話,就要確保你的 MySQL lib目錄下有對應的 so 檔案,如果沒有,可以自己下載 devel 或者 share 包來安裝。
另外,如果想要讓 sysbench 支援 pgsql/oracle 的話,就需要在編譯的時候加上引數
--with-pgsql
或者
--with-oracle
這2個引數預設是關閉的,只有 MySQL 是預設支援的


執行之後出現這個錯誤

這是缺少MySQL標頭檔案和庫檔案

centos6用:

 yum install MySQL-shared  

 yum install MySQL-devel

centos7用:

yum install -y Percona-XtraDB-Cluster-shared-56.x86_64 

yum install  -y Percona-XtraDB-Cluster-devel-56

重新 ./configure && make && make install

測試:sysbench cpu --cpu-max-prime=10000 run

出現這個就是成功

 

 sysbench支援以下幾種測試模式:

1、CPU運算效能
2、磁碟IO效能
3、排程程式效能
4、記憶體分配及傳輸速度
5、POSIX執行緒效能
6、資料庫效能(OLTP基準測試)
目前sysbench主要支援 mysql,drizzle,pgsql,oracle 等幾種資料庫。

三、OLTP測試前準備
初始化測試庫環境(總共10個測試表,每個表 100000 條記錄,填充隨機生成的資料):
cd /tmp/sysbench-0.4.12-1.1/sysbench
mysqladmin create sbtest

./sysbench --mysql-host=1.2.3.4 --mysql-port=3317 --mysql-user=tpcc --mysql-password=tpcc \
 --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --rand-init=on prepare
關於這幾個引數的解釋:
--test=tests/db/oltp.lua 表示呼叫 tests/db/oltp.lua 指令碼進行 oltp 模式測試
--oltp_tables_count=10 表示會生成 10 個測試表
--oltp-table-size=100000 表示每個測試表填充資料量為 100000 
--rand-init=on 表示每個測試表都是用隨機資料來填充的

如果在本機,也可以使用 –mysql-socket 指定 socket 檔案來連線。載入測試資料時長視資料量而定,若過程比較久需要稍加耐心等待。

真實測試場景中,資料表建議不低於10個,單表資料量不低於500萬行,當然了,要視伺服器硬體配置而定。如果是配備了SSD或者PCIE SSD這種高IOPS裝置的話,則建議單表資料量最少不低於1億行

四、進行OLTP測試

在上面初始化資料引數的基礎上,再增加一些引數,即可開始進行測試了:

./sysbench --mysql-host=1.2.3.4. --mysql-port=3306 --mysql-user=tpcc \
--mysql-password=tpcc --test=tests/db/oltp.lua --oltp_tables_count=10 \
--oltp-table-size=10000000 --num-threads=8 --oltp-read-only=off \
--report-interval=10 --rand-type=uniform --max-time=3600 \
 --max-requests=0 --percentile=99 run >> ./log/sysbench_oltpX_8_20140921.log
幾個選項稍微解釋下
--num-threads=8 表示發起 8個併發連線
--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%裡取最大值
即:模擬 對10個表併發OLTP測試,每個表1000萬行記錄,持續壓測時間為 1小時。
真實測試場景中,建議持續壓測時長不小於30分鐘,否則測試資料可能不具參考意義
五、測試結果解讀:
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 8
Report intermediate results every 10 second(s)
Random number generator seed is 0 and will be ignored


Threads started!
-- 每10秒鐘報告一次測試結果,tps、每秒讀、每秒寫、99%以上的響應時長統計
[  10s] threads: 8, tps: 1111.51, reads/s: 15568.42, writes/s: 4446.13, response time: 9.95ms (99%)
[  20s] threads: 8, tps: 1121.90, reads/s: 15709.62, writes/s: 4487.80, response time: 9.78ms (99%)
[  30s] threads: 8, tps: 1120.00, reads/s: 15679.10, writes/s: 4480.20, response time: 9.84ms (99%)
[  40s] threads: 8, tps: 1114.20, reads/s: 15599.39, writes/s: 4456.30, response time: 9.90ms (99%)
[  50s] threads: 8, tps: 1114.00, reads/s: 15593.60, writes/s: 4456.70, response time: 9.84ms (99%)
[  60s] threads: 8, tps: 1119.30, reads/s: 15671.60, writes/s: 4476.50, response time: 9.99ms (99%)
OLTP test statistics:
    queries performed:
        read:                            938224    -- 讀總數
        write:                           268064    -- 寫總數
        other:                           134032    -- 其他操作總數(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
        total:                           1340320    -- 全部總數
    transactions:                        67016  (1116.83 per sec.)    -- 總事務數(每秒事務數)
    deadlocks:                           0      (0.00 per sec.)    -- 發生死鎖總數
    read/write requests:                 1206288 (20103.01 per sec.)    -- 讀寫總數(每秒讀寫次數)
    other operations:                    134032 (2233.67 per sec.)    -- 其他操作總數(每秒其他操作次數)

General statistics:    -- 一些統計結果
    total time:                          60.0053s    -- 總耗時
    total number of events:              67016    -- 共發生多少事務數
    total time taken by event execution: 479.8171s    -- 所有事務耗時相加(不考慮並行因素)
    response time:    -- 響應時長統計
         min:                                  4.27ms    -- 最小耗時
         avg:                                  7.16ms    -- 平均耗時
         max:                                 13.80ms    -- 最長耗時
         approx.  99 percentile:               9.88ms    -- 超過99%平均耗時

Threads fairness:
    events (avg/stddev):           8377.0000/44.33
    execution time (avg/stddev):   59.9771/0.00

其他資訊可以參考這個連線:
http://www.linuxidc.com/Linux/2017-04/142856.htm

實時操作:
 /usr/local/bin/sysbench oltp_common --mysql-host=10.1.18.74 --mysql-port=3306  --table-size=1000000 --db-driver=mysql --mysql-db=test --mysql-user=root--mysql-password=root prepare  此命令用來生成表
oltp_common #生成庫的指令碼
--mysql-db=test#指定庫
prepare   #執行的命令
--oltp_tables_count=10  用來指定生成多少張表

 

 /usr/local/bin/sysbench  oltp_read_only --mysql-host=10.1.18.74 --mysql-port=3306  --table-size=1000 --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=root --time=10 --max-requests=0 --threads=8 run  這是執行
 oltp_read_only #指定只讀指令碼
--mysql-db=test #指定執行的庫
--threads=8 #指定併發連線數
run #執行指令

 


/usr/local/bin/sysbench oltp_write_only --mysql-host=10.1.18.74 --mysql-port=3306 --table-size=1000 --db-driver=mysql --mysql-db=test --mysql-user=hairong.cao --mysql-password=hairong.cao --time=10 --max-requests=0 --threads=8 run

oltp_write_only #指定只寫指令碼

生成表:

/usr/local/bin/sysbench tests/include/oltp_legacy/oltp.lua --mysql-host=10.1.18.74 --mysql-port=3306  --oltp_tables_count=8 --table-size=10000000 --db-driver=mysql --mysql-db=test --mysql-user=hairong.cao --mysql-password=hairong.cao prepare 

混合場景壓測:

/usr/local/bin/sysbench  tests/include/oltp_legacy/oltp.lua  --mysql-host=10.1.18.74 --mysql-port=3306  --table-size=10000000 --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=root --oltp_tables_count=8 --max-requests=0 --threads=32 --oltp-read-olny=off --report-interval=10 --percentile=99 --max-time=3600 run >> ./logs/baidu.log  

cpu測試:

/usr/local/bin/sysbench --test=cpu --num-threads=40 --max-requests=10000 --cpu-max-prime=20000 run

IO測試:

生成測試檔案; /usr/local/bin/sysbench --test=fileio --file-num=10 --file-total-size=5G prepare  表示生成10個5G的檔案

執行測試: /usr/local/bin/sysbench --test=fileio --file-total-size=5G --file-test-mode=rndrw  --max-requests=5000 --num-threads=16  --file-num=10 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run

引數說明: --max-requests=5000 表示5000請求量   

       --num-threads=16  16個執行緒

 


File operations:
reads/s: 1791.40   表示每秒讀的次數
writes/s: 1188.31  表示每秒寫的次數
fsyncs/s: 5.96   表示每秒從記憶體向磁碟同步的次數


Throughput:
read, MiB/s: 27.99   這裡表示讀的頻寬
written, MiB/s: 18.57  這裡表示寫的頻寬

 

     

MySQL讀寫速度慢從外部分析原因:

待續