sysbench0.5筆記
- 2019 年 10 月 5 日
- 筆記
安裝方法:
下載地址:https://github.com/akopytov/sysbench
yum install automake libtool -y
unzip sysbench-0.5.zip && cd sysbench-0.5 && sh autogen.sh && ./configure && make && make install
sysbench支援以下幾種測試模式:
1、CPU運算性能
2、磁碟IO性能
3、調度程式性能
4、記憶體分配及傳輸速度
5、POSIX執行緒性能
6、資料庫性能(OLTP基準測試)
目前sysbench主要支援 mysql,drizzle,pgsql,oracle 等幾種資料庫。
sysbench的CPU基準測試
原理:採用尋找最大素數的方式來測試CPU的性能。
cat /proc/cpuinfo 查看CPU的配置情況
sysbench –test=cpu –cpu-max-prime=20000 run 結果如下圖,執行耗時39.9044秒

sysbench命令用法:
sysbench –test=<name> help 可以查看各種幫助資訊
sysbench的文件IO基準測試
這裡測試的是阿里雲主機掛載的SSD磁碟,因此需要切換到SSD的掛載目錄。
cd /bdata/ && makedir sysbench_test && cd sysbench_test/
step1、開16個執行緒生成2G測試數據文件 [注意文件大小要超過記憶體的大小,這樣才能測試出IO開銷]
sysbench –test=fileio –file-total-size=4G –num-threads=16 prepare
step2、執行讀寫測試 [下面的命令是執行混合隨機讀寫基準測試]
sysbench –test=fileio –file-total-size=4G –num-threads=16 –file-test-mode=rndrw –init-rng=on–max-time=300 –max-requests=0 run

從上圖可以看出,讀18.122G,寫12.081G。請求數為6597.99個/秒。吞吐量為103Mb/秒。
補充:幾種測試選項
seqwr 順序寫入
seqrewr 順序重寫
seqrd 順序讀取
rndrd 隨機讀取
rndwr 隨機寫入
rndrw 混合隨機讀/寫
step3、刪除測試文件
sysbench –test=fileio –file-total-size=2G cleanup
sysbench的OLTP基準測試
OLTP基準測試模擬了一個簡單的事務處理系統的工作負載。
幫助命令:sysbench –test=oltp help
OLTP測試環境:
阿里雲ECSMySQL5.6 4核8G 500GB SSD
step1、生成表文件
我試驗過程中發現sysbench0.5的oltp測試有點不一樣。必須切換到sysbench的安裝包的路徑下,不然提示缺少lua文件。
cd /root/sysbench-0.5/sysbench/tests/db
sysbench –test=oltp.lua –oltp-table-size=1000000 –oltp_tables_count=10 –mysql-db=test–mysql-user=root –mysql-password='123456' –mysql-socket='/tmp/mysql.sock' –db-driver=mysql –rand-init=on prepare
# 這個操作會生成test.sbtest1表。
–oltp-table-size=1000000 表示每個測試表填充數據量為 100萬行
–rand-init=on 表示每個測試表都是用隨機數據來填充的
–oltp_tables_count=10 表示會生成 10 個測試表
真實測試場景中,數據表建議不低於10個,單表數據量不低於500萬行,當然了,要視伺服器硬體配置而定。如果是配備了SSD或者PCIE SSD這種高IOPS設備的話,則建議單表數據量最少不低於1億行。
step2、8執行緒測試
sysbench –test=oltp.lua –oltp-table-size=1000000
–mysql-db=test –mysql-user=root –mysql-password='123456'
–mysql-socket='/tmp/mysql.sock' –db-driver=mysql –oltp-read-only=off
–max-time=60 –num-threads=8 –report-interval=10 –rand-type=uniform
–max-requests=0 –percentile=99 run >> /tmp/sysbench-oltp-2017-04-27.log
上面的參數說明:啟動8個並發執行緒,讀寫模式,測試時長60秒。
其它參數:
–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%里取最大值
結果如下:
OLTP test statistics:
queries performed:
read: 502936 讀總數
write: 143696 寫總數
other: 71848 其他操作總數(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: 718480 總數
transactions: 35924 (598.65 per sec.) 總事務數(每秒事務數)
read/write requests: 646632 (10775.68 per sec.) 讀寫總數(每秒讀寫次數)
other operations: 71848 (1197.30 per sec.) 其他操作總數(每秒其他操作次數)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.0084s 總耗時
total number of events: 35924 共發生多少事務數
total time taken by event execution: 479.9595s 所有事務耗時相加(不考慮並行因素)
response time:
min: 6.19ms 最小耗時
avg: 13.36ms 平均耗時
max: 187.06ms 最長耗時
approx. 99 percentile: 30.73ms 超過99%平均耗時
Threads fairness:
events (avg/stddev): 4490.5000/8.03
execution time (avg/stddev): 59.9949/0.00
step3、清理上面生成的10個測試表
sysbench –test=oltp.lua –oltp-table-size=1000000 –oltp-tables-count=10
–mysql-db=test –mysql-user=root –mysql-password='123456'
–mysql-socket='/tmp/mysql.sock' –db-driver=mysql –num-threads=8 cleanup
可以對資料庫進行調優後,再使用sysbench對OLTP進行測試,看看TPS是不是會有所提高。
注意:sysbench的測試只是基準測試,並不能代表實際企業環境下的性能指標。