数据库基准测试纸之-TPC-H(Linux环境)
数据库基准测试纸之-TPC-H改文档用于centos下使用tpc-h生成相应的tpc-h数据主要生成两种数据:insert语句数据和update语句数据1. 到tpc官网上找到并下载tpc-h2. 解压后的文件(cd到dbgen/):answersbcd2.cbcd2.hbm_utils.cBUGSbuild.ccheck_answerscolumn_split.shconfig
改文档用于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文件,记录查询时间
最后就是分析了!!!
更多推荐
所有评论(0)