簡單介紹
- TPC: http://tpc.org/default5.asp
- pgbench: 是 PostgreSQL 自帶的,基于 TPC-B 模型的測試工具,在每個事務中涉及五個 SELECT 、 UPDATE 以及 INSERT 命令,也可以自行編寫腳本,按自己的需求對數據庫進行性能壓力測試。TPC-B 根據系統每秒可以執行多少事務來衡量吞吐量,可以看作是一種數據庫壓力測試。(已于 95 年 6 月 6 日廢棄)
- benchmarksql: 基于 TPC-C 模型的測試工具,TPC-C是以每分鐘事務數 (tpmC) 來衡量在線事務處理(OLTP)的基準,它可以衡量數據庫的性能,也可以衡量硬件性價比,也是廣泛應用并關注的一種C/S環境測試模型。TPC-C模型是以一個在線零售業為例,設計的一種模型。具體架構如下所示:

圖中9個實體對應了TPC-C測試中9個數據表,也對應批發模型中參與的對象。Warehouse是倉庫,District是區域,每個倉庫為10個區域提供商品批發,Customer是客戶,每個區域有3千個客戶,每個客戶會產生至少1個訂單,每個訂單又分為New-Order和Order-line兩部分,New-Order是用來標識訂單是否為新訂單,在完成訂單的發貨操作后,New-Order中的記錄將被刪除,Order-line是訂單中進行批發的商品訂購流水,每個訂單有5到10個交易商品。Stock是用來記錄Warehouse的庫存情況,Item是記錄Warehouse中所存儲的商品。
benchmarksql 的簡單使用
1. 工具下載
benchmarksql-5.0 下載地址: https://udomain.dl.sourceforge.net/project/benchmarksql/benchmarksql-5.0.zip
htop 下載地址: https://github.com/htop-dev/htop/releases
R 語言下載地址: https://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.6.3.tar.gz
PostgreSQL客戶端JDBC連接驅動 下載地址:https://jdbc.postgresql.org/download.html
2. 安裝
# 安裝所需系統包
[root@pgtest3 ~]# yum install -y gcc glibc-headers gcc-c++ gcc-gfortran readline-devel libXt-devel pcre-devel libcurl libcurl-devel ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel java-1.8.0-openjdk ant
# 安裝R語言(generateReport.sh腳本需要) 使R語言支持png圖片,否則報告生成有問題
[root@pgtest3 ~]# yum install -y pango-devel pango libpng-devel cairo cairo-devel
[root@pgtest3 ~]# cd /enmo/soft/
[root@pgtest3 soft]# tar -zxf R-3.6.3.tar.gz
[root@pgtest3 soft]# cd R-3.6.3
[root@pgtest3 R-3.6.3]# ./configure && make && make install
# 安裝htop監控工具
[root@pgtest3 ~]# cd /enmo/soft/
[root@pgtest3 soft]# tar -zxvf htop-3.0.5.tar.gz
[root@pgtest3 soft]# cd htop-3.0.5
[root@pgtest3 htop-3.0.5]# ./autogen.sh && ./configure && make && make install
# 檢查安裝情況(java/ant/htop)
[root@pgtest3 ~]# ant -version
Apache Ant(TM) version 1.9.2 compiled on June 10 2014
[root@pgtest3 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@pgtest3 ~]# R --version
R version 3.6.3 (2020-02-29) -- "Holding the Windsock"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
# 解壓軟件及JDBC驅動
[root@pgtest3 ~]# unzip /enmo/soft/benchmarksql-5.0.zip -d /enmo/app/
# 替換默認的postgresql驅動
[root@pgtest3 ~]# mv /enmo/app/benchmarksql-5.0/lib/postgres/postgresql-9.3-1102.jdbc41.jar /enmo/app/benchmarksql-5.0/lib/postgres/postgresql-9.3-1102.jdbc41.jar.bak
[root@pgtest3 ~]# cp /enmo/soft/postgresql-42.2.20.jar /enmo/app/benchmarksql-5.0/lib/postgres/postgresql.jar
# 使用ant編譯
[root@pgtest3 ~]# cd /enmo/app/benchmarksql-5.0
[root@pgtest3 benchmarksql-5.0]# ant
Buildfile: /enmo/app/benchmarksql-5.0/build.xml
init:
[mkdir] Created dir: /enmo/app/benchmarksql-5.0/build
compile:
[javac] Compiling 11 source files to /enmo/app/benchmarksql-5.0/build
dist:
[mkdir] Created dir: /enmo/app/benchmarksql-5.0/dist
[jar] Building jar: /enmo/app/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar
BUILD SUCCESSFUL
Total time: 1 second
3. 配置props文件(配置文件切忌多余空格,否則會出現各種錯誤)
配置說明
# 數據庫類型,postgres代表我們對PG數據庫進行測試,它支持的數據庫包括PostgreSQL/EnterpriseDB、DB2、Oracle、SQL Server和MySQL。
db=postgres
# 驅動
driver=org.postgresql.Driver
# 修改連接字符串, 包含IP、端口號、數據庫 https://jdbc.postgresql.org/documentation/head/connect.html
conn=jdbc:postgresql://192.168.0.11:26000/benchmarksql?prepareThreshold=1&batchMode=on&fetchsize=10
# 設置數據庫登錄用戶和密碼。
user=bench
password=gauss@123
# 倉庫數,每個Warehouse的數據量大小約為76823.04KB
warehouses=20
# 用于在數據庫中初始化數據的加載進程數量,默認為4 (建議填寫CPU核數)
loadWorkers=4
# 終端數,即:并發客戶端數量, 跟服務端最大work數對應,通常設置為CPU線程總數的2~6倍
terminals=6
# 每個終端(terminal)運行的固定事務數量,當該參數為非0時,runMins參數必須等于零
runTxnsPerTerminal=0
# 要運行指定的分鐘,當該參數為非0時,runTxnsPerTerminal必須等于零
runMins=5
# 每分鐘總事務數
limitTxnsPerMin=0
# 在4.x兼容模式下運行時,設置為True。設置為false以均勻使用整個配置的數據庫。
terminalWarehouseFixed=false
# 以下五個值相加之和為100 (45、43、4、4和4的默認百分比與TPC-C規范匹配)
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
# 測試數據生成目錄,默認無需修改,默認生成在run目錄下面,名字形如my_result_xxxx的文件夾
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
# 操作系統性能收集腳本,默認無需修改,需要操作系統具備有python2環境
osCollectorScript=./misc/os_collector_linux.py
# 操作系統收集操作間隔,默認為1秒
osCollectorInterval=1
# 操作系統收集所對應的主機,如果對本機數據庫進行測試,該參數保持注銷即可,如果要對遠程服務器進行測試,請填寫用戶名和主機名
//osCollectorSSHAddr=omm@192.168.0.11
# 操作系統中被收集服務器的網卡名稱和磁盤名稱
osCollectorDevices=net_eth0 blk_vda
配置示例
[root@pgtest3 ~]# vi /enmo/app/benchmarksql-5.0/run/props.PostgreSQL.5432
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://192.168.58.10:5432/benchmarksql?ApplicationName=benchmark
user=benchmarksql
password=changeme
warehouses=20
loadWorkers=4
terminals=6
runTxnsPerTerminal=0
runMins=2
limitTxnsPerMin=0
terminalWarehouseFixed=false
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
[root@pgtest3 ~]# vi /enmo/app/benchmarksql-5.0/run/props.PostgreSQL.5000
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://192.168.58.20:5000/benchmarksql?ApplicationName=benchmark
user=benchmarksql
password=changeme
warehouses=20
loadWorkers=4
terminals=6
runTxnsPerTerminal=0
runMins=2
limitTxnsPerMin=0
terminalWarehouseFixed=false
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
4. 自定義創建表(可選)
例如,配置tableCreates.sql腳本,調整表的表空間分布(充分利用多塊磁盤的IO)
# vi /opt/benchmarksql-5.0/run/sql.common/tableCreates.sql
------------------------------------------------------------
CREATE TABLESPACE tbs1 location '/gauss/data/tbs1';
CREATE TABLESPACE tbs2 location '/gauss/data/tbs2';
create table bmsql_config (
cfg_name varchar(30) primary key,
cfg_value varchar(50)
);
5. 服務器配置互信(可選)
如果不是針對本機測試且配置了參數osCollectorSSHAddr,則需要配置與數據庫服務器的ssh互信。
# ssh-keygen -t rsa
# ssh-copy-id postgres@192.168.58.10
# ssh-copy-id postgres@192.168.58.11
# ssh-copy-id postgres@192.168.58.12
6. 配置PostgreSQL數據庫
# 創建測試用戶和數據庫
postgres=# CREATE USER benchmarksql WITH ENCRYPTED PASSWORD 'changeme';
postgres=# CREATE DATABASE benchmarksql OWNER benchmarksql;
# 確保放開連接權限
# vi pg_hba.conf
host all all 192.168.58.0/24 md5
# cat postgresql.auto.conf
listen_addresses = '*'
port = 5432
7. BenchmarkSQL導入測試數據
[root@pgtest3 ~]# cd /enmo/app/benchmarksql-5.0/run
# 執行前,請務必將props.PostgreSQL.1000w文件的所有注釋和多余空格刪除,否則可能報錯
[root@pgtest3 run]# ./runDatabaseBuild.sh props.PostgreSQL.5432
8. BenchmarkSQL運行TPCC測試
[root@pgtest3 ~]# cd /opt/benchmarksql-5.0/run
[root@pgtest3 run]# ./runBenchmark.sh props.PostgreSQL.5432
[root@pgtest3 run]# ./runBenchmark.sh props.PostgreSQL.5000
# BenchmarkSQL修改參數后重新運行TPCC測試
# ./runDatabaseDestroy.sh props.PostgreSQL.5432
# ./runDatabaseBuild.sh props.PostgreSQL.5432
# ./runBenchmark.sh props.PostgreSQL.5432
9. runBenchmark.sh運行結果
[root@pgtest3 run]# ./runBenchmark.sh props.PostgreSQL.5432
Term-00, Running Average tpmTOTAL: 24834.29 Current tpmTOTAL: 1641864 Memory Usage: 22MB / 55MB
13:46:06,206 [Thread-4] INFO jTPCC : Term-00,
13:46:06,207 [Thread-4] INFO jTPCC : Term-00,
13:46:06,207 [Thread-4] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 11169.22
13:46:06,207 [Thread-4] INFO jTPCC : Term-00, Measured tpmTOTAL = 24833.05
13:46:06,207 [Thread-4] INFO jTPCC : Term-00, Session Start = 2021-11-04 13:36:06
13:46:06,208 [Thread-4] INFO jTPCC : Term-00, Session End = 2021-11-04 13:46:06
13:46:06,208 [Thread-4] INFO jTPCC : Term-00, Transaction Count = 248349
[root@pgtest3 run]# ./runBenchmark.sh props.PostgreSQL.5000
Term-00, Running Average tpmTOTAL: 21077.55 Current tpmTOTAL: 1385688 Memory Usage: 15MB / 55MB
14:02:16,373 [Thread-2] INFO jTPCC : Term-00,
14:02:16,374 [Thread-2] INFO jTPCC : Term-00,
14:02:16,374 [Thread-2] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 9543.71
14:02:16,374 [Thread-2] INFO jTPCC : Term-00, Measured tpmTOTAL = 21076.02
14:02:16,374 [Thread-2] INFO jTPCC : Term-00, Session Start = 2021-11-04 13:52:16
14:02:16,374 [Thread-2] INFO jTPCC : Term-00, Session End = 2021-11-04 14:02:16
14:02:16,374 [Thread-2] INFO jTPCC : Term-00, Transaction Count = 210781


10. html報告查看
# 檢查R語言是否支持png
# R
> capabilities()
jpeg png tiff tcltk X11 aqua
FALSE TRUE FALSE FALSE FALSE FALSE
http/ftp sockets libxml fifo cledit iconv
TRUE TRUE TRUE TRUE TRUE TRUE
NLS profmem cairo ICU long.double libcurl
TRUE FALSE TRUE TRUE TRUE TRUE
# 生成html報告
[root@pgtest3 run]# ./generateReport.sh my_result_2021-01-19_145218/
[root@pgtest3 ~]# ls /enmo/app/benchmarksql-5.0/run/my_result_2021-01-19_145218
pgbench 的簡單使用
pgbench 不需要安裝,PostgreSQL自帶了。
1. 創建用戶和數據庫
postgres=# CREATE USER pgbench WITH ENCRYPTED PASSWORD 'pgbench';
postgres=# CREATE DATABASE pgbench OWNER pgbench;
2. 初始化數據
$ pgbench -h 192.168.58.10 -p 5432 -U pgbench -d pgbench -i -s 2 -F 80 --partitions=20
2. 只讀測試
$ pgbench -h 192.168.58.20 -p 5001 -U pgbench -d pgbench -P 2 -T 600 -S -c 200 -j 10
3. tpcb-like測試
$ pgbench -h 192.168.58.10 -p 5432 -U pgbench -d pgbench -P 2 -T 600 -b tpcb-like -c 200 -j 2
4. tpcb-like和simple-update按比例測試
$ pgbench -h 192.168.58.20 -p 5000 -U pgbench -d pgbench -P 2 -T 60 -b simple-update@2 -b tpcb-like@8 -c 200 -j 2
最后修改時間:2021-11-05 09:46:31
「喜歡這篇文章,您的關注和贊賞是給作者最好的鼓勵」
關注作者
【版權聲明】本文為墨天輪用戶原創內容,轉載時必須標注文章的來源(墨天輪),文章鏈接,文章作者等基本信息,否則作者和墨天輪有權追究責任。如果您發現墨天輪中有涉嫌抄襲或者侵權的內容,歡迎發送郵件至:contact@modb.pro進行舉報,并提供相關證據,一經查實,墨天輪將立刻刪除相關內容。




