数据库测试(benchmarkSQL-5.0)

数据库测试(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配置参数介绍

https://blog.csdn.net/ffb920724/article/details/112480054

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-Order45%INSERT新订单+订单明细,更新库存UPDATE
Payment43%UPDATE客户余额,插入支付历史INSERT
Delivery4%UPDATE订单状态,删除相关记录DELETE
Order-Status4%SELECT查询客户最新订单状态
Stock-Level4%SELECT低库存预警(按仓库范围查询)

Comments are closed.