写点什么

YashanDB TPC-C 测试介绍

作者:YashanDB
  • 2025-02-28
    广东
  • 本文字数:5372 字

    阅读完需:约 18 分钟

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

TPCC-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 测试工具下载

TPC-C 测试准备

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

修改 jTPCC.java 文件

  1. 在操作系统终端执行如下命令并输入密码,切换至 root 用户。

$ su rootPassword:
复制代码


  1. 执行如下命令,进入 tpc-c 目录。

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

$ vi benchmarksql-5.0/src/client/jTPCC.java
复制代码
  1. 在文件中查找下图内容:

  1. i 进入编辑模式,在 dbType = DB_POSTGRES 后新增如下内容:

else if (iDB.equals("yashandb"))   dbType = DB_YASHANDB;
复制代码



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

修改 jTPCCConfig.java 文件

  1. 执行如下命令,在 vi 编辑器中打开 jTPCCConfig.java 文件:

$ vi benchmarksql-5.0/src/client/jTPCCConfig.java
复制代码
  1. 在文件中查找下图内容:

  1. i 进入编辑模式,将该部分内容修改为如下内容:

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

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


编译源码

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

$ cd benchmarksql-5.0$ antBuildfile: /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 SUCCESSFULTotal time: 1 second
复制代码

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
复制代码
  1. 执行如下命令,通过 vi 编辑器创建文件 props.yashandb:

$ vi props.yashandb
复制代码

3.按 i 进入编辑模式,将如下内容新增至文件中(可根据实际环境进行修改):

db=yashandbdriver=com.yashandb.jdbc.Driverconn=jdbc:yasdb://localhost:1688/yashandbuser=syspassword=syswarehouses=10loadWorkers=2terminals=10runTxnsPerTerminal=0runMins=5limitTxnsPerMin=0terminalWarehouseFixed=truenewOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tSosCollectorScript=./misc/os_collector_linux.pyosCollectorInterval=1
复制代码

其中:

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


修改文件 funcs.sh

  1. 执行如下命令,在 vi 编辑器中打开funcs.sh文件:

$ vi /home/yashan/tpc-c/benchmarksql-5.0/run/funcs.sh
复制代码
  1. i 进入编辑模式,将文档内容替换为如下内容:

# ----# $1 is the properties file# ----PROPS=$1if [ ! -f ${PROPS} ] ; then    echo "${PROPS}: no such file" >&2    exit 1fi
# ----# 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
复制代码

3.修改完成后,按 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/
复制代码

修改 runDatabaseBuild.sh 文件

  1. 执行如下命令,在 vi 编辑器中打开 runDatabaseBuild.sh 文件:

$ vi /home/yashan/tpc-c/benchmarksql-5.0/run/runDatabaseBuild.sh
复制代码
  1. 在文件中查找下图内容:


  1. i 进入编辑模式,将该部分内容修改为如下内容:

AFTER_LOAD="indexCreates foreignKeys buildFinish"
复制代码


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


TPC-C 测试运行

部署 YashanDB 数据库

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

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

数据库参数配置调优

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

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

# Data buffer用于数据块的缓存,其大小会影响数据访问的缓存命中率。建议将规划内存的80%配置为数据缓存区,如果缓存区的大小大于总数据大小可取得最佳性能。DATA_BUFFER_SIZE=200G   # Data buffer的分区数,在大并发的测试场景下,将Data buffer分区可以降低缓存区的锁冲突。_DATA_BUFFER_PARTS=8         # VM Buffer用于保存例如order/group by等数据运算的中间结果,当VM空间不足时会产生内存与SWAP表空间的换入,影响数据库性能表现。# 因此需要配置合理的VM Buffer大小以避免换入的产生。通过视图V$VM中的SWAPPED_OUT_BLOCKS字段可以获取SWAP的次数,当为0时可以取到最佳性能。VM_BUFFER_SIZE=25G     # VM Buffer的分区数,在大并发的测试场景下,将VM buffer可以降低缓存区的锁冲突。VM_BUFFER_PARTS=8# 全局大页内存区大小,在大并发的测试场景下,需要提高配置以避免资源不足。LARGE_POOL_SIZE=1G# 全局执行内存区大小,在大并发的测试场景下,需要提高配置以避免资源不足。WORK_AREA_POOL_SIZE=2G# undo数据的保留时间,用于一致性读或者数据闪回。对于类似TPC-C小事务的场景下,降低undo数据的保留时间可以提高undo分配效率,提升数据库性能。UNDO_RETENTION=15# 会话级CURSOR的数量,在大并发的测试场景下提高配置可以消除全局CURSOR的竞争。_SESSION_RESERVED_CURSORS=64# 增量Checkpoint的时间间隔,后台脏块刷盘会与redo刷盘产生IO争用,在DATA和redo同盘部署的场景下,降低Checkpoint频率可以提升数据库性能。CHECKPOINT_TIMEOUT=900# 指定触发checkpoint的从恢复点到当前redo日志刷盘点的redo大小间隔,通常配置为redo文件总大小的一半。CHECKPOINT_INTERVAL=10G# 共享内存池的大小,提高配置以避免SQL缓存或者元数据缓存的频繁失效。SHARE_POOL_SIZE=2G
复制代码

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

数据库建库配置调优

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 10GSWAP TABLESPACE TEMPFILE '/data2/swap' size 10GSYSTEM TABLESPACE DATAFILE '/data2/system' size 5GSYSAUX TABLESPACE DATAFILE '/data2/sysaux' size 5GDEFAULT TABLESPACE DATAFILE '/data2/users' size 300G;
复制代码

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

清理 TPC-C 数据

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

$ ./runDatabaseDestroy.sh props.yashandb
# ------------------------------------------------------------# Loading SQL file ./sql.common/tableDrops.sql# ------------------------------------------------------------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;
复制代码


TPC-C 数据装载

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

$ ./runDatabaseBuild.sh props.yashandb
# ------------------------------------------------------------# Loading SQL file ./sql.common/tableCreates.sql# ------------------------------------------------------------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));
复制代码


运行 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.020:50:04,563 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+20:50:04,563 [main] INFO jTPCC : Term-00, (c) 2003, Raul Barbosa20:50:04,563 [main] INFO jTPCC : Term-00, (c) 2004-2016, Denis Lussier20:50:04,565 [main] INFO jTPCC : Term-00, (c) 2016, Jan Wieck20:50:04,565 [main] INFO jTPCC : Term-00, +------------------------------------
复制代码


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

发布于: 刚刚阅读数: 4
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB TPC-C测试介绍_数据库_YashanDB_InfoQ写作社区