从这篇博文开始,我将结合一些例子向大家描述IQ性能优化的一些方法和技巧。在这里将选择TPC-H标准定义的数据库为实例。为什么选择它呢?主要是因为TPC-H是一个业界公认的数据仓库性能测试基准,比较公正和中立,它定义了8个标准数据库表,一个数据生成工具(dbgen)和一个查询生成工具(qgen)。此外TPC-H定义了不同的数据仓库容量(size),包括:1GB、100GB、300GB、1000GB等。dbgen工具可以通过传递不同的参数值,生成不同数据库尺寸下的表数据,非常灵活。
下面将说明如何通过dbgen工具构建一个1GB尺寸的IQ数据库,日后的博文将以此为基础。
1. TPC-H定义的8个表
下图是TPC-H规范中给出的8个关系表的ER图:
说明:
(1)SF表示“伸缩因子”,取值是1、100、300、1000等。1对应数据库size是1GB,100对应的数据库size是100GB。在后面使用dbgen工具生成表数据时会用到。
(2)有关TPC-H定义的8个表的详细信息参见:
2. 使用dbgen工具生成表的测试数据
(1) 下载dbgen工具源码程序
可以从如下地址下载dbgen工具(也包括qgen,一个查询生成工具)的源程序:
(2) 编译程序,生成dbgen可执行程序(以Linux为例)
a. 把下载的tpch_2_13_0.tar.gz 文件传递到Linux机器上,解压程序包:
gunzip tpch_2_13_0.tar.gz #解压
tar xvf tpch_2_13_0.tar #解包程序。
b. 编写makefile文件
cp makefile.suite makefile
修改makefile:
################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
# SQLSERVER, SYBASE, ORACLE
# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
# SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are: TPCH
DATABASE = SYBASE
#DATABASE = ORACLE
MACHINE = LINUX
WORKLOAD = TPCH
c. 编译程序
make -f makefile或直接执行make
(3) 运行dbgen以生成测试数据
dbgen有不少参数,具体的参数说明,请参见解压后的README文件。假设程序解开后存放在 /home/sybiq15/tpc_h目录下。下面是测试程序的生成步骤:
su - sybiq15
cd /home/sybiq15/tpc_h
mkdir gen_data
cd gen_data
vi gen_db_1g.sh
#下面是sh文件的内容:
## for LINEITEM 6000000 rows(由于数据文件比较大,所以分为4个文件)
../dbgen -s 1 -C 4 -S 1 -T L -f -b ../dists.dss
../dbgen -s 1 -C 4 -S 2 -T L -f -b ../dists.dss
../dbgen -s 1 -C 4 -S 3 -T L -f -b ../dists.dss
../dbgen -s 1 -C 4 -S 4 -T L -f -b ../dists.dss
# for ORDERS 1500000 rows
../dbgen -s 1 -T O -f -b ../dists.dss
# for PART 200000 rows
../dbgen -s 1 -T P -f -b ../dists.dss
# for PARTSUPP 800000 rows
../dbgen -s 1 -T S -f -b ../dists.dss
# for SUPPLIER 10000 rows
../dbgen -s 1 -T s -f -b ../dists.dss
# for CUSTOMER 150000 rows
../dbgen -s 1 -T c -f -b ../dists.dss
# for NATION 25 rows
../dbgen -T n -f -b ../dists.dss
# for REGION 5 rows
../dbgen -T r -f -b ../dists.dss
执行脚本,./db_gen_1g.sh
简要说明:
(1) -s 参数:即前面所提到的“伸缩因子”。这里的1对应于1GB数据库size
(2) -T 参数:指定为特定表生成数据:
O -- orders L -- lineitem P -- part
S -- partsupp
c -- customer s -- supplier
n -- nation r -- region,
(3) -C 参数:表示把生成的数据分为几份。上面脚本中“-C 4”表示把数据分为4个文件存放。
(4) -S 参数:表示第几个文件,例如:“-S 1”表示第1个文件,“-S 2”表示第2个文件。
(5) 生成的数据文件以表名开头,如果是生成的数据只放入一个文件,那么后缀为“.tbl”;如果生成的数据放入多份文件,那么后缀为“.tbl.n”,例如:“.tbl.1”、“.tbl.2”等。下面是gen_db_1g.sh执行后生成的文件名:
customer.tbl
lineitem.tbl.1
lineitem.tbl.2
lineitem.tbl.3
lineitem.tbl.4
nation.tbl
orders.tbl
partsupp.tbl
part.tbl
region.tbl
supplier.tbl
阅读(5247) | 评论(0) | 转发(0) |