sysbench mysql oltp_用sysbench进行数据库OLTP基准测试
基于TPC-C的OLTP基準測試,對比Mysql和PostgreSQL的性能
一、什么是TPC-C和tpmC
1、TPC-C
TPC-C是一種旨在衡量聯機事務處理(OLTP)系統性能與可伸縮性的行業標準基準測試項目。這種基準測試項目將對包括查詢、更新及隊列式小批量事務在內的廣泛數據庫功能進行測試。TPC-C基準測試針對一種模擬訂單錄入與銷售環境測量每分鐘商業事務(tpmC)吞吐量。
2、tpmC
tpmC值在國內外被廣泛用于衡量計算機系統的事務處理能力,是TPC-C吞吐率的單位。tpm是transactions per minute的簡稱;C指TPC中的C基準程序。它的定義是每分鐘內系統處理的新訂單個數。
二、sysbench
sysbench是一款壓力測試工具,可以測試系統的硬件性能,也可以用來對數據庫進行基準測試。
1、下載安裝
從GitHub上下載安裝包:下載地址
安裝
安裝sysbench之前,因為是對比Mysql和PostgreSQL,所以先安裝兩個數據庫,我的PG用源碼編譯安裝,Mysql使用yum安裝,還需要安裝對應版本的mysql-devel
yum install mysql-devel
先定位好PG和Mysql的頭文件和lib文件,即include和lib文件夾,如:
PG:/opt/pgsql/include /opt/pgsql/lib
mysql: /usr/include/mysql /usr/lib64/mysql
將下載好的sysbench安裝包上傳至服務器,解壓后編譯安裝
unzip sysbench-master.zip
cd sysbench-master
./ autogen.sh 生成configure文件
./configure –prefix=/opt/sysbench --with-mysql --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql --with-pgsql --with-pgsql-includes=/opt/pgsql/include --with-pgsql-libs=/opt/pgsql/lib
make && make install
[NOTE]
sysbench也支持Oracle,安裝時可以用--with-oracle參數來安裝。
設置環境變量:vim ~/.bash_profile添加:
export LD_LIBRARY_PATH=/opt/pgsql/lib
export PATH=$PATH:/opt/sysbench/bin
完成安裝
2、sysbench支持的幾種測試模式
CPU運算性能
磁盤IO性能
調度程序性能
內存分配及傳輸速度
POSIX線程性能
數據庫性能(OLTP基準測試)
[NOTE]
目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等幾種數據庫。
3、數據庫性能測試
以Mysql數據庫為例,sysbench的數據庫性能測試主要分為三個步驟,prepare、run、cleanup
準備階段(prepare)
sysbench oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sbtest --mysql-user=root --mysql-password=Grea1234 --table_size=1000000 --tables=10 --threads=20 --events=0 --report-interval=10 --time=120 --range_size=500 prepare
部分參數說明:
--mysql-host IP
--mysql-port 端口號
--mysql-db 希望鏈接的數據庫
--mysql-user 用戶名
--mysql-password 密碼
--table_size 每張表初始化的數據數量
--tables 初始化表的數量
--threads 啟動的線程
--time 運行時間設為0表示不限制時間
--report-interval 運行期間日志,單位為秒
--events 最大請求數量,定義數量后可以不需要--time選項
執行階段(run)
sysbench oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sbtest --mysql-user=root --mysql-password=Grea1234 --table_size=1000000 --tables=10 --threads=20 --events=0 --report-interval=10 --time=120 --range_size=500 run >>/opt/sysbench/result/oltp_read_write.log
清理數據階段(cleanup)
sysbench oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sbtest --mysql-user=root --mysql-password=Grea1234 --table_size=1000000 --tables=10 --threads=20 --events=0 --report-interval=10 --time=120 --range_size=500 cleanup
[NOTE]
對PG數據庫進行測試,添加參數--db-driver=pgsql,然后對應的將mysql換成pgsql;
樣例中是oltp的讀寫模式,還有只讀模式等,具體可以通過sysbench --help查看或者sysbench testname help查看具體test的幫助,如sysbench oltp_read_write help
4、結果解讀
Running the test with following options:
Number of threads: 5
Report intermediate results every 10 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
-- 每10秒鐘報告一次測試結果,tps、每秒讀、每秒寫、95%以上的響應時長統計
[ 10s ] thds: 5 tps: 294.23 qps: 5893.38 (r/w/o: 4125.90/1178.52/588.96) lat (ms,95%): 24.83 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 5 tps: 302.41 qps: 6046.38 (r/w/o: 4232.73/1208.84/604.82) lat (ms,95%): 22.69 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 5 tps: 282.70 qps: 5653.91 (r/w/o: 3958.11/1130.40/565.40) lat (ms,95%): 24.83 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 5 tps: 299.80 qps: 5993.54 (r/w/o: 4195.16/1198.79/599.59) lat (ms,95%): 22.69 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 5 tps: 310.00 qps: 6204.40 (r/w/o: 4342.80/1241.60/620.00) lat (ms,95%): 21.50 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 5 tps: 282.20 qps: 5641.45 (r/w/o: 3949.33/1127.71/564.40) lat (ms,95%): 22.69 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 5 tps: 301.77 qps: 6037.16 (r/w/o: 4226.12/1207.49/603.55) lat (ms,95%): 21.89 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 5 tps: 317.23 qps: 6345.01 (r/w/o: 4441.36/1269.20/634.45) lat (ms,95%): 21.11 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 5 tps: 317.10 qps: 6341.87 (r/w/o: 4439.28/1268.39/634.20) lat (ms,95%): 21.11 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 5 tps: 314.40 qps: 6288.52 (r/w/o: 4401.71/1258.00/628.80) lat (ms,95%): 21.50 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 5 tps: 316.70 qps: 6334.14 (r/w/o: 4433.93/1266.81/633.40) lat (ms,95%): 21.11 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 5 tps: 318.57 qps: 6370.30 (r/w/o: 4459.68/1273.48/637.14) lat (ms,95%): 21.11 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 512078 -- 讀總數
write: 146308 -- 寫總數
other: 73154 -- 其他操作總數(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: 731540 -- 全部總數
transactions: 36577 (304.76 per sec.) -- 總事務數(每秒事務數)
queries: 731540 (6095.25 per sec.) -- 總操作數包括讀寫和其他(每秒操作數)
ignored errors: 0 (0.00 per sec.) -- 錯誤次數
reconnects: 0 (0.00 per sec.) -- 重連次數
Throughput:
events/s (eps): 304.7625 -- 每秒事務數
time elapsed: 120.0181s -- 運行時間
total number of events: 36577 -- 總的事務數
Latency (ms):
min: 8.99 -- 最小耗時
avg: 16.40 -- 平均耗時
max: 505.74 -- 最長耗時
95th percentile: 22.28 -- 超過95%平均耗時
sum: 599942.57
Threads fairness: -- 線程公平性統計信息,表示負載的公平性
events (avg/stddev): 7315.4000/8.82
execution time (avg/stddev): 119.9885/0.01
[NOTE]
我們主要關注總事務數和每秒事務數來做對比
5、其他幾種模式簡單測試
測試CPU性能
sysbench cpu --cpu-max-prime=10000 run
I/O測試
準備:sysbench fileio --file-total-size=40G prepare
運行順序寫入測試:sysbench fileio --file-total-size=40G --file-test-mode=seqwr run
運行順序重寫測試:sysbench fileio --file-total-size=40G --file-test-mode=seqrewr run
總結
以上是生活随笔為你收集整理的sysbench mysql oltp_用sysbench进行数据库OLTP基准测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 异步mysql_s
- 下一篇: 树和二叉树的转换代码python_pyt