技术开发 频道

主流行式数据库评测:DB2 9.7企业版

  5.数据查询

  需要说明的是,虽然TPC-H测试中每个表都有唯一键,表之间有引用关系,TPC-H规范并不要求测试表定义中必须包含主键和外键定义。而允许测试的数据库自行决定。我们在测试过程中发现,如果不创建这些主键和外键,即使做了统计分析,某些查询的时间非常长,估计是优化器没有办法得出良好的执行计划。因此,以下测试均在创建主键和外键后进行。原始tpch脚本dss.ri中创建外键的语法不符合DB2的格式要求,需要做相应的修改。

[db2inst1@aix:/arch/IBM]#>db2 -tvf /tmp/db2_dss.ri

ALTER TABLE REGION ADD PRIMARY KEY (R_REGIONKEY)
DB20000I  The SQL command completed successfully.

ALTER TABLE NATION ADD PRIMARY KEY (N_NATIONKEY)
DB20000I  The SQL command completed successfully.

ALTER TABLE NATION ADD CONSTRAINT NATION_FK1 FOREIGN KEY (N_REGIONKEY) references REGION
DB20000I  The SQL command completed successfully.

   为了比较不同条件下的查询结果,我们进行了4种组合的查询。分别是:单进程不压缩,并行不压缩,单进程压缩,并行压缩,每种测试做2遍,取较快的一遍的结果。

  测试工具选用db2batch。

  虽然理论上也可以用clpplus执行tpch的查询脚本,但目前版本的clpplus在处理%、$等特殊字符方面还有缺陷,因此不完全适用,还是采用db2特有的db2batch工具。在修改完成的包含22个查询语句的sql脚本前端和每个查询前面加上如下参数,就可以方便地进行多次测试。

--#SET PERF_DETAIL 1 TIMESTAMP
--
#COMMENT Q1

   执行测试的命令行如下:

-sh-3.2$db2batch -d sample -f /user1/ibm/q01-11.txt > /tmp/q01-11.log

   以下是调整过的某次执行的报告。删除了一些多余信息。

* Summary Table:

Type      
Number Reps Total Time (s) Min Time (s)   Arithmetic Mean  Row Fetch Row Output
--------- ------ ---- -------------- -------------- ---------------  --------- ----------
Statement      1    1     288.889663     288.889663      288.889663          4          4
Statement      
2    1      30.026864      30.026864       30.026864        100        100
Statement      
3    1     132.680303     132.680303      132.680303         10         10
Statement      
4    1     152.142768     152.142768      152.142768          5          5
Statement      
5    1     167.999306     167.999306      167.999306          5          5
Statement      
6    1      38.923512      38.923512       38.923512          1          1
Statement      
7    1      68.086120      68.086120       68.086120          4          4
Statement      
8    1       0.000000       0.000000        0.000000          0          0
Statement      
9    1       0.000000       0.000000        0.000000          0          0
Statement    
10    1      36.261017      36.261017       36.261017         20         20
Statement    
11    1       5.672096       5.672096        5.672096          0          0

* Total Entries:             11
* Total Time:               920.681649 seconds
* Minimum Time:               0.000000 seconds
* Maximum Time:             288.889663 seconds
* Arithmetic Mean Time:      83.698332 seconds
* Geometric Mean Time:        0.686790 seconds
---------------------------------------------
* Timestamp: 六  5月 07 2011 10:02:06 CST

   除了第8,9查询语句有错没有执行以外,其余9个查询的时间和输出行数都列举了。

  如果是需要强制并行查询,则采用下面的设置。查询优化器自动采用并行查询。

db2inst1@aix:/home/db2inst1]#>db2 get dbm cfg|grep PARA
Enable intra
-partition parallelism     (INTRA_PARALLEL) = NO
[db2inst1@aix:/home/db2inst1]#>db2 update dbm cfg using INTRA_PARALLEL YES
DB20000I  The
UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.

[db2inst1@aix:/home/db2inst1]#>db2 get dbm cfg|grep PARA
Enable intra
-partition parallelism     (INTRA_PARALLEL) = YES
[db2inst1@aix:/home/db2inst1]#>db2 get dbm cfg|grep DEGR
Maximum query degree
of parallelism   (MAX_QUERYDEGREE) = ANY
--重启数据库,使新配置生效
[db2inst1@aix:/home/db2inst1]#>db2stop force
05/12/2011 17:14:57     0   0   SQL1064N  DB2STOP processing was successful.
SQL1064N  DB2STOP processing was successful.
[db2inst1@aix:/home/db2inst1]#>db2start
05/12/2011 17:15:04     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
--查看执行计划,已经启用了并行
[db2inst1@aix:/home/db2inst1]#>db2expln -d tpch -q "select count(*) from tpch.nation,tpch.region" -t

DB2 Universal
Database Version 9.7, 5622-044 (c) Copyright IBM Corp. 1991, 2009
Licensed Material
- Program Property of IBM
IBM DB2 Universal
Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        
Isolation Level          = Cursor Stability
        Blocking                
= Block Unambiguous Cursors
        Query Optimization Class
= 5

        Partition Parallel      
= No
        Intra
-Partition Parallel = Yes (Bind Degree = ANY  )

        SQL Path                
= "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
                                   "DB2INST1"

Statement:
  
  
select count(*)
  
from tpch.nation, tpch.region

Intra
-Partition Parallelism Degree = 48

Section Code Page
= 1208

   要查看各查询的时间,在linux下可以用grep命令。在Windows下用find命令。

[db2inst1@aix:/home/db2inst1]#>cat /tmp/q01-22_f_nozip_para.log|grep "Elapsed Time is"
* Elapsed Time is:     462.886726 seconds
* Elapsed Time is:      13.512276 seconds
* Elapsed Time is:      55.491186 seconds
* Elapsed Time is:      51.078679 seconds

C:\downloads
>find "Elapsed Time is" q01-22_f_nozip.log

---------- Q01-22_F_NOZIP.LOG
* Elapsed Time is:     449.982390 seconds
* Elapsed Time is:      10.560007 seconds
* Elapsed Time is:      62.286401 seconds

   下面是各组查询测试结果。(第20个查询在并行查询中无法在可接受的时间内返回结果,测试数据略)

主流行式数据库评测:DB2 9.7企业版
▲表1 TPC-H scale=10未压缩和压缩数据的测试对比,单位:秒

  令人惊异的,无论是否压缩,并行查询的速度基本上比单进程都有所降低,有的甚至十余个小时不能查询出结果(第20个查询)。这个结果跟我们的预期相去甚远。用来测试的机器有8个逻辑CPU,基本上发挥不了作用。

  从上述数据我们还可以得出单进程和并行分别查询压缩和非压缩数据的差异。

主流行式数据库评测:DB2 9.7企业版
▲表2 TPC-H scale=10压缩前后数据的测试对比,单位:倍

  如上表所示,从合计时间看,单进程压缩比不压缩最大提高了2倍,总体大约提高了27%。而并行条件下,最大则有2.6倍的性能提高。从单个查询看,无论是否并行,压缩和不压缩互有胜负,这跟前面我们列出的压缩文件大小有关,如果I/O没有变化或者更大,那么加上解压开销,查询速度下降也是必然的。

0
相关文章