YashanDB TPC-C测试介绍

简介: 本文介绍了在YashanDB单机数据库上运行基于BenchmarkSQL的TPC-C测试的操作流程与示例。TPC-C是针对OLTP系统的性能测试标准,模拟大型商品批发商的业务场景,包含5类核心事务:New-Order、Payment、Order-Status、Delivery和Stock-Level。文章详细说明了测试工具下载、环境配置(如修改jTPCC.java等文件)、数据装载及清理步骤,并提供了性能调优建议,包括数据库参数和建库配置优化。最后通过执行`runBenchmark.sh`完成测试,结果中的tpmC值反映系统性能,值越高表明性能越优。

本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/TPC-C%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/TPC-C%E6%B5%8B%E8%AF%95.html

本章节将介绍在YashanDB单机数据库上运行基于BenchmarkSQL的TPC-C测试的具体操作及相关示例。

TPC-C测试是针对业务处理系统的规范,该规范由TPC(Transaction Processing Performance Council)委员会制定,测试结果主要取决于流量指标和性价比指标,是最常用的在线事务处理(OLTP)测试基准。

TPC-C测试中模拟了大型商品批发商的交易业务场景,该批发商总共生产销售100000种产品,拥有多个负责不同区域的商品仓库,每个仓库需要为10个分销商进行供货,且每个分销商需要为3000个客户进行服务,对数据库进行TPC-C测试时可根据服务器及数据库的配置对商品仓库的数量进行调整,从而模拟出不同的压力场景。

业务场景中主要包含如下5类事务:

  • Stock-Level:用于表示分销商库存状态,库存较低时需要进行补货。
  • New-Order:用于表示客户提交了一笔新订单,每笔订单平均包括10件产品。
  • Payment:用于表示客户为订单支付费用,更新其账户余额。
  • Delivery:用于表示根据用户提交的订单进行发货。
  • Order-Status:用于表查询用户的最近交易状态。

TPC-C测试工具下载


  • 请自行于BenchmarkSQL官网下载BenchmarkSQL5
  • 请确保服务器中已有JDK1.8及以上版本的JDK。

TPC-C测试准备


对YashanDB进行TPC-C测试前需对Benchmark SQL5进行配置,使之支持YashanDB数据库:

# 修改jTPCC.java文件

  1. 在操作系统终端执行如下命令并输入密码,切换至root用户。
$ su root
Password:
AI 代码解读

Copied!

  1. 执行如下命令,进入tpc-c目录。
$ cd tpc-c
AI 代码解读

Copied!

  1. 执行如下命令,在vi编辑器中打开/home/yashan/tpc-c/benchmarksql-5.0/src/client/jTPCC.java文件,请注意区分大小写:
$ vi benchmarksql-5.0/src/client/jTPCC.java
AI 代码解读

Copied!

  1. 在文件中查找下图内容:

  1. i进入编辑模式,在dbType = DB_POSTGRES后新增如下内容:
else if (iDB.equals("yashandb"))
   dbType = DB_YASHANDB;
AI 代码解读

Copied!

  1. 修改完成后,按Esc,输入:wq保存并退出文件编辑。

# 修改jTPCCConfig.java文件

  1. 执行如下命令,在vi编辑器中打开jTPCCConfig.java文件:
$ vi benchmarksql-5.0/src/client/jTPCCConfig.java
AI 代码解读

Copied!

  1. 在文件中查找下图内容:

  1. i进入编辑模式,将该部分内容修改为如下内容:
public final static int DB_UNKNOWN = 0,
            DB_FIREBIRD = 1,
            DB_ORACLE = 2,
            DB_POSTGRES = 3,
            DB_YASHANDB = 4;
AI 代码解读

Copied!

  1. 修改完成后,按Esc,输入:wq保存并退出文件编辑。

# 编译源码

执行如下命令进入benchmarksql-5.0目录,并执行ant命令进行编译:

$ cd benchmarksql-5.0
$ ant
Buildfile: /home/yashan/tpc-c/benchmarksql-5.0/build.xml

init:

compile:
   [javac] Compiling 11 source files to /home/yashan/tpc-c/benchmarksql-5.0/build

dist:
   [mkdir] Created dir: /home/yashan/tpc-c/benchmarksql-5.0/dist
   [jar] Building jar: /home/yashan/tpc-c/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 1 second
AI 代码解读

Copied!

Note:

如此时返回ant:command not found,可通过执行yum install ant安装ant编译工具。

# 创建文件props.yashandb

  1. 执行如下命令,进入/home/yashan/tpc-c/benchmarksql-5.0/run目录:
$ cd /home/yashan/tpc-c/benchmarksql-5.0/run
AI 代码解读

Copied!

  1. 执行如下命令,通过vi编辑器创建文件props.yashandb:
$ vi props.yashandb
AI 代码解读

Copied!

  1. i进入编辑模式,将如下内容新增至文件中(可根据实际环境进行修改):
db=yashandb
driver=com.yashandb.jdbc.Driver
conn=jdbc:yasdb://localhost:1688/yashandb
user=sys
password=sys
warehouses=10
loadWorkers=2
terminals=10
runTxnsPerTerminal=0
runMins=5
limitTxnsPerMin=0
terminalWarehouseFixed=true
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
AI 代码解读

Copied!

其中:

参数 含义
db 数据库,须与上述修改文件中添加的数据库名称相同
driver 驱动程序文件,须使用YashanDB的JDBC驱动
conn 连接描述符,格式为:conn=jdbc:yasdb://ip:port/database_name
user 数据库用户
password 数据库用户的密码
warehouses 用于指定测试中商品仓库的数量,通常测试场景为100~1000仓
loadWorkers 数据导入的并发数,通常设置为CPU线程总数的2~4倍
terminals 业务运行的并发数,通常设置为CPU线程总数的2~4倍
runTxnsPerTerminal 每个会话运行的固定事务数量,通常配置为0,以runMins限制测试时间
runMins 用于指定测试运行的时间,通常建议压测时间为10~30分钟
limitTxnsPerMin 每秒事务数上限,压测场景下通常设置为0
terminalWarehouseFixed 会话和仓库的绑定模式,通常设置为true
newOrderWeight

paymentWeight
orderStatusWeight
deliveryWeight
stockLevelWeight | 五种事务的占比,所有值的和须为100
标准的业务比率配置为45:43:4:4:4 |
| resultDirectory | 指定存储测试结果的目录。%tY、%tm、%td、%tH、%tM和%tS是时间格式化参数 |
| osCollectorScript | 指定操作系统收集器的脚本路径。通常用于收集操作系统资源使用情况的统计信息,例如CPU使用率、内存使用情况、磁盘I/O等 |
| osCollectorInterval | 指定操作系统收集器脚本运行间隔(单位:秒) |

  1. 修改完成后,按Esc,输入:wq保存并退出文件编辑。

# 修改文件funcs.sh

  1. 执行如下命令,在vi编辑器中打开funcs.sh文件:
$ vi /home/yashan/tpc-c/benchmarksql-5.0/run/funcs.sh
AI 代码解读

Copied!

  1. i进入编辑模式,将文档内容替换为如下内容:
# ----
# $1 is the properties file
# ----
PROPS=$1
if [ ! -f ${PROPS} ] ; then
    echo "${PROPS}: no such file" >&2
    exit 1
fi

# ----
# getProp()
#
#   Get a config value from the properties file.
# ----
function getProp()
{
    grep "^${1}=" ${PROPS} | sed -e "s/^${1}=//"
}

# ----
# getCP()
#
#   Determine the CLASSPATH based on the database system.
# ----
function setCP()
{
    case "$(getProp db)" in
        firebird)
            cp="../lib/firebird/*:../lib/*"
            ;;
        oracle)
            cp="../lib/oracle/*"
            if [ ! -z "${ORACLE_HOME}" -a -d ${ORACLE_HOME}/lib ] ; then
                cp="${cp}:${ORACLE_HOME}/lib/*"
            fi
            cp="${cp}:../lib/*"
            ;;
        postgres)
            cp="../lib/postgres/*:../lib/*"
            ;;
        yashandb)
            cp="../lib/yashandb/*:../lib/*"
            ;;
    esac
    myCP=".:${cp}:../dist/*"
    export myCP
}

# ----
# Make sure that the properties file does have db= and the value
# is a database, we support.
# ----
case "$(getProp db)" in
    firebird|oracle|postgres|yashandb)
        ;;
    "") echo "ERROR: missing db= config option in ${PROPS}" >&2
        exit 1
        ;;
    *)  echo "ERROR: unsupported database type 'db=$(getProp db)' in ${PROPS}" >&2
        exit 1
        ;;
esac
AI 代码解读

Copied!

  1. 修改完成后,按Esc,输入:wq保存并退出文件编辑。

# 添加yashandb java connector驱动

执行此步骤前须确保已安装YashanDB JDBC驱动,本例中驱动包所在路径为/home/yashan/yashandb_jdbc/。

执行如下命令添加驱动:

$ mkdir -p /home/yashan/tpc-c/benchmarksql-5.0/lib/yashandb/
$ cp /home/yashan/yashandb_jdbc/yashandb-jdbc-1.5-SNAPSHOT.jar /home/yashan/tpc-c/benchmarksql-5.0/lib/yashandb/
AI 代码解读

Copied!

# 修改runDatabaseBuild.sh文件

  1. 执行如下命令,在vi编辑器中打开runDatabaseBuild.sh文件:
$ vi /home/yashan/tpc-c/benchmarksql-5.0/run/runDatabaseBuild.sh
AI 代码解读

Copied!

  1. 在文件中查找下图内容:

  1. i进入编辑模式,将该部分内容修改为如下内容:
AFTER_LOAD="indexCreates foreignKeys buildFinish"
AI 代码解读

Copied!

  1. 修改完成后,按Esc,输入:wq保存并退出文件编辑。

TPC-C测试运行


# 部署YashanDB数据库

最佳性能数据会因为测试环境的CPU、内存、IO、网络条件差异而不同,为了让YashanDB在测试环境上达到最佳的TPC-C性能表现,需要根据测试环境的配置进行性能调优,数据库性能调优的详细信息请查阅YashanDB性能调优文档

TPC-C测试调优主要分为参数配置调优和建库配置调优:

数据库参数配置调优

在TPC-C测试场景下主要关注缓存大小与分区、IO参数等性能参数的配置。

以1000仓、256并发的测试场景为例,推荐配置以下性能调优参数:


DATA_BUFFER_SIZE=200G   

_DATA_BUFFER_PARTS=8         


VM_BUFFER_SIZE=25G     

VM_BUFFER_PARTS=8

LARGE_POOL_SIZE=1G

WORK_AREA_POOL_SIZE=2G

UNDO_RETENTION=15

_SESSION_RESERVED_CURSORS=64

CHECKPOINT_TIMEOUT=900

CHECKPOINT_INTERVAL=10G

SHARE_POOL_SIZE=2G
AI 代码解读

Copied!

数据库配置参数的详细说明请查阅配置参数

数据库建库配置调优

Note:

安装部署后,YashanDB将默认创建一个初始数据库,可根据实际需求删除初始数据库(DROP DATABASE)后自定义创建数据库(不适用于标准版或企业版的分布式部署)。

创建数据库时主要关注以下方面:

  • redo文件的大小:redo文件配置太小,在压测场景下容易出现redo追尾的情况,严重影响数据库性能。通过V$SYSTEM_EVENT视图中的“checkpoint completed”的等待事件判断是否出现redo追尾的情况。
  • DATA文件的大小:预占数据空间可以避免数据库运行过程中空间动态扩展对性能的影响,因此为了最佳性能表现,需要初始化足够大的表空间。

在实际使用过程中,也应及时调整redo文件、DATA文件等相关配置,具体可查阅文件管理

如果存储条件允许,请将redo文件与数据文件分盘部署,以减少两者间的IO争用,以1000仓、256并发的测试场景为例,推荐的建库语句如下:

CREATE DATABASE tpcc LOGFILE(
'/data1/redo1' size 20G BLOCKSIZE 512,
'/data1/redo2' size 20G BLOCKSIZE 512,
'/data1/redo3' size 20G BLOCKSIZE 512,
'/data1/redo4' size 20G BLOCKSIZE 512,
'/data1/redo5' size 20G BLOCKSIZE 512,
'/data1/redo6' size 20G BLOCKSIZE 512,
'/data1/redo7' size 20G BLOCKSIZE 512,
'/data1/redo8' size 20G BLOCKSIZE 512,
'/data1/redo9' size 20G BLOCKSIZE 512,
'/data1/redo10' size 20G BLOCKSIZE 512)
UNDO TABLESPACE DATAFILE '/data2/undo' size 10G
SWAP TABLESPACE TEMPFILE '/data2/swap' size 10G
SYSTEM TABLESPACE DATAFILE '/data2/system' size 5G
SYSAUX TABLESPACE DATAFILE '/data2/sysaux' size 5G
DEFAULT TABLESPACE DATAFILE '/data2/users' size 300G;
AI 代码解读

Copied!

数据库配置参数和建库配置调优的详细介绍请查阅数据库配置调优

# 清理TPC-C数据

在/home/yashan/tpc-c/benchmarksql-5.0/run目录中,执行如下命令进行数据清理:

$ ./runDatabaseDestroy.sh props.yashandb




drop table bmsql_config;
drop table bmsql_new_order;
drop table bmsql_order_line;
drop table bmsql_oorder;
drop table bmsql_history;
drop table bmsql_customer;
drop table bmsql_stock;
drop table bmsql_item;
drop table bmsql_district;
drop table bmsql_warehouse;
drop sequence bmsql_hist_id_seq;
AI 代码解读

Copied!

# TPC-C数据装载

目录中执行如下命令进行数据导入:

$ ./runDatabaseBuild.sh props.yashandb




create table bmsql_config (
cfg_name    varchar(30) primary key,
cfg_value   varchar(50)
);
create table bmsql_warehouse (
w_id        integer   not null,
w_ytd       decimal(12,2),
w_tax       decimal(4,4),
w_name      varchar(10),
w_street_1  varchar(20),
w_street_2  varchar(20),
w_city      varchar(20),
w_state     char(2),
w_zip       char(9)
);
AI 代码解读

Copied!

# 运行TPC-C测试

执行如下语句进行TPC-C测试:

$ ./runBenchmark.sh props.yashandb

20:50:04,561 [main] INFO   jTPCC : Term-00,
20:50:04,563 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
20:50:04,563 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
20:50:04,563 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
20:50:04,563 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
20:50:04,563 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
20:50:04,565 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
20:50:04,565 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
AI 代码解读

Copied!

测试结果中的tpmC值表示每分钟内系统处理的新订单个数,即系统最大吞吐量。tpmC值常作为性能指标,值越高表示数据库性能越好。

相关文章
跨库迁移有多难?我们用 YashanDB YMP 做了个测试,效果惊艳了
异构数据库迁移常被视为企业数字化转型中的难题,涉及SQL兼容性、对象依赖顺序与数据一致性等关键环节。YashanDB Migration Platform(YMP)通过实际测试展示了卓越能力,从Oracle到YashanDB的迁移表现超预期。其亮点包括:零脚本全自动迁移逻辑、全面支持复杂对象(如存储过程、触发器)、高性能迁移速度远超传统方案。YMP提供评估、SQL转换、对象迁移、数据校验及可视化全流程管理,为企业平滑过渡至国产数据库提供了可靠选择。
跨库迁移有多难?我们用 YashanDB YMP 做了个测试,效果惊艳了
【YashanDB知识库】druid连接池做断网测试,无法自动重新连接
【YashanDB知识库】druid连接池做断网测试,无法自动重新连接
【YashanDB 知识库】druid 连接池做断网测试,无法自动重新连接
【YashanDB 知识库】druid 连接池做断网测试,无法自动重新连接
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
PolarDB-X 1.0-性能白皮书-PolarDB-X TPC-C测试说明
本文介绍如何使用TPC-C工具测试PolarDB-X数据库的联机交易处理(偏向OLTP能力),您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
1686 0
PolarDB-X 1.0-性能白皮书-PolarDB-X TPC-C测试说明
直播报名中!首次公开OceanBase征战TPC-C测试技术细节全解析
OceanBase技术直播间是OceanBase为用户和技术爱好者带来的系列技术直播课程,由蚂蚁金服一线技术专家分享最全面的理论知识和最实用的技术实践,内容包含数据库内核系列、手把手实操系列和最佳实践系列等。
直播报名中!首次公开OceanBase征战TPC-C测试技术细节全解析
蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化
本篇文章是 OceanBase 的 TPC-C 测试技术解读的最后一篇,为方便阅读,我们将系列文章整理成PDF电子书发布在“蚂蚁金服科技”官方公众号上。
3047 0
OceanBase如何获得TPC-C测试第1名?
阿里妹导读:TPC-C是TPC组织(国际事务性能委员会)制定的关于商品销售的订单创建和订单支付等的基准测试标准,是数据库联机交易处理系统的权威基准测试标准。蚂蚁金服自研的分布式关系数据库OceanBase获得TPC-C测试第一名后,引起了大量关注,今天,我们邀请了OceanBase的核心研发人员对本次测试做专业的技术解读。
6150 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等