数据库基准测试纸之-TPC-H(Linux环境)

改文档用于centos下使用tpc-h生成相应的tpc-h数据
主要生成两种数据:insert语句数据和update语句数据

1. 到tpc官网上找到并下载tpc-h
2. 解压后的文件(cd到dbgen/):
answers
bcd2.c
bcd2.h
bm_utils.c
BUGS
build.c
check_answers
column_split.sh
config.h
dbgen.dsp
dists.dss
driver.c
dss.ddl
dss.h
dss.ri
dsstypes.h
HISTORY
load_stub.c
makefile
makefile.suite
permute.c
permute.h
PORTING.NOTES
print.c
qgen.c
qgen.vcproj
queries
README
reference
release.h
rnd.c
rnd.h
rng64.c
rng64.h
shared.h
speed_seed.c
tests
text.c
tpcd.h
tpch.dsw
tpch.sln
tpch.vcproj
update_release.sh
variants
varsub.c
cp makefile.suite makefile
vim makefile
################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC      = 
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
# Current values for WORKLOAD are:  TPCH
DATABASE= 
MACHINE = 
WORKLOAD = 
#
CFLAGS  = -g -DDBNAME=\"dss\" -D$(MACHINE) -D$(DATABASE) -D$(WORKLOAD) -DRNG_TEST -D_FILE_OFFSET_BITS=64 
LDFLAGS = -O
# The OBJ,EXE and LIB macros will need to be changed for compilation under
#  Windows NT
OBJ     = .o
EXE     =
LIBS    = -lm
#
3. 设置Makefile文件的参数并编译项目

设置CC参数为你的c语言编译器,如:gcc
以下三个参数只能在注释所给的选项中选择
1. DATABASE= 你的数据库(没有的话只能选择最相似的数据库),如:ORACLE
2. MACHINE = 你的机器,如:LINUX
3. WORKLOAD = TPCH
然后保存该makefile
使用make命令编译该项目,出现如下信息(可忽略):

gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o build.o build.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o driver.o driver.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o bm_utils.o bm_utils.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o rnd.o rnd.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o print.o print.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o load_stub.o load_stub.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o bcd2.o bcd2.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o speed_seed.o speed_seed.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o text.o text.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o permute.o permute.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o rng64.o rng64.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64  -O -o dbgen build.o driver.o bm_utils.o rnd.o print.o load_stub.o bcd2.o speed_seed.o text.o permute.o rng64.o -lm
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o qgen.o qgen.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64    -c -o varsub.o varsub.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64  -O -o qgen build.o bm_utils.o qgen.o rnd.o varsub.o text.o bcd2.o permute.o speed_seed.o rng64.o -lm

生成了很多的.o文件和两个重要的文件dbgen和qgen,这两个文件是两个命令,前者用于生成数据库数据文件,后者用于生成数据库查询语句文件
关于两个命令的详细参数见:README

4. 下面给出生成数据文件、数据更新数据、数据库查询文件的具体操作
a) 数据库数据文件:

先看参数:
执行 ./dbgen -h查看命令帮助信息

TPC-H Population Generator (Version 2.17.3 build 0)
Copyright Transaction Processing Performance Council 1994 - 2010
USAGE:
dbgen [-{vf}][-T {pcsoPSOL}]
    [-s <scale>][-C <procs>][-S <step>]
dbgen [-v] [-O m] [-s <scale>] [-U <updates>]

Basic Options
===========================
-C <n> -- separate data set into <n> chunks (requires -S, default: 1)
-f     -- force. Overwrite existing files
-h     -- display this message
-q     -- enable QUIET mode
-s <n> -- set Scale Factor (SF) to  <n> (default: 1) 
-S <n> -- build the <n>th step of the data/update set (used with -C or -U)
-U <n> -- generate <n> update sets
-v     -- enable VERBOSE mode

Advanced Options
===========================
-b <s> -- load distributions for <s> (default: dists.dss)
-d <n> -- split deletes between <n> files (requires -U)
-i <n> -- split inserts between <n> files (requires -U)
-T c   -- generate cutomers ONLY
-T l   -- generate nation/region ONLY
-T L   -- generate lineitem ONLY
-T n   -- generate nation ONLY
-T o   -- generate orders/lineitem ONLY
-T O   -- generate orders ONLY
-T p   -- generate parts/partsupp ONLY
-T P   -- generate parts ONLY
-T r   -- generate region ONLY
-T s   -- generate suppliers ONLY
-T S   -- generate partsupp ONLY

To generate the SF=1 (1GB), validation database population, use:
    dbgen -vf -s 1

To generate updates for a SF=1 (1GB), use:
    dbgen -v -U 1 -s 1

可以看到它可以设置的参数主要有:
先说可能需要依赖的参数:
-S生成第几个文件,这个在-C和-U中需要用到
1. 将数据分成多个文件
2. 覆盖已经存在的文件
3. 设置文件大小
4. 生成Update语句数据文件
5. 生成某个特定的表而不是生成所有的表文件
有的有参数值,有的没有
可运行示例语句生成自己的数据文件或update语句文件

b) 数据库更新数据文件:

在如何生成数据文件中有介绍,就是多加一个参数-U,其他的和数据文件的生成一至。

c) 数据库查询语句文件

在Makefile的时候生成了两个命令,一个是dbgen,另一个是qgen,我们运行qgen即可得到数据库查询语句文件,具体参数和dbgen差不多,具体参照README,下面我们来运行以下看看:

qgen -d

结果:

-- using default substitutions
Open failed for ./1.sql at qgen.c:170

运行后可能出错,这是因为哟一个环境变量没有设置,在README文件中有解释,
在README文件下有这个环境变量需要设置:

13. Environment Variables

Enviroment variables are used to control features of DBGEN and QGEN
which are unlikely to change from one execution to another.

Variable    Default     Action
-------     -------     ------
DSS_PATH    .           Directory in which to build flat files
DSS_CONFIG  .           Directory in which to find configuration files
DSS_DIST    dists.dss   Name of distribution definition file
DSS_QUERY   .           Directory in which to find query templates

可以看到这里有四个环境变量需要设置,这里其他三个自己设置,其中第四个全面指定为dbgen/queries/文件夹

export DSS_QUERY=queries
其中queries文件夹是你的查询语句的模板所在的文件夹,可以自己修改
再次运行qgen -d后将select语句生成并输出到了控制台,我们只需将其重定向到文件中即可。

5. 自定义部分:

自定义部分:

a) 建表语句:tpc-h自带的建标语句和约束语句分别在dss.ddl和dss.ri文件中,可以通过cat命令查看,这两个文件可以自己修改(熟悉SQL语句的应该能看懂里面的内容)
b) 查询语句:查询语句直接输出到控制台了,可以修改重定向后的文件中的查询语句,也可以修改环境变量$DSS_QUERY下的模板文件
c) 插入语句:不会生成插入语句,他只会生成数据,如果数据库支持load命令(oracle等大多都支持),我们可以直接使用load命令进行导入,如果不支持的话我们得自己写,这里我用了spark写了自己的insert文件
d) 更新语句:这里和插入语句一样,不会自己生成update语句。
6. 执行SQL脚本:

一切准备工作做好后就可以执行我们准备好的脚本了

a) 执行dss.ddl和dss.ri创建表和约束
b) 将生成的数据文件通过load或我们自己生成的insert语句导入数据库, 并记录时间
c) 执行我们重定向生成的select文件,记录查询时间

最后就是分析了!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值