壓測工具sysbench的使用
阿新 • • 發佈:2021-12-20
使用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
示例
- 先準備測試檔案
# 生成16個測試檔案,測試檔案總大小為2G
sysbench fileio --file-num=16 --file-total-size=2G prepare
- 執行測試
# 檔案測試模式為隨機讀,直連不用快取
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
- 清理測試資料
sysbench fileio --file-num=16 --file-total-size=2G cleanup
OLTP基準測試(MySQL資料庫測試)
# 命令選項
sysbench help
示例
- 準備測試資料
# --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
- 測試:綜合讀寫
/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
- 測試:只讀
/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
- 測試:刪除
/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
- 清理測試資料
/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