TPCC测试DM

TPCC测试DM

本文介绍如何对达梦数据库进行TPCC基准测试,以及参数方面的调优路径。

测试环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改源码

在官网下载并完成安装BenchmarkSQL,由于该工具默认不支持达梦数据库,需要修改部分源码,编辑benchmarksql-5.0/src/client/jTPCC.java文件,找到以下部分代码并增加达梦相关配置(红色字体部分),使其支持达梦数据库。
if (iDB.equals(“firebird”))
dbType = DB_FIREBIRD;
else if (iDB.equals(“oracle”))
dbType = DB_ORACLE;
else if (iDB.equals(“postgres”))
dbType = DB_POSTGRES;
else if (iDB.equals(“dameng”))
dbType = DB_UNKNOWN;
else
{
log.error(“unknown database type '” + iDB + “'”);
return;
}

修改完源码保存后,进入benchmarksql目录下,直接执行ant命令重新进行编译。执行过程如下:
[root@dmdb01 ~]# cd /opt/benchmarksql-5.0
[root@dmdb01 benchmarksql-5.0]# ant
Buildfile: /opt/benchmarksql-5.0/build.xml

init:

compile:
[javac] Compiling 11 source files to /opt/benchmarksql-5.0/build

dist:
[jar] Building jar: /opt/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 2 seconds
在这里插入图片描述

创建数据库用户

在达梦数据库中创建BENCHMARK用户,密码123456789
CREATE USER benchmark IDENTIFIED BY 123456789;
授权benchmark用户DBA管理员权限
GRANT DBA TO benchmark;
在这里插入图片描述

创建配置文件

在benchmarksql-5.0/run目录下创建达梦的props.dm配置文件,添加以下内容:
vi benchmarksql-5.0/run/props.dm
db=dameng
//数据库类型
driver=dm.jdbc.driver.DmDriver
//驱动程序,每种数据库有对应的驱动
conn=jdbc:dm://192.168.10.121:5236
//连接字符串, IP、端口
user=BENCHMARK
//数据库登录用户
password=123456789
//数据库登录用户的密码
warehouses=10
//该参数用于指定仓库个数,每个warehouse大小大概是100MB,用于控制测试数据量。如果该参数设置为10,整个数据库(9张表)的大小大概在1GB,每个仓库负责十个区域的供货,每个区域3000个客户服务,每个仓库维护100000种商品的库存纪录,每个仓库至多有10个终端
loadWorkers=8
//该参数用于指定测试数据加载时的并行度,即数据库中初始化数据的加载进程数量
terminals=1
//To run specified transactions per terminal- runMins must equal zero
//参数用于指定模拟终端数,即并发客户端数量
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
//该参数用于指定每个终端提交事务数,每个终端运行的固定事务数量。如果该值设置为10,意味着每个终端运行10个事务,如果有32个终端,那整体运行320个事务后。该参数和unMins只能选择设置一个,如果该配置为非0值时,下面的runMins参数必须设置为0
runMins=3
//Number of total transactions per minute
//该参数用于指定运行时间,单位是分钟。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。如果这两个参数设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
//参数用于指定每分钟提交事务数限制
terminalWarehouseFixed=true
//该参数用于指定终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
//五个值的总和必须等于100,默认值为45、43、4、4和4,要与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
newOrderWeight=45
//客户输入一笔新的订货交易,在各个类型的交易在系统中所占的比例45%
paymentWeight=43
//更新客户账户余额以反应其支付状况,在各个类型的交易在系统中所占的比例43%
orderStatusWeight=4
//发货(批处理交易),在各个类型的交易在系统中所占的比例4%
deliveryWeight=4
//查询客户最近交易的状态,在各个类型的交易在系统中所占的比例4%
stockLevelWeight=4
//查询仓库库存状况,在各个类型的交易在系统中所占的比例4%
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
//测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹
osCollectorScript=./misc/os_collector_linux.py
//操作系统性能收集脚本,默认无需修改,需要操作系统具备有python环境
osCollectorInterval=1
//操作系统收集操作间隔,默认为1秒
//osCollectorSSHAddr=user@dbhost
//操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名。
//osCollectorDevices=net_eth0 blk_sda
//操作系统中被收集服务器的网卡名称和磁盘名称

其中,基准测试要求交易类型的比例必须为:
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

修改脚本

编辑benchmarksql-5.0/run下的funcs.sh脚本文件,找到以下部分代码并添加dm数据库类型(红色字体部分)。
function setCP()
{
case “ ( g e t P r o p d b ) " i n f i r e b i r d ) c p = " . . / l i b / f i r e b i r d / ∗ : . . / l i b / ∗ " ; ; d a m e n g ) c p = " . . / l i b / d a m e n g / ∗ : . . / l i b / ∗ " ; ; o r a c l e ) c p = " . . / l i b / o r a c l e / ∗ " i f [ ! − z " (getProp db)" in firebird) cp="../lib/firebird/*:../lib/*" ;; dameng) cp="../lib/dameng/*:../lib/*" ;; oracle) cp="../lib/oracle/*" if [ ! -z " (getPropdb)"infirebird)cp="../lib/firebird/:../lib/";;dameng)cp="../lib/dameng/:../lib/";;oracle)cp="../lib/oracle/"if[!z"{ORACLE_HOME}” -a -d O R A C L E H O M E / l i b ] ; t h e n c p = " {ORACLE_HOME}/lib ] ; then cp=" ORACLEHOME/lib];thencp="{cp}: O R A C L E H O M E / l i b / ∗ " f i c p = " {ORACLE_HOME}/lib/*" fi cp=" ORACLEHOME/lib/"ficp="{cp}:…/lib/"
;;
postgres)
cp="…/lib/postgres/
:…/lib/"
;;
esac
myCP=".😒{cp}:…/dist/
"
export myCP
}

#----
Make sure that the properties file does have db= and the value
#is a database, we support.
#----
case “$(getProp db)” in
firebird|oracle|postgres|dameng)
;;
“”) echo “ERROR: missing db= config option in KaTeX parse error: Expected 'EOF', got '&' at position 11: {PROPS}" >&̲2 exit …(getProp db)’ in ${PROPS}” >&2
exit 1
;;
esac

添加驱动包

在benchmarksql-5.0/lib目录下创建一个dameng目录,将达梦数据库对应的jdbc驱动拷贝至该目录下,例如达梦数据库安装在/home/dmdba/dmdbms下,而BenchmarkSQL工具安装在目录/opt下,则如下拷贝:
cp -r /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver* /opt/benchmarksql-5.0/lib/dameng/

基准测试流程

准备测试环境所需的表,先创建表,再装载数据,最后创建索引
在benchmarksql-5.0/run/目录下执行以下命令:

  1. 执行建表工具
    ./runSQL.sh props.dm tableCreates
    在这里插入图片描述

若遇到下面问题,可通过更换jdk版本至11及以上解决
在这里插入图片描述

  1. 执行数据装载工具
    ./runLoader.sh props.dm
    在这里插入图片描述

  2. 创建索引
    ./runSQL.sh props.dm indexCreates
    在这里插入图片描述

  3. 执行测试工具
    ./runBenchmark.sh props.dm
    在这里插入图片描述

  4. 清理数据
    测试完之后应该清理数据。执行:
    ./runSQL.sh props.dm indexDrops ##删除索引
    ./runSQL.sh props.dm tableTruncates ##清空表
    ./runSQL.sh props.dm tableDrops ##删除表

  5. 测试结果
    测试完之后结果会保存在benchmarksql-5.0/run目录下的“my_result_日期_时间”文件夹中。
    在这里插入图片描述

至此,已完成达梦数据库的BenchmarkSQL基准测试。

测试调整Buffer参数

Buffer参数设置不合理

修改buffer参数,调整为500
在这里插入图片描述
在这里插入图片描述

执行tpcc测试,测试结果如下图
在这里插入图片描述

测试过程中查看v$bufferpool视图
在这里插入图片描述

从中可以看到,free 项为0,N_DISCARD64项有非零出现,表明缓冲区经常淘汰,这是由于缓冲区参数设置太小导致的频繁淘汰现象,需要调整对应缓冲区的参数。

Buffer参数设置合理

buffer是系统缓冲区大小,如果数据量小于内存,则设置为数据量大小;否则设置为总内存的 2/3 比较合适。

我们先修改Buffer参数值为1000M,查看调整后的测试表现,可通过不断调试找到最合适的优化值。
在这里插入图片描述

重启数据库,使参数生效
在这里插入图片描述
在这里插入图片描述

测试结果
在这里插入图片描述

测试过程中查看v$bufferpool视图
在这里插入图片描述

缓冲区的free 较大,说明缓冲区都较为空闲,没有发生缓冲区淘汰。

测试结果

通过将buffer值从500M调整为1000M,我们可以看到系统缓冲区都较为空闲,没有发生缓冲区淘汰的现象,这表明1000M是比较合适的参数值,相比buffer设置为500M,测试的性能表现也有所提升。

更多详细资料可前往达梦社区:https://eco.dameng.com

### 南京大学环境下的数据库TPCC性能基准测试配置与执行 #### 配置与准备阶段 为了在南京大学的环境中成功完成基于BenchmarkSQL的达梦数据库TPCC性能测试,需先确保所有必要的软件依赖已正确安装并编译了BenchmarkSQL工具[^1]。 对于具体的`props`文件配置部分,该文件用于定义连接到目标数据库的各项参数以及测试的具体设定。例如: ```properties driver=com.dameng.jdbc.Driver conn=jdbc:dm://localhost:5236/ username=dbuser password=dbpass warehouses=10 terminals=10 ``` 上述示例展示了如何指定驱动器名称、连接字符串、用户名密码等基本信息,并设定了仓库数(warehouses)和终端数目(terminals),这些数值应依据实际需求调整。 #### 数据库用户权限设置 创建具有适当权限的新用户账户非常重要,这一步骤通常涉及授予特定角色或直接赋予所需的最小化权限集给用来运行测试的应用程序用户。具体命令可能如下所示(针对达梦数据库): ```sql CREATE USER dbuser IDENTIFIED BY dbpass; GRANT CONNECT, RESOURCE TO dbuser; -- 授予更多必要权限... ``` 此过程确保了安全性和隔离性的同时也满足了BenchmarkSQL正常工作的最低要求。 #### 执行压力测试 当一切就绪之后就可以开始装载测试所需的数据并启动正式的压力测试流程了。有两种主要方式可以开展这项工作——按照固定的事务数量或者限定的时间长度来进行测量;两种模式各有优劣取决于评估目的的不同而定。 最后,在整个过程中应当密切关注系统的响应情况以便及时发现潜在瓶颈所在之处,并最终汇总分析所得的结果形成有价值的报告文档供后续改进参考之用。 #### 测试结果解读 BenchmarkSQL通过模拟一系列典型的业务交易活动来衡量不同类型的负载下数据库的表现能力,包括但不限于新订单录入、付款处理等功能模块。由于采用了接近真实的场景建模技术,所以能够更准确地反映出被测对象的实际承载力水平[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值