Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1620868
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-02-17 20:50:37

    从这篇博文开始,我将结合一些例子向大家描述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) |
给主人留下些什么吧!~~