benchmarksql 压测 gbase 数据库完整步骤
一、环境前置要求
- JDK 1.8(必须,高版本容易异常)
java -version
- 安装 ant(编译 BenchmarkSQL)
yum install -y ant
# 麒麟V10
dnf install -y ant
- BenchmarkSQL 5.0 源码包
wget https://downloads.sourceforge.net/project/benchmarksql/benchmarksql-5.0.zip
unzip benchmarksql-5.0.zip
cd benchmarksql-5.0
# 编译
ant
二、放入 GBase8a JDBC 驱动
- 从 GBase 安装目录获取驱动:
$GBASE_BASE/Server/lib/gbase-connector-java-xxx.jar - 放到
benchmarksql-5.0/lib/
cp gbase-connector-java-8.3.xx.jar lib/
三、修改脚本适配 gbase(原生不识别 gbase)
编辑
找到
run/funcs.sh
setCP() 函数,在 case 里增加 gbase 分支gbase)
cp="../lib/*"
;;
完整示例片段:
case "$(getProp db)" in
firebird)
cp="../lib/firebird/*:../lib/*"
;;
oracle)
cp="../lib/oracle/*:../lib/*"
;;
postgres)
cp="../lib/postgres/*:../lib/*"
;;
mysql)
cp="../lib/mysql/*:../lib/*"
;;
gbase)
cp="../lib/*"
;;
esac
同时下方校验 case 增加 gbase:
case "$(getProp db)" in
firebird|oracle|postgres|mysql|gbase)
;;
四、数据库端提前准备(GBase8a 执行)
登录
gccli -uroot-- 创建测试库
CREATE DATABASE tpcc;
-- 创建压测用户并授权
CREATE USER tpcc IDENTIFIED BY 'Tpcc@123456';
GRANT ALL ON tpcc.* TO tpcc;
GBase8a 不要使用 root 远程压测,建议专用 tpcc 账号。
五、编写配置文件 props.gbase
进入
run/ 目录,新建 props.gbase# 数据库类型,固定gbase
db=gbase
# GBase8a驱动类
driver=com.gbase.jdbc.Driver
# 连接串:gcluster节点IP:5258,库名tpcc
conn=jdbc:gbase://192.168.1.100:5258/tpcc?rewriteBatchedStatements=true
user=tpcc
password=Tpcc@123456
# ==========压测核心参数==========
warehouses=20 # 仓库数量,1仓库≈100MB数据;建议>=CPU核心数
loadWorkers=16 # 初始化数据并发线程
terminals=30 # 并发连接数(并发终端)
runTxnsPerTerminal=0
runMins=15 # 压测持续分钟
limitTxnsPerMin=0
# TPC-C标准事务比例(固定不要修改)
terminalWarehouseFixed=true
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
# 结果输出目录
resultDirectory=./result/gbase_%tY-%tm-%td_%tH%tM%tS
参数调优经验:warehouses 太小会出现热点;建议 warehouses ≥ terminals;初始化 loadWorkers 不要超过集群 gnode 总数 * 2。
六、完整执行流程
1. 清理旧表(首次可以跳过,多次测试必须执行)
cd run
./runDatabaseDestroy.sh props.gbase
2. 创建表结构 + 导入 TPCC 初始数据(最耗时阶段)
./runDatabaseBuild.sh props.gbase
日志出现Starting BenchmarkSQL LoadData开始灌入数据;灌入完成会自动创建索引。
3. 正式启动压力测试
./runBenchmark.sh props.gbase
4. 测试结束后清理(可选)
./runDatabaseDestroy.sh props.gbase
七、核心指标解读(重点看这两行)
Measured tpmC (New-Orders) = xxxx.xx
Measured tpmTOTAL = xxxx.xx
- tpmC:TPCC 核心指标,每分钟新订单事务数(性能基准)
- tpmTOTAL:全部事务总和
同时输出各事务平均延迟(Average Latency ms)。所有结果自动保存到
resultDirectory文件夹 csv 日志。
八、GBase8a 数据库压测前建议参数调优(gbase_8a_gcluster.cnf)
max_connections = 2000
gbase_max_heap_size = 2G
gbase_join_buffer_size = 256M
集群执行完
gcadmin reload 或者重启集群生效。九、高频报错解决方案
1. java.lang.ClassNotFoundException: com.gbase.jdbc.Driver
原因:驱动没放对 /funcs.sh 没有配置 gbase 分支
✅ 确认 jar 放在 lib 目录,重新检查 funcs.sh 配置。
2. 连接拒绝、登录失败
- 确认 gcluster 节点端口 5258 防火墙放行
- 确认 tpcc 账号允许远程登录
SELECT user,host FROM gbase.user WHERE user='tpcc';
3. 初始化数据特别慢
- loadWorkers 调低;
- 检查集群磁盘 IO;
- warehouses 不要一次性设置超大(先 20/50 起步)。
4. 大量锁等待、事务超时
GBase8a 是 MPP 列存,不适合极高并发 OLTP;
并发 terminals 不要盲目拉到几百,逐步加压观测延迟。
浙公网安备 33010602011771号