数据库测试(benchmarkSQL-5.0)
https://docs.opengauss.org/zh/docs/6.0.0-lite/docs/PerformanceTuningGuide/%E6%B5%8B%E8%AF%95MOT-TPCC%E6%80%A7%E8%83%BD.html
TPCC概念
TPC-C基准是衡量联机事务处理(OLTP)系统性能的行业标准基准。它基于一个复杂的数据库和许多不同的事务类型。这些事务类型在此基准上执行。TPC-C基准测试既不依赖硬件,也不依赖软件,因此可以在每个测试平台上运行。基准模型的官方概述,见tpc.org网站(http://www.tpc.org/default5.asp)。
benchmarkSQL安装依赖
# 安装ant,java编译工具
yum install -y ant
# 安装R语言,用于生成可视化报告
根据发行版本安装R语言
一、测试oracle 19c,创建测试用户和表空间并授权
CREATE USER benchmarksql IDENTIFIED BY "password" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT CONNECT TO benchmarksql;
GRANT CREATE PROCEDURE TO benchmarksql;
GRANT CREATE SEQUENCE TO benchmarksql;
GRANT CREATE SESSION TO benchmarksql;
GRANT CREATE TABLE TO benchmarksql;
GRANT CREATE TRIGGER TO benchmarksql;
GRANT CREATE TYPE TO benchmarksql;
GRANT UNLIMITED TABLESPACE TO benchmarksql;
配置run目录下的 props.ora文件
--主要是修改这些
db=oracle
driver=oracle.jdbc.driver.OracleDriver
--SID为实际的sid
conn=jdbc:oracle:thin:@127.0.0.1:1521:<SID>
user=benchmarksql
password=Test_123
warehouses=50 --被测试仓库数
loadWorkers=4 --数据装载并发数(只在初始化时生效),一般和服务器的逻辑CPU核数一样即可。
terminals=20 --设置了在性能测试期间将使用的模拟终端(用户)数量)-数据连接并发数
runTxnsPerTerminal=200 --指定了每个终端在性能测试期间要执行的事务数量
runMins=0 --要运行指定的分钟,当该参数为非0时,runTxnsPerTerminal 必须等于零,否则不跑
limitTxnsPerMin=1000 --每分钟执行的事务数
...
osCollectorDevices=net_ens33 blk_sda --修改网卡名字,网卡名前面要加“net_”;磁盘前面要加“blk_”
--以上参数建议设置terminals 、runMins和limitTxnsPerMin,这样可以全速跑
--配置文件指定 TPC-C 仓库数为 500 仓。
执行ant编译
(1)执行ant编译过程中如果提示:
error: unmappable character for encoding ASCII be able to represent 128 diffent characters.
执行:
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
ant
(2)在编译过程中会遇到很多缺少jar包的警告,可以在$HOME_ORACLE中查找得到。
TPC-C测试
1、创建表:
cd benchmarksql-5.0/run/
./runSQL.sh props.ora tableCreates
2、编译,如果修改过配置需要重新编译,执行ant编译需要在benchmarksql-5.0目录下,需要存在build.xml文件:
[hank@5x44 benchmarksql-5.0]$ ant
Buildfile: /home/oracle/benchmarksql-5.0/build.xml
init:
compile:
[javac] Compiling 11 source files to /home/oracle/benchmarksql-5.0/build
[javac] warning: [path] bad path element "/home/oracle/benchmarksql-5.0/lib/oracle/oraclepki.jar": no such file or directory
[javac] 1 warning
dist:
[jar] Building jar: /home/oracle/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar
BUILD SUCCESSFUL
Total time: 1 second
hank@5x44:~$
3、执行数据装载
./runLoader.sh props.ora
4、创建索引
./runSQL.sh props.ora indexCreates
5、性能测试
./runBenchmark.sh props.ora
Term-00, Running Average tpmTOTAL: 10648.05 Current tpmTOTAL: 2136 Memory Usage: 36MB / 63MB
11:52:35,823 [Thread-11] INFO jTPCC : Term-00,
11:52:35,823 [Thread-11] INFO jTPCC : Term-00,
11:52:35,823 [Thread-11] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 3449.88
11:52:35,823 [Thread-11] INFO jTPCC : Term-00, Measured tpmTOTAL = 9370.62 --每分钟执行的事务数,这里的值是直接证明当前环境的事务之性能力
11:52:35,824 [Thread-11] INFO jTPCC : Term-00, Session Start = 2024-11-19 11:52:34
11:52:35,824 [Thread-11] INFO jTPCC : Term-00, Session End = 2024-11-19 11:52:35
11:52:35,824 [Thread-11] INFO jTPCC : Term-00, Transaction Count = 200 --单位时间内总共执行的事务数( 配置文件中terminals * runTxnsPerTerminal)
6、清理,测试完之后应该清理数据。进入run目录,在终端下执行
./runSQL.sh props.ora indexDrops
./runSQL.sh props.ora tableTruncates
./runSQL.sh props.ora tableDrops
7、生成报告
cd /home/oracle/benchmarksql-5.0/run
./generateReport.sh my_result_2024-11-19_120753/
[oracle@node1 my_result_2024-11-19_120753]$ ls -tlr
total 296
-rw-r--r-- 1 oracle oinstall 972 Nov 19 12:07 run.properties
-rw-r--r-- 1 oracle oinstall 34342 Nov 19 12:16 tpm_nopm.png
drwxr-xr-x 2 oracle oinstall 125 Nov 19 12:16 data
-rw-r--r-- 1 oracle oinstall 39983 Nov 19 12:16 latency.png
-rw-r--r-- 1 oracle oinstall 27886 Nov 19 12:16 cpu_utilization.png
-rw-r--r-- 1 oracle oinstall 26681 Nov 19 12:16 dirty_buffers.png
-rw-r--r-- 1 oracle oinstall 37048 Nov 19 12:16 blk_sda_iops.png
-rw-r--r-- 1 oracle oinstall 33013 Nov 19 12:16 blk_sda_kbps.png
-rw-r--r-- 1 oracle oinstall 37642 Nov 19 12:16 net_ens33_iops.png
-rw-r--r-- 1 oracle oinstall 33755 Nov 19 12:16 net_ens33_kbps.png
-rw-r--r-- 1 oracle oinstall 7141 Nov 19 12:16 report.html
-- 会在my_result_2024-11-19_120753生成一堆png图片和html报告
benchmarkSQL配置参数介绍
1、warehouse:每个仓库负责10个区域,每个区域3000个客户,每个仓库维护100000种商品,每个仓库至多10个终端。BenchmarkSQL数据库每个warehouse大概是100MB,如果该参数设置为10,那么整个数据库大小大概在1G左右。建议将数据库大小设置为物理服务器内存的2~5倍。如果内存为16G建议设置warehouse为328~819之间。
2、terminals:并发连接数,建议设置为服务器的CPU总线程数的2-6倍。如果服务为双核16线程(单核8线程),那么建议配置在32~96之间。
3、db:数据库类型postgres/oracle/mysql等等
4、driver:客户端驱动
5、conn\user\password:数据库连接字符串、用户名、密码
6、runTxnsPerTerminal:每个终端(terminal)运行的固定事务数量,如果该值非零,那么runMins必须设置为0。
7、runMins:要测试的整体时间,单位为:分钟;如果runMins设置为60,那么持续测试1小时的时候结束测试。该值非零时,runTxnsPerTerminal参数必须为0。runMins和runTxnsPerTerminal两个值不能同时为正整数,设置其中一个,另一个必须为0。
8、limitTxnsPerMin=300:每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,如果terminals数量大于limitTxnsPerMin,意味着并发数大于每分钟事务总数,该参数会失效。(测试吞吐量时,需要将此值设置极大(无限大),这样就不会出现某个终端sleep现象。)
9、terminalWarehouseFixed=true:终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。
10、下面5个值得总和必须等于100,默认为:45、43、4、4、4与TPC-C测试定义得比例一致,实际的操作过程,可以调整比例来适应各种场景。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
11、resultDirectory=my_result_%tY-%tm-%td_%tH%tm%tS:测试数据生成目录,默认情况无需更改,默认生成在run目录下面。
12、osCollectorScript=./misc/os_collector_linux.py:操作系统性能收集脚本,默认无需修改,操作系统需要具有python环境
13、osCollectorInterval=1:操作系统收集操作时间间隔,默认为1秒。
14、osCollectorSSHAddr=user@dbhost:操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可;对远程服务器进行测试,填写用户名和主机名。
15、osCollectorDevices=net_eth0 blk_sda:操作系统种被收集的网卡名和磁盘名称。
结果分析
| 事务类型 | 操作比例 | 主要动作 |
| New-Order | 45% | INSERT新订单+订单明细,更新库存UPDATE |
| Payment | 43% | UPDATE客户余额,插入支付历史INSERT |
| Delivery | 4% | UPDATE订单状态,删除相关记录DELETE |
| Order-Status | 4% | SELECT查询客户最新订单状态 |
| Stock-Level | 4% | SELECT低库存预警(按仓库范围查询) |