# databench-t **Repository Path**: caict-databench/databench-t ## Basic Information - **Project Name**: databench-t - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-07-24 - **Last Updated**: 2025-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 事务型数据库性能测试工具 ## 简介 本文以CentOS 7.9操作系统为例介绍事务型数据库性能测试工具的部署过程。 本示例中本地应用数据库的部署位置和安装事务型数据库性能测试工具的机器相同,其IP地址为192.168.100.130。 本示例中业务测试数据库的部署位置的IP地址为192.168.100.131。 ## 安装JDK 事务型数据库性能测试工具需要安装JDK运行。本文以JDK 8u77版本为例介绍JDK的安装过程。 如果操作系统带有OpenJDK,则需要先卸载原有OpenJDK再进行安装。 查询系统已安装的OpenJDK: rpm -qa|grep java 查询到安装的OpenJDK的版本,输出如下所示: java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64 java-1.8.0-openjdk-headless-1.8.0.352.b08-2.el7_9.x86_64 按照查询到的OpenJDK的版本,卸载原有的OpenJDK: rpm -e --nodeps java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.352.b08-2.el7_9.x86_64 在/usr目录下创建名称为java的目录: mkdir /usr/java 把JDK安装包拷贝到该目录下: cp ./jdk-8u77-linux-x64.tar.gz /usr/java/jdk.tar.gz 转移到/usr/java目录并解压缩安装包: cd /usr/java tar -xvf ./jdk.tar.gz 为方便,把解压后出现的目录重命名为jdk: mv ./jdk1.8.0_77 ./jdk 修改环境变量: vi /etc/profile 在该文件末尾添加如下的代码: JAVA_HOME=/usr/java/jdk JRE_HOME=/usr/java/jdk/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH 使更改生效: source /etc/profile 然后可使用如下命令检查是否安装成功: java -version 如果安装成功,可以得到如下所示的输出内容: java version "1.8.0_77" Java(TM) SE Runtime Environment (build 1.8.0_77-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) ## 安装MySQL 事务型数据库性能测试工具需要安装MySQL运行。本文以MySQL 5.7.40版本为例介绍MySQL的安装过程。 CentOS 7操作系统可能需要先卸载原有的mariadb再安装MySQL。 查询系统是否已有mariadb: rpm -qa | grep mariadb 查询到已有mariadb的版本,输出如下: mariadb-libs-5.5.68-1.el7.x86_64 按照查询到的mariadb的版本,卸载已有的mariadb: rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 在/usr/目录下创建名称为mysql的目录: mkdir /usr/mysql 把下载的MySQL安装包拷贝到该目录下: cp ./mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz /usr/mysql/mysql.tar.gz 转移到/usr/mysql目录并解压缩安装包: cd /usr/mysql tar -xvf ./mysql.tar.gz 为方便,把解压后出现的目录重命名为mysql: mv ./mysql-5.7.40-linux-glibc2.12-x86_64 ./mysql 创建名为mysql的用户并修改权限: groupadd mysql useradd -r -g mysql mysql 创建数据目录并赋予权限: mkdir -p /data/mysql chown mysql:mysql -R /data/mysql 修改配置文件: vi /etc/my.cnf 在该文件末尾添加如下的代码: [mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/mysql/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true 转移到/usr/mysql/mysql/bin目录: cd /usr/mysql/mysql/bin 初始化数据库: ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/mysql/mysql/ --datadir=/data/mysql/ --user=mysql --initialize 初始化完成后,打开文件/data/mysql/mysql.err: vi /data/mysql/mysql.err 可以得到如下所示的输出内容: 2023-03-28T08:02:56.726404Z 1 [Note] A temporary password is generated for root@localhost: tbC2k_F:3cbh 其中的tbC2k_F:3cbh为初始化形成的临时密码,本文以该密码为例。该密码为随机生成,请在安装时注意观察初始化过程中生成的临时密码并记录该密码。 为方便,设置service mysql start为启动命令: cp /usr/mysql/mysql/support-files/mysql.server /etc/init.d/mysql 并设置直接使用mysql命令进入数据库: ln -s /usr/mysql/mysql/bin/mysql /usr/bin 启动MySQL并设置随开机启动: service mysql start systemctl enable mysql 进入数据库: mysql -u"root" -p"tbC2k_F:3cbh" 修改root用户的密码,此处以设置密码为MYPASSWORD为例: SET PASSWORD=PASSWORD("MYPASSWORD"); ALTER USER "root"@"localhost" PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES; 开放root用户远程访问: use mysql; update user set host="%" where user="root"; FLUSH PRIVILEGES; 开放3306端口: firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload 查看是否成功开放3306端口: firewall-cmd --query-port=3306/tcp ## 单节点方式部署事务型数据库性能测试工具 建立/data/databench-t目录: cd /data mkdir /data/databench-t 拷贝事务型数据库性能测试工具包到/data/databench-t目录: cp ./databench-t-master.zip /data/databench-t/databench-t-master.zip 转移到/data/databench-t目录并解压缩安装包: cd /data/databench-t unzip ./databench-t-master.zip 这种方式可以安装事务型数据库性能测试工具到/data/databench-t/databench-t-master目录。 进入本地应用数据库,即MySQL: mysql -u"root" -p"MYPASSWORD" 进入MySQL后,执行本地应用数据库初始化脚本: source /data/databench-t/databench-t-master/mysql/sql/local_database.sql; exit; 进入业务测试数据库并执行业务测试数据库初始化脚本: 此处以业务数据库为MySQL为例,在测试时需要按照实际情况操作。 mysql -h"192.168.100.131" -u"root" -p"MYPASSWORD" source /data/databench-t/databench-t-master/mysql/sql/businesstest_database.sql; exit; 配置application.properties文件: vi /data/databench-t/databench-t-master/mysql/application.properties 本示例中application.properties文件内容如下: #business test database main.datasource.driverClassName=com.mysql.jdbc.Driver main.datasource.url=jdbc:mysql://192.168.100.131:3306/findpt?useSSL=false&autoReconnect=true main.datasource.username=root main.datasource.password=MYPASSWORD main.datasource.initSize=30 main.datasource.minSize=30 main.datasource.maxSize=100 main.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource main.mapper.acquireRetryAttempts=10 main.mapper.acquireRetryDelay=1000 main.mapper.breakAfterAcquireFailure=false main.mapper.testConnectionOnCheckin=false main.mapper.idleConnectionTestPeriod=60 main.mapper.preferredTestQuery=select 1 main.mapper.repeat=30 main.mapper.path=file:mapperConfig/*.xml #local database local.datasource.driverClassName=com.mysql.jdbc.Driver local.datasource.url=jdbc:mysql://192.168.100.130:3306/findptlocal?useSSL=false&autoReconnect=true local.datasource.username=root local.datasource.password=MYPASSWORD local.datasource.initSize=30 local.datasource.minSize=30 local.datasource.maxSize=100 local.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource local.mapper.path=file:localMapperConfig/*.xml server.contextPath=/ server.port=8090 server.tomcat.uri-encoding=UTF-8 server.tomcat.max-threads=1000 server.session.timeout=1800 移动到/data/databench-t/databench-t-master/mysql/目录: cd /data/databench-t/databench-t-master/mysql/ 初始化数据: java -Dfile.encoding=utf-8 -jar ./ftdb.jar init 1001 --spring.config.location=./application.properties 可以得到如下所示的输出内容: 应用启动配置加载加载成功! 数据初始化开始 ... 初始化branch(网点)表,记录数 100 ,耗时 103 ms 初始化sjno(科目)表,记录数 1000 ,耗时 148 ms 初始化customer(客户)表,记录数 2000 ,耗时 436 ms 初始化account(账户)表,记录数 10000 ,耗时 856 ms 初始化salarylist(代发工资)表,记录数 25 ,耗时 9 ms 更新汇总科目余额,耗时 183 ms 更新汇总客户资产余额,耗时 118 ms 数据初始化结束,总耗时 5 seconds 731 ms 运行业务测试: java -Dfile.encoding=utf-8 -jar ./ftdb.jar test 1001 1 RR --spring.config.location=./application.properties 可以得到如下所示的输出内容: 应用启动配置加载加载成功! 测试执行开始 开始执行一致性测试:2023-03-28 06:32:22 结束执行一致性测试:2023-03-28 06:32:23 开始执行业务测试:2023-03-28 06:32:23 结束执行业务测试:2023-03-28 06:32:26 开始执行一致性测试:2023-03-28 06:32:34 结束执行一致性测试:2023-03-28 06:32:34 开始执行资产盘点:2023-03-28 06:32:34 结束执行资产盘点:2023-03-28 06:32:34 数据配置: 网点数100,科目数10,客户数2000,账户数10000, 运行配置: 转账交易:5000笔,转账线程:10; 账户查询:5000笔,查询线程:10; 代发工资:25条(13个代发网点,重复代发10次,共125笔),代发线程:5; 账户存款:500笔,存款线程:10; 账户取款:500笔,取款线程:10; 资产盘点:1笔,盘点线程:1; 业务测试明细: 测试总耗时:11 seconds 566 ms 10线程并发转账交易5000笔,总耗时 2 seconds 129 ms,平均耗时 4 ms,最大耗时 109 ms,TPS每秒 2500 10线程并发账户查询5000笔,总耗时 1 second 241 ms,平均耗时 2 ms,最大耗时 95 ms,TPS每秒 5000 10线程并发账户存款500笔,总耗时 322 ms,平均耗时 6 ms,最大耗时 82 ms,TPS每秒 500 10线程并发账户取款500笔,总耗时 332 ms,平均耗时 6 ms,最大耗时 85 ms,TPS每秒 500 5线程并发代发工资125笔(13个代发网点,重复代发10次,共125笔),总耗时 374 ms,平均耗时 14 ms,最大耗时 100 ms 资产盘点成功,总耗时 128 ms ACID测试明细: 一致性测试2笔,成功2笔,失败0笔; 原子性测试1笔,成功1笔,失败0笔; 隔离性测试2笔,成功2笔,失败0笔; 持久性测试1笔,成功1笔,失败0笔; ## 分布式方式部署事务型数据库性能测试工具 本节介绍分布式方式部署事务型数据库性能测试工具的方式。分布式部署的测试工具由一个主节点和数个从节点组成,本示例中介绍一个主节点一个从节点的部署方式,在实际测试中从节点的数量需要按照实际情况调整。本示例中主节点部署位置的IP地址为192.168.100.130,从节点部署位置的IP地址为192.168.100.129。 首先请按照上一节介绍的方式部署测试工具的主节点。 然后移动到从节点的部署位置(本示例为192.168.100.129)安装测试工具的从节点: 如果需要,请先在从节点的部署位置按照上文介绍的方式安装JDK。 建立/data/databench-t目录: mkdir /data/databench-t 拷贝事务型数据库性能测试工具包到/data/databench-t目录: cp ./databench-t-master.zip /data/databench-t/databench-t-master.zip 转移到/data/databench-t目录并解压缩安装包: cd /data/databench-t unzip ./databench-t-master.zip 测试工具安装到/data/databench-t/databench-t-master目录。 配置application.properties文件: vi /data/databench-t/databench-t-master/mysql/application.properties application.properties文件的具体配置方式请参考上一节。 然后启动从节点: cd /data/databench-t/databench-t-master/mysql/ nohup java -Dfile.encoding=utf-8 -jar ftdb.jar --spring.config.location=./application.properties > ./nohup.out 2>&1 & 然后在本地库中配置分布式部署相关配置信息: mysql -h"192.168.100.130" -u"root" -p"MYPASSWORD" use findptlocal; delete from clustercfg; INSERT INTO clustercfg VALUES ('1001', 'master', 'http://192.168.100.130:8090/', '1', '0', null, null, null, null); INSERT INTO clustercfg VALUES ('1002', 'slave', 'http://192.168.100.129:8090/', '1', '0', null, null, null, null); 请注意,示例中从节点的数量和节点的IP地址等相关信息需要按照实际测试需要进行调整。 移动到主节点的部署位置(本示例为192.168.100.130),进行初始化数据操作: cd /data/databench-t/databench-t-master/mysql/ java -Dfile.encoding=utf-8 -jar ftdb.jar masterinit 1001 --spring.config.location=./application.properties 如果初始化数据操作正确进行,可得到和上一节类似的输出结果。 再进行业务测试: cd /data/databench-t/databench-t-master/mysql/ java -Dfile.encoding=utf-8 -jar ftdb.jar mastertest 1001 1 RR --spring.config.location=./application.properties 如果业务测试正确进行,可得到和上一节类似的输出结果。