通过benchmarksql容器压测SQL Server 2022
·
1 简介
benchmarksql是一款针对Mysql、Postgresql、Oracle数据库的实现TPC-C规范的开源性能压测工具,它原生不支持SQL Server。在github.com上找到一个功能优化过的benchmarksql项目,支持SQL Server,地址如下:
https://github.com/iihero/benchmarksql-v5
基于此项目,我构建出一个容器镜像,方便一键压测。
在本文中,通过一台Centos 7.9的ECS和一个SQL Server服务来演示压测。这台ECS需要安装docker,安装命令如下:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates
yum install docker-ce-cli-20.10.5-3.el7 docker-ce-20.10.5-3.el7 -y
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
2 压测
2.1 准备database
在SQL Server中创建database,这里database名称为benchmarksql。

2.2 准备benchmarksql配置文件
配置文件一般只需要修改连接信息和并发信息。
连接信息包括:SQL Server服务器的IP、账号密码。
并发信息包括:warehouses、loadWorkers、terminals、runMins字段。
配置文件模板如下:
# 数据库类型
db=transact-sql
# JDBC 驱动类名
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
# 连接 URL(关键:替换 databaseName 为你预先创建的空数据库名)
conn=jdbc:sqlserver://<your-sql-server-ip>:1433;databaseName=benchmarksql;encrypt=true;trustServerCertificate=true;
# 数据库用户名和密码
user=<your-user>
password=<your-password>
# 数据规模(仓库数,每个仓库约100MB)
warehouses=10
# 数据加载时的并发线程数
loadWorkers=4
# 测试并发终端数(模拟用户数)
terminals=4
# 测试运行时长(分钟)
runMins=5
# 每个终端的事务数,设为0则使用 runMins
runTxnsPerTerminal=0
# 每分钟事务数限制,0表示无限制
limitTxnsPerMin=0
# TPC-C 标准建议为 true
terminalWarehouseFixed=true
# 五种事务的权重总和必须为100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
# 压测数据写入文件
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
2.3 准备数据
通过benchmarksql的脚本在目标SQL Server中初始化数据。
docker run -it --rm -v /opt/props.mssql:/opt/props.mssql swr.cn-south-1.myhuaweicloud.com/migrator/benchmarksql:mssql bash runDatabaseBuild.sh /opt/props.mssql

2.4 压测
通过benchmarksql的脚本对目标SQL Server进行压测,命令行终端最终会出现一个压测总结报告。
docker run -it --rm -v /opt/props.mssql:/opt/props.mssql swr.cn-south-1.myhuaweicloud.com/migrator/benchmarksql:mssql bash runBenchmark.sh /opt/props.mssql


2.5 清理数据
通过benchmarksql的脚本在目标SQL Server中删除压测数据。
docker run -it --rm -v /opt/props.mssql:/opt/props.mssql swr.cn-south-1.myhuaweicloud.com/migrator/benchmarksql:mssql bash runDatabaseDestroy.sh /opt/props.mssql
3 如何自行构建容器镜像
3.1 步骤1:修改pom.xml
第三方github.com项目(https://github.com/iihero/benchmarksql-v5)原生支持SAP数据库,但maven编译时是无法在中央仓库获取相关依赖,因此需要删除SAP相关的maven依赖,如下图:

为加快构建速度,在pom.xml中引入阿里云maven源
<repositories>
<repository>
<id>public</id>
<name>public</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public-plugin</id>
<name>public-plugin</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
3.2 步骤2:创建Dockerfile
# 使用一个包含 Maven 和 OpenJDK 的基础镜像
FROM maven:3.8-openjdk-8-slim
# 设置工作目录
WORKDIR /benchmarksql
# 将项目源码复制到容器中
COPY . /benchmarksql
# 使用 Maven 编译项目,并跳过测试以加快速度
RUN mvn clean package -DskipTests
# 设置工作目录到 run 文件夹,方便执行脚本
WORKDIR /benchmarksql/target/run
# 容器启动时默认进入 bash,方便手动操作
CMD ["/bin/bash"]
3.3 步骤3:docker build构建
docker build -t "benchmarksql:mssql" .
更多推荐
所有评论(0)