【使用TPCC和TPCH进行性能测试】

TPCC和TPCH介绍

在数据库领域,针对不同的使用场景,TPC组织发布了多项测试标准。其中被业界广泛接受和使用的有TPC-C、TPC-H。了解这些基准测试的区别和应用场景,对于数据库选型和性能评估至关重要。

OLTP与OLAP的基本概念

数据库处理大致可分为两大类:OLTP和OLAP,它们分别对应不同的测试标准。

OLTP(联机事务处理)

全称:On-line Transaction Processing
特点:

  • 高并发且数据量级不大的查询
  • 主要用于管理事务的系统
  • 专注于short on-line-transactions如INSERT,UPDATE,DELETE操作

数据存储:

  • 以实体对象模型存储数据
  • 满足3NF(数据库第三范式)

OLAP(联机分析处理)

全称:On-line Analytical Processing
特点:

  • 查询频率较OLTP系统更低
  • 通常涉及非常复杂的聚合计算

数据存储:

  • 以维度模型存储历史数据
  • 主要存储描述性数据
  • 结构上都是同质的

TPC-C:OLTP基准测试

TPC-C于1992年7月获得批准,是针对OLTP的基准测试。
主要特点:

  • 混合五种不同类型的并发事务及其复杂性
  • 事务要么在线执行成功,要么排队等候延迟执行
  • 数据库由九种类型的表组成,具有广泛的数据记录和数据大小
  • 通过每分钟事务数(tpmC)来衡量性能

应用场景:

TPC-C基准测试描述了批发供应商的活动,不局限于特定的商业活动,而是代表了包含管理、销售、分发产品或者服务的任何行业。

TPC-H详细介绍

定位:

决策支持的基准测试
组成:

一套面向业务的即席查询和并发数据修改
特点:

  • 查询和填充数据库的数据具有广泛的行业相关性
  • 展示决策支持系统处理复杂查询的能力
  • 性能指标:TPC-H每小时综合查询性能指标(QphH@Size)

测试内容:

  • 8张表
  • 22个查询
  • 遵循SQL92标准

应用场景:

面向商品零售业的决策支持系统测试

使用TPCC进行简单测试

一、 benchmarksql配置部署

1、解压工具

bash 复制代码
tar zxvf bms.tar.gz
mv benchmarksql-5.0rc2-westone-v1.2 benchmarksql-5.0

2、修改jTPCC.java

bash 复制代码
vim benchmarksql-5.0/src/client/jTPCC.java
bash 复制代码
	if (iDB.equals("firebird"))
	    dbType = DB_FIREBIRD;
	else if (iDB.equals("oracle"))
	    dbType = DB_ORACLE;
	else if (iDB.equals("postgres"))
	    dbType = DB_POSTGRES;
	else if (iDB.equals("kingbase"))
	    dbType = DB_KINGBASE;
	else if (iDB.equals("oscar"))
	    dbType = DB_OSCAR;
	else if (iDB.equals("dm"))
	    dbType = DB_DM;
	else if (iDB.equals("kdb"))
	    dbType = DB_KDB;
	else
	{
	    log.error("unknown database type '" + iDB + "'");
	    return;
	}

3、修改funcs.sh文件

bash 复制代码
cd   benchmarksql-5.0/run
vi funcs.sh
bash 复制代码
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/*"
            ;;
        kingbase)
            cp="../lib/kingbase/*:../lib/*"
            ;;
        oscar)
            cp="../lib/oscar/*:../lib/*"
            ;;
        dm)
            cp="../lib/dm/*:../lib/*"
            ;;
        kdb)
            cp="../lib/kdb/*:../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|kingbase|oscar|dm|kdb)

4、在lib库中添加dameng目录,放置driver包

5、修改benchmarksql-5.0/run/runDatabaseBuild.sh,去掉AFTER_LOAD中的extraHistID

bash 复制代码
if [ $# -lt 1 ] ; then
    echo "usage: $(basename $0) PROPS [OPT VAL [...]]" >&2
    exit 2
fi
PROPS="$1"
shift
if [ ! -f "${PROPS}" ] ; then
    echo "${PROPS}: no such file or directory" >&2
    exit 1
fi
DB="$(grep '^db=' $PROPS | sed -e 's/^db=//')"
BEFORE_LOAD="tableCreates"
AFTER_LOAD="indexCreates foreignKeys extraHistID buildFinish"
for step in ${BEFORE_LOAD} ; do
    ./runSQL.sh "${PROPS}" $step
done
./runLoader.sh "${PROPS}" $*
for step in ${AFTER_LOAD} ; do
    ./ru

6、在/dm/dmsoft/benchmarksql-5.0/run中编辑props.dm文件,用于达梦压测参数

bash 复制代码
db=dm
driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://127.0.0.1:5236
user=benchmarksql
password=123456789
#数据库连接相关信息
warehouses=100
#压测的仓位数
loadWorkers=48
#加载的工作线程数
terminals=100
#并发的终端数
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
#运行指定的分钟- runTxnsPerTerminal必须等于0
runMins=10
#执行时间
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
#结果目录
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1

二、导入数据

连接数据库,并执行SQL脚本导入数据,导入成功截图如下。

三、装载数据

进入到benchmarksql-5.0/run目录

执行命令:

bash 复制代码
./runLoader.sh props.dm numWarehouses 100

说明:newwarehoures表示仓库数 props.dm是达梦的配置参数文件

装载数据大约10分钟左右,装载成功截图如下:

四、创建索引和收集统计信息

连接数据库执行脚本创建索引,执行成功截图如下:

五、测试-数据预加载

如果是压力测试(数据都可以在内存放下),可以执行下面的语句,把数据预加载到内存:

bash 复制代码
select count(*) from "BENCHMARKSQL"."BMSQL_CUSTOMER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_DISTRICT" union all
select count(*) from "BENCHMARKSQL"."BMSQL_ITEM" union all
select count(*) from "BENCHMARKSQL"."BMSQL_NEW_ORDER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_OORDER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_ORDER_LINE" union all
select count(*) from "BENCHMARKSQL"."BMSQL_STOCK" union all
select count(*) from "BENCHMARKSQL"."BMSQL_WAREHOUSE" union all
select count(*) from "BENCHMARKSQL"."BMSQL_HISTORY"  union all
select count("C_PAYMENT_CNT") from "BENCHMARKSQL"."BMSQL_CUSTOMER";

六、测试-开始测试

执行./runBenchmark.sh props.dm,执行过程截图如下:

执行结果如下图所示:

七、测试-清除数据

进入到benchmarksql-5.0/run目录

bash 复制代码
./runDatabaseDestroy.sh props.dm
相关推荐
旧时光巷1 分钟前
SQL基础⑪ | 约束
数据库·sql·学习·mysql·约束
靡樊16 分钟前
MySQL:内置函数
数据库·mysql·函数
程序员是干活的16 分钟前
高级 JAVA 工程师卷 1
java·大数据·前端·数据库·人工智能
sibylyue20 分钟前
Mysql命令show processlist
数据库·mysql
咕噜企业签名分发-淼淼27 分钟前
MySQL处理并发访问和高负载的关键技术和策略
数据库·mysql
AI新视界28 分钟前
AI赋能DBA:数据库管理与运维的智能化工具全景解析
数据库·人工智能·dba
速易达网络1 小时前
使用phpstudy极简快速安装mysql
数据库·mysql·adb
189228048612 小时前
NX804NX810美光固态闪存NX815NX839
大数据·数据库·人工智能
jnrjian2 小时前
Oracle OMF 非OMF 文件 转化 不需要重建 file#.incarnation#
数据库·sql·oracle
神器阿龙2 小时前
XORM完全指南:Go语言数据库操作从入门到进阶
开发语言·数据库·golang