使用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执行计划注入
  • 保存建表、索引等信息
  • 执行计划前端展示
  • 执行计划对比

部署启动

在本小节中,请按照前期准备下载安装验证成功三个步骤来进行。

前期准备

  1. 准备压测机一台,压测机规格不低于4C8G(避免压测机成为性能瓶颈),且压测机可以访问目标数据库;
  2. 准备一台有浏览器的前端机器(可以和压测机为同一台机器),前端机器需要能访问压测机IP的4121端口;
  3. 在前端机器配置系统的hosts文件,添加 {压测机IP} benchmark-boot 至hosts文件末尾并保存。 (从 V1.2.1 版本开始,不需要配置hosts文件)

注意事项 :

  1. Windows系统的hosts文件存储在C:\Windows\System32\drivers\etc文件夹下(从 V1.2.1 版本开始,不需要配置hosts文件)
  2. 压测机最好与目标数据库在同一个内网中,避免网络成为性能瓶颈

下载安装

请根据压测机的系统选择对应的安装方式。

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)"

离线安装方式

  1. 在可以访问公网的机器上下载安装脚本
  2. 使用编辑器打开安装脚本setup.sh,参考其中的代码,并根据目标机器的硬件架构,使用wget下载对应的benchmark-boot-{架构}-{发布时间}.tar.gz压缩包,之后将压缩包传输到目标机器上
  3. 输入命令tar xzf benchmark-boot.tar.gz解压安装包,执行bash ./install-and-run.sh进行安装(目标机器需要有依赖库的包管理器源)
  1. 请使用 root 账号/root 目录下执行一键安装命令(从 V1.4.0 版本开始,不强制在 /root 目录下安装)
  2. 确保当前环境下没有jre,否则由于启动程序依赖java 11 会启动报错(如果已经存在,则安装完后,通过 alternatives --config java 来切换到jdk11版本,再次启动)
  3. 如果想保留默认jdk版本(如 java8),可以手动修改 install-and-run.sh 脚本,将 Benchmark-Boot 的启动命令手动指定为jdk11路径
  4. 安装依赖时报错和已有依赖冲突:可尝试手动修改 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 首页,证明部署成功。

使用方法


数据库连接配置

配置压测目标数据库实例连接,提交会自动进行连通性检测以及建库模式的判断。

  1. 如果要测Sysbench,就只用填Sysbench库名即可;同个实例要压测多种任务,则分别填写对应库名
  2. 如果对应的数据库还没创建,则只需选择建库模式即可自动创建
  3. 如果使用多地址的load balance模式,可以在主机ip输入框内填入 IP1:PORT1,IP2:PORT2... ;在端口处填入-1

填写配置表格

配置连接

配置成功

连接信息

切换数据源

切换数据源

一键PolarDB-X参数调优

一键参数调优


Sysbench

Sysbench导入

导入Sysbench

Sysbench运行

可以手动输入参数,也可以点击按钮自动填充上一次运行参数:

运行Sysbench

进入运行状态 Sysbench运行状态

Sysbench结果

实时结果(该界面可以停止当前任务) Sysbench实时结果

任务详情与QPS曲线 Sysbench结果详情

结果对比 Sysbench结果对比


TPC-C

TPC-C导入

根据压测机规格与仓数选择合适并发数:

导入TPCC

实时导入进度 TPCC导入进度

TPC-C运行

可以手动输入参数,也可以点击按钮自动填充上一次运行参数: 运行TPCC

TPC-C结果

实时结果 TPCC实时结果

任务详情与QPS曲线 TPCC结果详情

结果对比 TPCC结果对比


TPC-H

TPC-H导入

根据压测机规格与仓数选择合适并发数:

  1. 目前 TPC-H 导入暂不支持并发数控制,对于10GB及以上的规模建议压测机规格不低于8C16GB
  2. TPC-H 导入需要现在压测机上生成对应规模大小的文本数据,请确保压测机可用磁盘空间充足

导入TPCH

实时导入进度 TPCH导入进度

导入完毕后,会自动为表加上相应的索引,并执行analyze table收集统计信息

TPC-H运行

可以运行所有查询(22条)或手动指定查询ID。

  1. 用 id=0 来代表所有查询都使用的HINT,关于HINT的介绍可参考 如何使用HINT
  2. HINT 为选填项,不填写则会查询会按照优化器所选择的计划执行
  3. 若选中所有查询即运行22条 query,若选中指定查询则只运行输入的 query

运行TPCH

查看执行计划 查看执行计划

TPC-H结果

实时结果 TPCH实时结果

TPCH结果对比 TPCH结果对比


转账测试

Transfer导入

填入表大小(即账户数量,每一行记录代表一个账户)以及初始余额(单个账户的初始余额),然后点击提交按钮。

导入转账测试

Transfer运行

填入表大小、初始余额、运行时间、后台转账线程数、余额校验线程数,即可开始运行转账测试,其余参数为选填。 运行转账测试

转账测试暂不支持保留历史记录,仅支持查看实时结果,如果遇到账户余额不一致的情况,运行日志中会有相应的报错。

更新日志


2024-06-12 (V3.2.4)

新功能

  1. TPC-C 支持修改jdbc连接串参数
  2. 支持保存 Sysbench/TPC-C 导入日志文件
  3. TPC-C 支持50万仓以上的导入

bug修复与优化

  1. 对 Sysbench 导入并发度进行合法值限制(如果非表数的整数倍,可能会导致缺数据)
  2. 修复 Sysbench 导入任务被当作 benchmark 任务调度的问题

2024-05-20 (V3.2.3)

新功能

  1. 新增开启主实例列存查询的参数设置
  2. 新增 TPC-H 更新的支持(即 TPC-H refresh function)

bug修复与优化

  1. 修复 Sysbench 在 MySQL 模式下并发导入表时,建表错误的问题
  2. 修复 shell 启动脚本中变量引用错误的问题

2024-03-23 (V3.2.1)

新功能

  1. 新增 SMALL_SCALE_MODE 启动参数,当压测机规格较低时,可手动指定该参数启动Benchmark-Boot
  2. 新增 TPC-H 1T 执行结果

bug修复与优化

  1. 修复 swagger 访问的安全漏洞
  2. 更新转账测试的使用文档

2023-12-01 (V3.2.0)

新功能

  1. TPC-H 支持列存执行计划检测
  2. TPC-H 校验数据完整性支持打印数据集规模大小
  3. TPC-H 结果页面可以查看每条 Query 对应的执行语句
  4. 数据库连接配置展示当前实例类型

bug修复与优化

  1. 修复 TPC-H 列存索引创建语句中region表和nation表的分区数
  2. 修复 TPC-H 导入数据时日志输出丢失的问题
  3. 修复 TPC-H 可能同一时间提交多个任务的问题
  4. 修复停止 Sysbench 的任务后,任务运行状态错误的问题
  5. 修复选择数据库连接时,相同host不同端口出现显示缺失的问题
  6. 优化 AP 查询一键调优的参数设置
  7. 优化 TPC-H analyze table 脚本

2023-11-08 (V3.1.2)

bug修复与优化

  1. 修复运行转账测试时,任务平台获取当前任务失败的报错
  2. 更新转账测试程序二进制包

2023-10-27 (V3.1.1)

新功能

  1. TPC-H 补充创建列存索引语句的指导提示
  2. TPC-H 内置结果正确性检测脚本(目前仅支持命令行)

bug修复与优化

  1. 修复 Sysbench 填充上一次任务组的运行参数
  2. 优化 TPC-H 建表语句的字段类型

2023-10-09 (V3.1.0)

新功能

  1. Sysbench 支持运行任务组,多个 workload场景可以设置不同的并发度排队执行
  2. Sysbench 支持 in 查询场景(支持主键in查询、索引in查询,可设置参数包括 in的数量)

bug修复与优化

  1. 修复流式生成 TPC-H orders、lineitem 表部分数据错误的问题
  2. 优化任务ID生成规则

2023-05-23 (V3.0.0)

新功能

  1. 加入转账测试
  2. TPC-C 支持存储过程模式

bug修复与优化

  1. 导入失败时,优化后台日志报错输出,方便定位原因
  2. 运行 Benchmark 前,检测相同 Benchmark 是否正在运行,避免任务状态错误更新
  3. 前端展示一键调优SQL文本

2023-04-24 (V2.1.0)

新功能

  1. TPC-C 导入数据新增断点续传功能(需手动指定断点起始仓库)

bug修复与优化

  1. 修复 Sysbench 在 DRDS模式下自动勾选单表均衡模式的问题
  2. TPC-C 导入报错后会提前退出(因为数据集可能已经不完整)、且不继续执行添加索引与采集统计信息等操作;并打印出最后一次导入成功的 warehouseID,用于断点续传

2023-04-18 (V2.0.0)

新功能

  1. 对于 Sysbench 与 TPC-C,支持手动刷新查看实时 QPS/tpmC 曲线图
  2. TPC-C 支持记录并展示每类事务的响应时间统计(需手动勾选)
  3. TPC-H 支持流式生成数据并导入,无需预留对应大小的磁盘空间
  4. 支持在 实时数据界面重新运行当前Benchmark

bug修复与优化

  1. 优化在容器中启动压测脚本时,错误判断容器的当前可用内存为物理机内存,从而导致 OOM 的问题
  2. 优化 AUTO库在导入时的写入并行度设置
  3. 优化 TPC-C 建表语句,减少空间占用
  4. 修复 TPC-H 导入数据时,手动停止不生效的问题
  5. 删除部分无效的前端组件

2023-03-21 (V1.5.2)

bug修复与优化

  1. 修复 Sysbench 在 oltp_update_index 场景下运行错误的问题
  2. 修复 TPC-H 无法停止正在运行Query的问题
  3. 修复内置 TPC-C 读取空跨库比例参数报错的问题
  4. Sysbench 中 oltp_update_index 和 oltp_update_non_index 场景支持开启事务

2023-03-20 (V1.5.1)

新功能

  1. Sysbench 导入时支持 AUTO模式 下单表自动打散
  2. TPC-C 支持设置跨库事务比例

bug修复与优化

  1. 修复 TPC-H 在非loadbalance模式下,解析地址失败的导入报错问题
  2. Sysbench 在 DRDS模式 下建表默认分库与AUTO模式对齐

2023-03-13 (V1.5.0)

新功能

  1. 支持在“数据库连接”面板填入 loadBalance 多IP地址
  2. Sysbench 支持以 loadbalance 的方式导入数据与压测
  3. TPC-C 支持以 jdbc loadbalance 的方式导入数据与压测
  4. TPC-H 支持以 jdbc loadbalance 的方式导入数据

优化

  1. 高并发导入时自动调整 NEW SEQUENCE 参数

2023-02-21 (V1.4.1)

bug修复与优化

  1. 修复 Sysbench-其他参数的解析
  2. Sysbench 其他参数新增 report-interval(输出间隔时间)
  3. 优化安装启动脚本报错恢复逻辑、启动前检测当前java版本

2023-02-06 (V1.4.0)

优化

  1. 支持在非 /root 目录下进行一键安装与启动
  2. 优化后台日志滚动与压缩策略
  3. 优化一键安装的脚本输出日志,并检测Benchmark-Boot后台程序是否启动成功
  4. 优化 TPC-C 遇到大量报错时,客户端卡住的问题

2023-02-03 (V1.3.3)

功能

  1. Sysbench、TPC-C 支持根据DN数量自适应设置默认建表分区数(仅Auto模式)
  2. Sysbench 支持自定义建表分区数(仅Auto模式)

2023-02-01 (V1.3.2)

功能

  1. 导入 TPC-C 支持自定义建表分区数(仅Auto模式)
  2. 支持在图形界面上停止 TPC-C 导入/压测进程

2022-11-16 (V1.3.1)

功能

  1. 导入 TPC-H 支持手动设置并发度(按照压测机可使用核数为基准)

bug修复与优化

  1. 减少 Sysbench 编译日志
  2. 修复 BatchTool 导入 TPC-H 数据在 Docker 容器中乱码的情况
  3. 修复 运行 TPC-C 填充上次运行参数,运行时长单位错误的问题
  4. 导入数据前后,自动调整 innodb_commit_cleanout_max_rows 参数

2022-11-10 (V1.3.0)

功能

  1. 支持在“压测结果”面板中记录导入数据任务 ,包含数据导入时长统计
  2. 实时结果输出结束时,添加 “Task has finished” 文本提示

bug修复与优化

  1. 修复 TPC-H 实时结果websocket连接失败问题
  2. 修复 TPC-H 在 arm 下缺少生成数据的二进制程序
  3. 修复 删除数据库连接信息报错的问题
  4. 修复 TPC-C 导入数据报错未在前端打印的问题
  5. 修复 “一键调优”-关闭CPU信息采样中的MPP_METRIC_LEVEL变量值
  6. “一键调优”-调大私有协议并发上限的选项中,添加对XPROTO_MAX_DN_WAIT_CONNECTION的调整
  7. TPC-C 任务的运行时长展示调整为秒,与其他 Benchmark 展示的时长单位保持一致
  8. 减少一键安装脚本的 warning 日志打印

2022-11-07 (V1.2.2)

bug修复与优化

  1. 修改 TPC-C、TPC-H 导入脚本,支持小内存测试机器
  2. 根据压测机剩余可用内存,自动限制最高的并发导入数(TPC-C)
  3. “一键调优”加入建议的数据库规格提示

2022-11-03 (V1.2.1)

bug修复与优化

  1. 无需在前端机器上配置 benchmark-boot 域名,提升用户体验
  2. 压测数据导入时会校验导入参数合法性(避免并发度过高等)
  3. 在导入数据或运行压测时,在前端禁用“校验数据”按钮
  4. 导入 TPC-C 后,会自动 analyze table 收集统计信息

2022-10-26 (V1.2.0)

功能

  1. 支持校验数据集的完整性
  2. 新增一键调优参数项(AHI、table_open_cache等)
  3. arm平台 Docker 镜像发布

bug修复与优化

  1. 修复 TPC-H 生成数据时判断文本是否已经生成过的逻辑
  2. 修复 TPC-C 在普通MySQL模式下的建表语句
  3. TPC-C 连接串调整超时时间,同时关闭SSL

2022-10-21 (V1.1.0)

功能

  1. 支持根据多条件搜索历史任务
  2. 支持批量删除历史任务
  3. 新增 Sysbench 常用参数介绍
  4. 支持直接切换当前使用的库,避免重复填写连接串

bug修复

  1. 修复切换数据库连接时,没有自动更新benchmark的配置文件

2022-10-09 (V1.0.0)

功能

  1. 前端界面加入参数调优的对应SQL显示
  2. 部分不支持功能在前端禁用(全局并发度设置、TPC-H导入并发度设置)
  3. 去除前端背景水印
  4. 优化导入并发度设置提示

bug修复

  1. 修复TPC-H导入时,跳过自动建表选项失效

2022-09-23

功能

  1. 前端新增平台版本显示,并补充一些表格选项提示
  2. 对压测机规格添加了最低限制(>=4C8G)
  3. 脚本新增 Linux 一键安装命令:bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"

bug修复

  1. 修复 TPC-C 运行时JVM报错: stack size too small

results matching ""

    No results matching ""