# databench-a **Repository Path**: caict-databench/databench-a ## Basic Information - **Project Name**: databench-a - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-24 - **Last Updated**: 2024-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分析型数据库性能测试工具 ## 简介 本文以CentOS 7.9操作系统为例介绍分析型数据库性能测试工具的部署过程。 本示例中安装分析型数据库性能测试工具的位置的IP地址为192.168.56.201。 本示例中本地应用数据库(简称“本地库”)的部署位置的IP地址为192.168.56.211。本地应用数据库是测试工具存储配置和测试过程中产生的中间数据的数据库,本文建议使用MySQL 5.7.40版本,数据库root密码为“MYPASSWORD”。 本示例中业务测试数据库(简称“业务库”)的部署位置的IP地址为192.168.56.212。业务测试数据库指待测的分析型数据库,本文以MySQL为例,实际测试中需结合待测数据库的实际情况进行操作。 ## 安装JDK 分析型数据库性能测试工具需要安装JDK运行。本文以JDK 8u121版本为例介绍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-8u121-linux-x64.tar.gz /usr/java/jdk.tar.gz 转移到/usr/java目录并解压缩安装包: cd /usr/java tar -xvf ./jdk.tar.gz 为方便,把解压后出现的目录重命名为jdk: mv ./jdk1.8.0_121 ./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_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) ## 安装Node /usr/目录下创建名称为node的目录: mkdir /usr/node 把下载的JDK安装包拷贝到该目录下,以node-v12.16.3-linux-x64.tar.xz为例: cp node-v12.16.3-linux-x64.tar.xz /usr/node/node-v12.16.3-linux-x64.tar.xz 转移到/usr/node目录并解压安装包: cd /usr/node tar -xvf node-v12.16.3-linux-x64.tar.xz 为方便,把解压后出现的目录重命名为node: mv ./node-v12.16.3-linux-x64 ./node 修改环境变量: vi /etc/profile 在该文件末尾添加如下的代码: export NODE_HOME=/usr/node/node export NODE_PATH=$NODE_HOME/lib/node_modules export PATH=$PATH:$NODE_HOME/bin 使更改生效: source /etc/profile 检查Node和NPM的版本: node -v npm -v 所显示的版本信息应与要安装的Node版本一致。 ## 安装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 ## 命令行界面操作方式部署分析型数据库性能测试工具 在进行测试的过程中,测试工具需要生成csv格式的测试数据,请在部署本测试工具之前建立/data目录并挂载足够空间的硬盘。 建立/data/databench-a目录: cd /data mkdir /data/databench-a 拷贝分析型数据库性能测试工具包到/data/databench-a目录: cp ./databench-a-master.zip /data/databench-a/databench-a-master.zip 转移到/data/databench-a目录并解压缩安装包: cd /data/databench-a unzip ./databench-a-master.zip 这种方式可以安装事务型数据库性能测试工具到/data/databench-a/databench-a-master目录。 转移到/data/databench-a/databench-a-master目录 cd /data/databench-a/databench-a-master 对本地库进行初始化,先进入MySQL数据库: mysql -h"192.168.56.211" -u"root" -p"MYPASSWORD" 进入MySQL后,执行本地应用数据库初始化脚本: source ./local_database.sql; exit; 对业务库进行初始化,先进入MySQL数据库: mysql -h"192.168.56.212" -u"root" -p"MYPASSWORD" 进入MySQL后,执行本地应用数据库初始化脚本: source ./businesstest_database.sql; exit; 分析型数据库性能测试具有“金融场景”和“电信场景”两个场景,进行测试时可选择一个场景进行测试,本文以“金融场景”为例。 转移到/data/databench-a/databench-a-master/analyticdb/config_template目录: cd /data/databench-a/databench-a-master/analyticdb/config_template 复制“金融场景.xlsx”文件,命名为“template.xlsx”文件。进行测试时若出于兼容性方面的目的需要对场景中设置的SQL语句的语法进行修改,可修改“template.xlsx”文件中的内容。 cp 金融场景.xlsx template.xlsx 转移到/data/databench-a/databench-a-master/analyticdb/server_workbench目录: cd /data/databench-a/databench-a-master/analyticdb/server_workbench 在该目录中,有“application.properties”和“config.properties”两个配置文件。 其中“application.properties”配置文件是对测试工具进行配置的配置文件,本示例中该配置文件的内容如下: #数据库配置 main.datasource.driverClassName=com.mysql.jdbc.Driver main.datasource.url=jdbc:mysql://192.168.56.211:3306/analyticdb?useSSL=false&autoReconnect=true&characterEncoding=utf8 main.datasource.username=root main.datasource.password=MYPASSWORD #生成数据阶开启段线程数 generate.thread.size=100 #csv数据生成路径 generate.csv.path=/data/analyticdb/csv/ #测试阶段sql语句执行的超时时间(单位分钟) test.sql.timeout=1 #是否开启测试数据校验 cheating.check.switch=false #是否开启分布式数据生成 distribute.generate.switch=false #服务启动端口号 server.port=8089 #导入脚本上传目标机器ip target.server.ip=192.168.56.212 应注意,本配置文件中“数据库配置”部分中IP地址应对应本地库的IP地址,“导入脚本上传目标机器IP”部分中IP地址应对应业务库的IP地址。 另一个配置文件“config.properties”是对测试任务进行配置的配置文件,该配置文件中的内容应根据具体的测试任务的需要进行配置,本示例中该配置文件的内容如下: url:jdbc:mysql://192.168.56.212:3306/precisionmarketing?useSSL=false&autoReconnect=true&characterEncoding=utf8 userName:root password:MYPASSWORD concurrentNum:1 powerSize:1 throughputFlag:true powerFlag:true scene:3 dataSize:user_basic:750,product_basic:25 driverPath:../config_jar/mysql-connector-java-5.1.47.jar driverClassName:com.mysql.jdbc.Driver hostConfigs:192.168.56.212,22,root,MYPASSWORD; 本配置文件各条目的说明如下,请在进行后续操作之前仔细确认各条目是否均已正确配置。若该配置文件配置错误导致后续步骤报错,需要修改配置文件后重新进行任务初始化步骤。 * url:业务库的JDBC连接串 * userName:业务库的用户名 * password:业务库的密码 * concurrentNum:并发数量,用于配置串行测试的重复次数 * powerSize:轮训次数,用于配置串行测试整体循环次数 * throughputFlag:是否开启并发测试 * powerFlag:是否开启串行测试 * scene:场景表ID,对应导入场景步骤中生成的场景表ID * dataSize:数据规模配置,在实际测试中需要按照测试的实际需要进行相应的配置 * driverPath:业务库JDBC驱动JAR包的路径,若被测业务库需要特定的JDBC驱动,可自行上传JAR包并指定路径 * driverClassName:业务库JDBC驱动类名 * hostConfigs:数据库节点信息,需配置业务库各节点机器对应的的信息,用于远程执行数据加载脚本和进行系统指标采集,顺序为IP、端口号、用户名、密码,各项以逗号分隔,各节点的配置用分号间隔 配置好配置文件后,执行导入场景命令: java -jar olap-workbench.jar import ../config_template/template.xlsx 若执行成功,可得到如下输出: 应用启动配置加载加载成功! 启动导入场景配置任务 生成场景表,ID:3 导入完成 此处显示的场景表ID需进行记录,后续步骤将需要按照该ID进行配置。 执行初始化任务命令: java -jar olap-workbench.jar init config.properties 若执行成功,可得到以下输出: 应用启动配置加载加载成功! 开始创建任务 能力测试轮询次数:1 并发测试客户端数量:1 数据规模配置: user_basic:750 product_basic:25 系统负载采集目标主机列表: 192.168.56.212 目标库连接成功! 生成shell加载命令脚本:/data/databench-a/databench-a-master/analyticdb/task_shell/2/load.sh 生成建表语句配置:/data/databench-a/databench-a-master/analyticdb/task_bindsql/2/create.sql 生成查询语句配置:/data/databench-a/databench-a-master/analyticdb/task_bindsql/2/query.sql 生成辅助语句配置:/data/databench-a/databench-a-master/analyticdb/task_bindsql/2/auxiliary.sql 创建任务完成 生成任务ID:2 此处显示的任务ID需进行记录,后续步骤将需要按照该ID进行。 在进行初始化任务后,将在上述路径生成数据加载脚本和各SQL语句配置文件。加载命令脚本的使用方式将在后文相应步骤中进行说明。若有兼容性方面的需要,可对SQL语句配置文件中的SQL语句的语法进行修改,SQL语句配置文件的修改仅对相应的任务生效。 执行生成数据命令,本命令中的“2”需按照实际情况修改为任务初始化步骤中生成的任务ID: java -jar olap-workbench.jar generate 2 若执行成功,可得到以下输出: 应用启动配置加载加载成功! 启动数据生成任务 user_credit_account:3750 rows generated successfully product_extend:25 rows generated successfully user_liabilities:750 rows generated successfully user_social_care_detail:750 rows generated successfully user_family:750 rows generated successfully product_inventory:25 rows generated successfully user_preferences:750 rows generated successfully user_basic:750 rows generated successfully user_social:750 rows generated successfully user_credit_n_account:250 rows generated successfully user_core:750 rows generated successfully user_asset:750 rows generated successfully user_rate:750 rows generated successfully user_card:3750 rows generated successfully business_hall_return:3750 rows generated successfully cust_info:750 rows generated successfully online_banking_return:7500 rows generated successfully user_risk:750 rows generated successfully product_basic:25 rows generated successfully user_medical_detail:750 rows generated successfully business_hall_sales:11250 rows generated successfully user_credit_detail:3750 rows generated successfully user_ploan_loan_balance:11250 rows generated successfully user_behaviour:37500 rows generated successfully online_banking_sales:18750 rows generated successfully user_asset_detail:7500 rows generated successfully user_payment_holding_detail:75000 rows generated successfully flow_account_transaction:37500 rows generated successfully flow_financial_transaction:37500 rows generated successfully 数据生成完成,csv文件位于: /data/analyticdb/csv/2 请手工编写/data/databench-a/databench-a-master/analyticdb/task_shell/2/load.sh数据导入脚本,脚本由测试程序通过远程方式在数据库服务器执行,csv文件要求在数据库服务器中可访问。 请注意上述输出中生成CSV文件的路径位置,请先将生成的CSV文件上传到业务库的部署环境上,然后根据业务库的实际情况填写加载命令脚本,该脚本文件的位置见初始化任务步骤的输出结果: vi /data/databench-a/databench-a-master/analyticdb/task_shell/2/load.sh 加载命令脚本的示例如下,该示例是对应MySQL数据库作为业务库的情况,其他类型的业务库请按照实际的加载命令进行编写: mysql -h"192.168.56.212" -u"root" -p"MYPASSWORD" <