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
