benchmarksql 压测 gbase 数据库完整步骤

一、环境前置要求

  1. JDK 1.8(必须,高版本容易异常)
java -version
  1. 安装 ant(编译 BenchmarkSQL)
yum install -y ant
# 麒麟V10
dnf install -y ant
  1. 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 驱动

  1. 从 GBase 安装目录获取驱动:
     
    $GBASE_BASE/Server/lib/gbase-connector-java-xxx.jar
  2. 放到 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. 连接拒绝、登录失败

  1. 确认 gcluster 节点端口 5258 防火墙放行
  2. 确认 tpcc 账号允许远程登录
SELECT user,host FROM gbase.user WHERE user='tpcc';
 

3. 初始化数据特别慢

  • loadWorkers 调低;
  • 检查集群磁盘 IO;
  • warehouses 不要一次性设置超大(先 20/50 起步)。

4. 大量锁等待、事务超时

GBase8a 是 MPP 列存,不适合极高并发 OLTP;
 
并发 terminals 不要盲目拉到几百,逐步加压观测延迟。
posted @ 2026-08-19 09:37  极品大红袍  阅读(13)  评论(0)    收藏  举报