前言
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