1. 程式人生 > 其它 >壓測工具sysbench的使用

壓測工具sysbench的使用

使用sysbench壓測系統性能和MySQL

前言

sysBench是一個模組化的、跨平臺、多執行緒基準測試工具,主要用於評估測試各種不同系統引數下的資料庫負載情況。sysbench提供如下測試:
(1)CPU效能
(2)磁碟IO效能
(3)排程程式效能
(4)記憶體分配及傳輸速度
(5)POSIX執行緒效能
(6)資料庫效能(OLTP基準測試)
sysbench支援 MySQL、PostgreSQL、Oracle 資料庫。

安裝

# centos7
yum install -y sysbench
# debian 11
apt install -y sysbench

# 編譯安裝。step1:下載原始碼
git clone https://github.com/akopytov/sysbench.git
# 編譯安裝。step2:安裝依賴(centos 7)
yum -y install make automake libtool pkgconfig libaio-devel mariadb-devel openssl-devel postgresql-devel
# 編譯安裝。step3:正式編譯
cd sysbench
./autogen.sh
./configure
make
make install

幫助文件

sysbench --help

CPU測試

# 幫助
sysbench cpu help
# 示例。要計算的素數最大值20000,開啟8執行緒
sysbench cpu --cpu-max-prime=20000 --threads=8 run

結果解釋:

# 所有執行緒每秒完成5704.79次events
events per second:  5704.79
# 總耗時10.0026s
total time: 10.0026s
# 10秒內所有執行緒一共完成了57073次events
total number of events: 57073
# 完成1次event的最少耗時,單位毫秒
min: 3.03
# 所有event的平均耗時
avg: 
# 完成1次event的最多耗時
max:
# 95%的event在2.81毫秒內完成
95th percentile: 2.81
# 平均每個執行緒完成3567.0625次event,標準差為9.33
events (avg/stddev): 3567.0625/9.33
# 每個執行緒平均耗時9.9997秒,標準差為0
execution time (avg/stddev):   9.9997/0.00

記憶體測試

# 幫助文件
sysbench memory help

# –memory-block-size=SIZE:測試記憶體塊的大小,預設為1K。
# –memory-total-size=SIZE:資料傳輸的總大小,預設為100G。
# –memory-scope=STRING:記憶體訪問的範圍,包括全域性和本地範圍,預設為global。
# –memory-hugetlb=[on|off]:是否從HugeTLB池分配記憶體的開關,預設為off。
# –memory-oper=STRING:記憶體操作的型別,包括read, write, none,預設為write
# –memory-access-mode=STRING:記憶體訪問模式,包括seq,rnd兩種模式,預設為seq。

# 示例。12執行緒,每個記憶體塊大小8K,資料傳輸總大小100G(並不是佔用100G),記憶體訪問模式為seq
sysbench memory --threads=12 --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run

硬碟IO測試

# 幫助文件
sysbench fileio help

# –file-num=N:生成測試檔案的數量,預設為128。
# –file-block-size=N:測試時所使用檔案塊的大小,如果想磁碟針對innodb儲存引擎進行測試,可以將其設定為16384(innodb儲存引擎頁的大小),預設為16384。
# –file-total-size=SIZE:建立測試檔案的總大小,預設為2G大小。
# –file-test-mode=STRING:檔案測試模式,seqwr(順序寫)、seqrewr(順序讀寫)、seqrd(順序讀)、rndrd(隨機讀)、rndwr(隨機寫)、rndrw(隨機讀寫)。
# –file-io-mode=STRING:檔案操作模式,sync(同步)、async(非同步)、fastmmap(快速mmap)、slowmmap(慢速mmap),預設為sync。
# –file-async-backlog=N:對應每個執行緒佇列的非同步運算元,預設為128。
# –file-extra-flags=STRING:開啟檔案時的選項,與API相關的引數。
# –file-fsync-freq=N:執行fsync函式的頻率。fsync主要是同步磁碟檔案,0代表不使用fsync函式,預設值為100。
# –file-fsync-all=[on|off]:每執行完一次寫操作,就執行一次fsync。預設為off。
# –file-fsync-end=[on|off]:測試結束時執行fsync函式,預設為on。
# –file-fsync-mode=STRING:檔案同步函式選擇,和API相關的引數,由於多個作業系統對於fdatasync支援不同,因此不建議使用fdatasync,預設為fsync。
# –file-merged-requests=N:大多情況下,合併可能的IO的請求數,預設為0。
# –file-rw-ratio=N:測試時的讀寫比例,預設時為1.5,即可3:2

示例

  1. 先準備測試檔案
# 生成16個測試檔案,測試檔案總大小為2G
sysbench fileio --file-num=16 --file-total-size=2G prepare
  1. 執行測試
# 檔案測試模式為隨機讀,直連不用快取
sysbench fileio --file-total-size=2G --file-test-mode=rndrd --time=180 --threads=16 --file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
  1. 清理測試資料
sysbench fileio --file-num=16 --file-total-size=2G cleanup

OLTP基準測試(MySQL資料庫測試)

# 命令選項
sysbench help

示例

  1. 準備測試資料
# --db-driver: 資料庫驅動型別
# --time: 持續訪問300秒
# --threads: 10執行緒併發
# --report-interval:每1秒報告一次
# --mysql-host port user password 資料庫配置資訊
# --mysql-db --tables --table_size 測試資料庫為test_db,庫裡建20個表,每個表100萬條資料。需要事先建立庫
# oltp_read_write 執行oltp資料庫的讀寫測試
# --db-ps-mode 禁止ps模式(prepared statements)
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
  1. 測試:綜合讀寫
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
  1. 測試:只讀
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
  1. 測試:刪除
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=30 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_delete --db-ps-mode=disable run
  1. 清理測試資料
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=64 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup

參考文章