使用Benchmark Boot进行压测
本文介绍了通过 Benchmark Boot 对 PolarDB-X 进行性能压测的流程。
工具介绍
Benchmark Boot 是为 PolarDB-X 开发的一站式压测平台,目前支持的基准测试包括 Sysbench、TPC-C、TPC-H。
功能RoadMap
平台
- 并发导入压测数据
- 支持选项 TP/AP 场景下的自动调优
- 历史任务展示
- 基于图表可视化压测结果详情
- 历史任务可视化对比
- 实时结果展示(QPS/tpmC)
- 指定条件查询历史任务
- 校验数据集完整性
- 自动热身
Sysbench
- 自定义workload
TPC-C
- 自定义建表语句分区数
- 统计事务RT
- 自定义jdbcUrl参数
TPC-H
- 压测机磁盘剩余空间提示
- 导入数据自定义表分区数
- 基于HINT执行计划注入
- 保存建表、索引等信息
- 执行计划前端展示
- 执行计划对比
部署启动
在本小节中,请按照前期准备、下载安装、验证成功三个步骤来进行。
前期准备
- 准备压测机一台,压测机规格不低于4C8G(避免压测机成为性能瓶颈),且压测机可以访问目标数据库;
- 准备一台有浏览器的前端机器(可以和压测机为同一台机器),前端机器需要能访问压测机IP的4121端口;
在前端机器配置系统的hosts文件,添加(从 V1.2.1 版本开始,不需要配置hosts文件){压测机IP} benchmark-boot
至hosts文件末尾并保存。
注意事项 :
Windows系统的hosts文件存储在(从 V1.2.1 版本开始,不需要配置hosts文件)C:\Windows\System32\drivers\etc
文件夹下- 压测机最好与目标数据库在同一个内网中,避免网络成为性能瓶颈
下载安装
请根据压测机的系统选择对应的安装方式。
Linux
验证支持的平台系统:
- x86
- CentOS 7.9, 8.x
- AliOS 3
- Ubuntu 18.x
- arm
- CentOS 8.x
一键在线安装命令:bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"
离线安装方式:
- 在可以访问公网的机器上下载安装脚本
- 使用编辑器打开安装脚本
setup.sh
,参考其中的代码,并根据目标机器的硬件架构,使用wget下载对应的benchmark-boot-{架构}-{发布时间}.tar.gz
压缩包,之后将压缩包传输到目标机器上 - 输入命令
tar xzf benchmark-boot.tar.gz
解压安装包,执行bash ./install-and-run.sh
进行安装(目标机器需要有依赖库的包管理器源)
- 请使用 root 账号
在执行一键安装命令(从 V1.4.0 版本开始,不强制在 /root 目录下安装)/root
目录下- 确保当前环境下没有jre,否则由于启动程序依赖java 11 会启动报错(如果已经存在,则安装完后,通过
alternatives --config java
来切换到jdk11版本,再次启动)- 如果想保留默认jdk版本(如 java8),可以手动修改 install-and-run.sh 脚本,将 Benchmark-Boot 的启动命令手动指定为jdk11路径
- 安装依赖时报错和已有依赖冲突:可尝试手动修改 install-and-run.sh 脚本,去除对应 install 的依赖项,然后重新执行脚本即可
其他不兼容的操作系统可以参考下面的基于Docker镜像的部署方式。
Windows 或 Macos
安装 Docker 后,执行如下命令运行容器:
docker pull polardbx/benchmark-boot:latest
docker run -itd --name 'benchmark-boot' --privileged --net=host -v /etc/localtime:/etc/localtime polardbx/benchmark-boot:latest /usr/sbin/init
验证成功
在前端机器的浏览器上,访问 http://{前端机器IP}:4121/
,出现 Benchmark-Boot 首页,证明部署成功。
使用方法
数据库连接配置
配置压测目标数据库实例连接,提交会自动进行连通性检测以及建库模式的判断。
- 如果要测Sysbench,就只用填Sysbench库名即可;同个实例要压测多种任务,则分别填写对应库名
- 如果对应的数据库还没创建,则只需选择建库模式即可自动创建
- 如果使用多地址的load balance模式,可以在主机ip输入框内填入 IP1:PORT1,IP2:PORT2... ;在端口处填入-1
填写配置表格
配置成功
切换数据源
一键PolarDB-X参数调优
Sysbench
Sysbench导入
Sysbench运行
可以手动输入参数,也可以点击按钮自动填充上一次运行参数:
Sysbench结果
TPC-C
TPC-C导入
根据压测机规格与仓数选择合适并发数:
TPC-C运行
TPC-C结果
TPC-H
TPC-H导入
根据压测机规格与仓数选择合适并发数:
- 目前 TPC-H 导入暂不支持并发数控制,对于10GB及以上的规模建议压测机规格不低于8C16GB
- TPC-H 导入需要现在压测机上生成对应规模大小的文本数据,请确保压测机可用磁盘空间充足
导入完毕后,会自动为表加上相应的索引,并执行
analyze table
收集统计信息
TPC-H运行
可以运行所有查询(22条)或手动指定查询ID。
- 用 id=0 来代表所有查询都使用的HINT,关于HINT的介绍可参考 如何使用HINT
- HINT 为选填项,不填写则会查询会按照优化器所选择的计划执行
- 若选中所有查询即运行22条 query,若选中指定查询则只运行输入的 query
TPC-H结果
转账测试
Transfer导入
填入表大小(即账户数量,每一行记录代表一个账户)以及初始余额(单个账户的初始余额),然后点击提交按钮。
Transfer运行
填入表大小、初始余额、运行时间、后台转账线程数、余额校验线程数,即可开始运行转账测试,其余参数为选填。
转账测试暂不支持保留历史记录,仅支持查看实时结果,如果遇到账户余额不一致的情况,运行日志中会有相应的报错。
更新日志
2024-06-12 (V3.2.4)
新功能
- TPC-C 支持修改jdbc连接串参数
- 支持保存 Sysbench/TPC-C 导入日志文件
- TPC-C 支持50万仓以上的导入
bug修复与优化
- 对 Sysbench 导入并发度进行合法值限制(如果非表数的整数倍,可能会导致缺数据)
- 修复 Sysbench 导入任务被当作 benchmark 任务调度的问题
2024-05-20 (V3.2.3)
新功能
- 新增开启主实例列存查询的参数设置
- 新增 TPC-H 更新的支持(即 TPC-H refresh function)
bug修复与优化
- 修复 Sysbench 在 MySQL 模式下并发导入表时,建表错误的问题
- 修复 shell 启动脚本中变量引用错误的问题
2024-03-23 (V3.2.1)
新功能
- 新增 SMALL_SCALE_MODE 启动参数,当压测机规格较低时,可手动指定该参数启动Benchmark-Boot
- 新增 TPC-H 1T 执行结果
bug修复与优化
- 修复 swagger 访问的安全漏洞
- 更新转账测试的使用文档
2023-12-01 (V3.2.0)
新功能
- TPC-H 支持列存执行计划检测
- TPC-H 校验数据完整性支持打印数据集规模大小
- TPC-H 结果页面可以查看每条 Query 对应的执行语句
- 数据库连接配置展示当前实例类型
bug修复与优化
- 修复 TPC-H 列存索引创建语句中region表和nation表的分区数
- 修复 TPC-H 导入数据时日志输出丢失的问题
- 修复 TPC-H 可能同一时间提交多个任务的问题
- 修复停止 Sysbench 的任务后,任务运行状态错误的问题
- 修复选择数据库连接时,相同host不同端口出现显示缺失的问题
- 优化 AP 查询一键调优的参数设置
- 优化 TPC-H analyze table 脚本
2023-11-08 (V3.1.2)
bug修复与优化
- 修复运行转账测试时,任务平台获取当前任务失败的报错
- 更新转账测试程序二进制包
2023-10-27 (V3.1.1)
新功能
- TPC-H 补充创建列存索引语句的指导提示
- TPC-H 内置结果正确性检测脚本(目前仅支持命令行)
bug修复与优化
- 修复 Sysbench 填充上一次任务组的运行参数
- 优化 TPC-H 建表语句的字段类型
2023-10-09 (V3.1.0)
新功能
- Sysbench 支持运行任务组,多个 workload场景可以设置不同的并发度排队执行
- Sysbench 支持 in 查询场景(支持主键in查询、索引in查询,可设置参数包括 in的数量)
bug修复与优化
- 修复流式生成 TPC-H orders、lineitem 表部分数据错误的问题
- 优化任务ID生成规则
2023-05-23 (V3.0.0)
新功能
- 加入转账测试
- TPC-C 支持存储过程模式
bug修复与优化
- 导入失败时,优化后台日志报错输出,方便定位原因
- 运行 Benchmark 前,检测相同 Benchmark 是否正在运行,避免任务状态错误更新
- 前端展示一键调优SQL文本
2023-04-24 (V2.1.0)
新功能
- TPC-C 导入数据新增断点续传功能(需手动指定断点起始仓库)
bug修复与优化
- 修复 Sysbench 在 DRDS模式下自动勾选单表均衡模式的问题
- TPC-C 导入报错后会提前退出(因为数据集可能已经不完整)、且不继续执行添加索引与采集统计信息等操作;并打印出最后一次导入成功的 warehouseID,用于断点续传
2023-04-18 (V2.0.0)
新功能
- 对于 Sysbench 与 TPC-C,支持手动刷新查看实时 QPS/tpmC 曲线图
- TPC-C 支持记录并展示每类事务的响应时间统计(需手动勾选)
- TPC-H 支持流式生成数据并导入,无需预留对应大小的磁盘空间
- 支持在 实时数据界面重新运行当前Benchmark
bug修复与优化
- 优化在容器中启动压测脚本时,错误判断容器的当前可用内存为物理机内存,从而导致 OOM 的问题
- 优化 AUTO库在导入时的写入并行度设置
- 优化 TPC-C 建表语句,减少空间占用
- 修复 TPC-H 导入数据时,手动停止不生效的问题
- 删除部分无效的前端组件
2023-03-21 (V1.5.2)
bug修复与优化
- 修复 Sysbench 在 oltp_update_index 场景下运行错误的问题
- 修复 TPC-H 无法停止正在运行Query的问题
- 修复内置 TPC-C 读取空跨库比例参数报错的问题
- Sysbench 中 oltp_update_index 和 oltp_update_non_index 场景支持开启事务
2023-03-20 (V1.5.1)
新功能
- Sysbench 导入时支持 AUTO模式 下单表自动打散
- TPC-C 支持设置跨库事务比例
bug修复与优化
- 修复 TPC-H 在非loadbalance模式下,解析地址失败的导入报错问题
- Sysbench 在 DRDS模式 下建表默认分库与AUTO模式对齐
2023-03-13 (V1.5.0)
新功能
- 支持在“数据库连接”面板填入 loadBalance 多IP地址
- Sysbench 支持以 loadbalance 的方式导入数据与压测
- TPC-C 支持以 jdbc loadbalance 的方式导入数据与压测
- TPC-H 支持以 jdbc loadbalance 的方式导入数据
优化
- 高并发导入时自动调整 NEW SEQUENCE 参数
2023-02-21 (V1.4.1)
bug修复与优化
- 修复 Sysbench-其他参数的解析
- Sysbench 其他参数新增 report-interval(输出间隔时间)
- 优化安装启动脚本报错恢复逻辑、启动前检测当前java版本
2023-02-06 (V1.4.0)
优化
- 支持在非 /root 目录下进行一键安装与启动
- 优化后台日志滚动与压缩策略
- 优化一键安装的脚本输出日志,并检测Benchmark-Boot后台程序是否启动成功
- 优化 TPC-C 遇到大量报错时,客户端卡住的问题
2023-02-03 (V1.3.3)
功能
- Sysbench、TPC-C 支持根据DN数量自适应设置默认建表分区数(仅Auto模式)
- Sysbench 支持自定义建表分区数(仅Auto模式)
2023-02-01 (V1.3.2)
功能
- 导入 TPC-C 支持自定义建表分区数(仅Auto模式)
- 支持在图形界面上停止 TPC-C 导入/压测进程
2022-11-16 (V1.3.1)
功能
- 导入 TPC-H 支持手动设置并发度(按照压测机可使用核数为基准)
bug修复与优化
- 减少 Sysbench 编译日志
- 修复 BatchTool 导入 TPC-H 数据在 Docker 容器中乱码的情况
- 修复 运行 TPC-C 填充上次运行参数,运行时长单位错误的问题
- 导入数据前后,自动调整
innodb_commit_cleanout_max_rows
参数
2022-11-10 (V1.3.0)
功能
- 支持在“压测结果”面板中记录导入数据任务 ,包含数据导入时长统计
- 实时结果输出结束时,添加 “Task has finished” 文本提示
bug修复与优化
- 修复 TPC-H 实时结果websocket连接失败问题
- 修复 TPC-H 在 arm 下缺少生成数据的二进制程序
- 修复 删除数据库连接信息报错的问题
- 修复 TPC-C 导入数据报错未在前端打印的问题
- 修复 “一键调优”-关闭CPU信息采样中的
MPP_METRIC_LEVEL
变量值 - “一键调优”-调大私有协议并发上限的选项中,添加对
XPROTO_MAX_DN_WAIT_CONNECTION
的调整 - TPC-C 任务的运行时长展示调整为秒,与其他 Benchmark 展示的时长单位保持一致
- 减少一键安装脚本的 warning 日志打印
2022-11-07 (V1.2.2)
bug修复与优化
- 修改 TPC-C、TPC-H 导入脚本,支持小内存测试机器
- 根据压测机剩余可用内存,自动限制最高的并发导入数(TPC-C)
- “一键调优”加入建议的数据库规格提示
2022-11-03 (V1.2.1)
bug修复与优化
- 无需在前端机器上配置 benchmark-boot 域名,提升用户体验
- 压测数据导入时会校验导入参数合法性(避免并发度过高等)
- 在导入数据或运行压测时,在前端禁用“校验数据”按钮
- 导入 TPC-C 后,会自动 analyze table 收集统计信息
2022-10-26 (V1.2.0)
功能
- 支持校验数据集的完整性
- 新增一键调优参数项(AHI、table_open_cache等)
- arm平台 Docker 镜像发布
bug修复与优化
- 修复 TPC-H 生成数据时判断文本是否已经生成过的逻辑
- 修复 TPC-C 在普通MySQL模式下的建表语句
- TPC-C 连接串调整超时时间,同时关闭SSL
2022-10-21 (V1.1.0)
功能
- 支持根据多条件搜索历史任务
- 支持批量删除历史任务
- 新增 Sysbench 常用参数介绍
- 支持直接切换当前使用的库,避免重复填写连接串
bug修复
- 修复切换数据库连接时,没有自动更新benchmark的配置文件
2022-10-09 (V1.0.0)
功能
- 前端界面加入参数调优的对应SQL显示
- 部分不支持功能在前端禁用(全局并发度设置、TPC-H导入并发度设置)
- 去除前端背景水印
- 优化导入并发度设置提示
bug修复
- 修复TPC-H导入时,跳过自动建表选项失效
2022-09-23
功能
- 前端新增平台版本显示,并补充一些表格选项提示
- 对压测机规格添加了最低限制(>=4C8G)
- 脚本新增 Linux 一键安装命令:
bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"
bug修复
- 修复 TPC-C 运行时JVM报错: stack size too small