YashanDB BenchmarkSQL

1 概述

本章节介绍在 YashanDB 上运行基于 BenchmarkSQL 的 TPC-C 测试的完整流程,帮助学员能够成功运行测试。

2 TPC-C 简介

TPC-C 是 TPC 委员会制定的 OLTP 测试基准,模拟大型商品批发商交易场景,包含 5 类事务:

  • New-Order:新订单(核心指标)
  • Payment:支付
  • Delivery:发货
  • Order-Status:订单状态查询
  • Stock-Level:库存查询

核心指标:tpmC(每分钟处理的新订单数),值越高越好。

3 测试前准备

3.1 环境要求

  • YashanDB 数据库已部署完成
  • JDK 1.8 及以上版本
  • BenchmarkSQL 5.0 工具包
  • YashanDB JDBC 驱动包

3.2 获取工具

3.3 解压工具包

# 解压BenchmarkSQL
tar -xzf benchmarksql-5.0.tar.gz

# 进入目录
cd benchmarksql-5.0

# 查看目录结构
ls -la

4 BenchmarkSQL 配置

4.1 修改 jTPCC.java

cd tpc-c/benchmarksql-5.0
vi src/client/jTPCC.java

dbType = DB_POSTGRES 后添加:

else if (iDB.equals("yashandb"))
dbType = DB_YASHANDB;

4.2 修改 jTPCCConfig.java

vi src/client/jTPCCConfig.java

修改数据库类型定义:

public final static int DB_UNKNOWN = 0,
DB_FIREBIRD = 1, DB_ORACLE = 2, DB_POSTGRES = 3, DB_YASHANDB = 4;

4.3 编译

ant

4.4 添加 YashanDB JDBC 驱动

mkdir -p lib/yashandb/
cp /path/to/yashandb-jdbc-*.jar lib/yashandb/

4.5 修改 funcs.sh

vi run/funcs.sh

在 case 语句中添加 yashandb 支持:

yashandb)
cp="../lib/yashandb/*:../lib/*"
;;

4.6 修改 runDatabaseBuild.sh

vi run/runDatabaseBuild.sh

修改 AFTER_LOAD:

AFTER_LOAD="indexCreates foreignKeys buildFinish"

5 创建测试用户

-- 连接数据库
yasql sys/yasdb_123@192.168.8.2:1688
-- 创建表空间
create tablespace tpcc datafile 'tpcc01' size 200G;

-- 创建TPCC用户
create user tpcc identified by tpcc default tablespace tpcc;

-- 授予DBA权限
grant dba to tpcc;

6 配置测试参数

7.1 创建配置文件

cd run
vi yas_yac.ak

配置文件内容

db=anchor
driver=com.yashandb.jdbc.Driver
# 连接串配置
conn=jdbc:yasdb://192.168.8.2:1688/yashandb
# 测试用户(需提前创建)
user=tpcc
password=tpcc

# ==================== 测试配置 ====================
# 仓数(数据量):1仓≈76.8MB
warehouses=1000
# 数据加载并发数
loadWorkers=50
# TPCC并发数(终端数)
terminals=128

# ==================== 测试时长 ====================
# 每个终端事务数(0表示不限制)
runTxnsPerTerminal=0
# 测试时长(分钟),建议10分钟
runMins=10
# 每分钟事务数限制(0表示不限制)
limitTxnsPerMin=0

# ==================== 事务权重 ====================
# 五种事务占比,和须为100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

# ==================== 其他配置 ====================
# 固定仓数到终端
terminalWarehouseFixed=true
# 结果输出目录
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS

7.2 参数说明

参数 说明 推荐值
warehouses 仓数,决定数据量 100/1000/5000
loadWorkers 数据导入并发数 CPU 核数 ×2~4
terminals TPCC 并发数 CPU 核数 ×2~4
runMins 测试时长(分钟) 10-30

7 执行测试

8.1 数据导入

./runDatabaseBuild.sh yas_yac.ak

集群场景特别说明

  • 集群环境下,建议只保留一个实例进行导数,速度更快
  • 导入完成后,再启动所有实例进行测试

8.2 执行性能测试

# 测试前建议执行checkpoint
alter system checkpoint;

# 执行测试
./runBenchmark.sh yas_yac.ak

8.3 清理测试数据(可选)

./runDatabaseDestroy.sh yas_yac.ak

8 结果解读

测试完成后,结果保存在 my_result_YYYY-MM-DD_HHMMSS/ 目录中:

  • tpmC:每分钟事务数(核心指标)
  • tpmN:每分钟新订单数

9 常见问题

10.1 连接失败

  • 检查数据库服务是否启动
  • 检查连接串 IP、端口、数据库名是否正确
  • 检查用户名密码是否正确

10.2 导入数据慢

  • 集群场景:只保留一个实例导数
  • 调整 loadWorkers 参数

10.3 测试结果不稳定

  • 确保测试环境稳定
  • 延长测试时长
  • 多次测试取平均值