您当前的位置:中客资源站网络学院数据库类DB2 → 文章内容 退出登录 用户管理
本类热门文章
相关下载
使用db2look 重新创建优化器访问计划
作者:中客资源  来源:中客资源  发布时间:2007-2-9 1:44:17

减小字体 增大字体

_sortheap。
数据库堆大小(DBHEAP):
每个数据库都有一个数据库堆,数据库管理器使用它来代表连接到数据库上的所有应用程序。 它包含表、索引、表空间和缓冲池的控制块信息。
锁列表大小(LOCKLIST):
该参数表示分配给锁列表的存储器大小。
最大锁列表(MAXLOCKS):
该参数定义数据库管理器执行升级之前必须填入的应用程序所占有锁列表的百分比。
locklist 和 maxlocks 将帮助确定某扫描(索引扫描或表扫描)期间将持有的锁类型,以及隔离级别。例如,您将在计划中注意到(比如说)索引扫描操作:

  IXSCAN: (Index Scan)

          TABLOCK : (Table Lock intent)
                 INTENT SHARE

注意:如果测试系统的 db2exfmt 输出中的可用锁(Locks Available)与生产系统不同,就不要进行连接 —— 该差异不影响查询计划。
平均应用程序(AVG_APPLS):
SQL 优化器使用该参数来帮助评估在运行时有多少缓冲池可用于所选择的访问计划中(因为连接到数据库的所有活动应用程序共享缓冲池)。
优化级别(DFT_QUERYOPT):
查询优化类用于在编译 SQL 查询时指导优化器使用不同的优化级别。
查询深度(DFT_DEGREE):
用于 SQL 语句的分区内部并行程度。如果设置为 ANY,优化器就对联机的实际 CPU 数目敏感。如果您使用 ANY,那么就应该将测试和生产系统上的 CPU 数目配置得相同,除非禁用分区内并行(intra_parallel)。
除了以上修改之外,还必须确保其他一些参数都相同。
保留的高频值数目(NUM_FREQVALUES):
该参数允许您指定“高频值(most frequent values)”的数目,当在 RUNSTATS 命令上指定 WITH DISTRIBUTION 选项时,将收集该值。
保留的分位数数目(NUM_QUANTILES):
该参数控制在 RUNSTATS 命令上指定 WITH DISTRIBUTION 选项时将收集的分位数(quantile)数目。
测试系统上的上述两个参数 NUM_FREQVALUES 和 NUM_QUANTILES 必须与生产系统中的相同,以便确保在测试系统上收集与生产中相同数目的频值数目和分位数值。
SQL 语句堆(4KB)(STMTHEAP):
在 SQL 语句的编译期间,语句堆(statement heap)用作 SQL 编译器的工作空间。该参数指定该工作空间的大小。如果测试中的该参数小于生产中的,您就可能会开始看到 SQL0101N 消息,因为缺乏编译查询所需要的语句堆空间。如果没有足够的语句堆用于动态连接枚举,您也可能看到 SQL0437W RC=1,下降为贪婪连接枚举。
在测试系统上重新创建优化器/查询计划问题的示例
示例 1:
OS:Windows 2000
DB2LEVEL:V8.2 Fixpack 8 ESE 单分区
测试并复制相同的 OS 和 db2level。
数据库
生产数据库:SAMPLE
测试数据库:DUMMYDB
使用下列命令创建 Sample 数据库:db2sampl
使用下列命令创建 Dummy 数据库
db2 create db DUMMYDB

注意:用与生产中相同的代码页、地区和排序序列创建 TEST 数据库

生产环境:

--------------------------------------------------------
-- Database SAMPLE and Database Manager configuration parameters
--------------------------------------------------------
UPDATE DBM CFG USING cpuspeed 9.446886e-007;
UPDATE DBM CFG USING intra_parallel NO;
UPDATE DBM CFG USING federated NO;
UPDATE DBM CFG USING fed_noauth NO;

!db2fopt SAMPLE update opt_buffpage 250;
!db2fopt SAMPLE update opt_sortheap 256;

UPDATE DB CFG FOR SAMPLE USING locklist 50;
UPDATE DB CFG FOR SAMPLE USING dft_degree 1;
UPDATE DB CFG FOR SAMPLE USING maxlocks 22;
UPDATE DB CFG FOR SAMPLE USING avg_appls 1;
UPDATE DB CFG FOR SAMPLE USING stmtheap 2048;
UPDATE DB CFG FOR SAMPLE USING dft_queryopt 5;

---------------------------------
-- Environment Variables settings
---------------------------------

!db2set DB2_INLIST_TO_NLJN=yes;
!db2set DB2_HASH_JOIN=yes;

除了以上设置,还应在数据库配置中注意下列配置:

db2 get db cfg for sample > dbcfg_sample.out

Database heap (4KB)                     (DBHEAP)  =  600
SQL statement heap (4KB)                (STMTHEAP)  =  2048
Number of frequent values retained     (NUM_FREQVALUES) =  10
Number of quantiles retained            (NUM_QUANTILES) =  20

确保在修改数据库管理器配置(dbm cfg)之后停止并启动该实例。对于 sample 数据库,按下列方式对 ORG 和 SALES 表运行 runstats:

db2 connect to sample
db2 runstats on table <schema>.org with distribution and indexes all
db2 runstats on table <schema>.sales with distribution and indexes all
db2 terminate

现在,通过执行 EXPLAIN.DDL 文件生成 EXPLAIN 表,该文件在 <install directory>\sqllib\misc 目录下:

db2 connect to sample
db2 -tvf <intall path>\EXPLAIN.DDL
db2 terminate

在名为 query.sql 的文件中保存下列命令:

connect to sample
set current explain mode explain
select * from org a, staff b where a.deptnumb=b.dept and b.dept=15
set current explain mode no
terminate

现在,按下列方式执行该文件:

db2 -tvf query.sql

上面将仅仅以解释模式编译查询。您将在屏幕上看到:

C:\>db2 -tvf query.sql
connect to sample

   Database Connection Information

 Database server        = DB2/NT 8.2.1
 SQL authorization ID   = SKAPOOR
 Local database alias   = SAMPLE

set current explain mode explain
DB20000I  The SQL command completed successfully.

select * from org a, staff b where a.deptnumb=b.dept and b.dept=15
SQL0217W  The statement was not executed as only Explain information requests
are being processed.  SQLSTATE=01604

set current explain mode no
DB20000I  The SQL command completed successfully.

C:\>db2 terminate
DB20000I  The TERMINATE command completed successfully.

使用 db2exfmt 生成访问计划,如下:

db2exfmt -d SAMPLE -g TIC -w -1 -n % -s % -# 0 -o prod_sample_exfmt.txt

检查 prod_sample_exfmt.txt 文件的内容。您将看到生成了下面的访问计划:

Access Plan:
-----------
 Total Cost:   25.8823
 Query Degree:  1

              Rows 
             RETURN 
             (   1) 
              Cost 
               I/O 
               |
                4 
             HSJOIN
             (   2) 
             25.8823 
                2 
          /-----+-----\
        4                1 
     TBSCAN           TBSCAN 
     (   3)           (   4) 
     12.9682          12.913 
        1                1 
       |                |
       35                8 
 TABLE: SKAPOOR   TABLE: SKAPOOR  
      STAFF             ORG 

现在,这就是您要在生产 sample 数据库上继续的计划。您需要在测试环境中模拟该计划。
从生产 sample 数据库中收集下列信息:

db2look -d SAMPLE -l -o storage.out                        
db2look -d SAMPLE -f -fd -o config.out
db2look -d SAMPLE -e -a -m -t ORG SALES -o table.ddl

测试环境:

上一页  [1] [2] [3] [4] [5] [6]  下一页

[] [返回上一页] [打 印]
文章评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码