使用DB2look重新创建优化器访问计划(4)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

生成 db2exfmt 输出:db2exfmt -d DUMMYDB -g TIC -w -1 -n % -s % -# 0

-o test_dummydb_exfmt.txt检查 test_dummydb_exfmt.txt 的内容并查看访问计划:Access Plan:

-----------

Total Cost: 25.8843

Query Degree: 1

Rows

RETURN

( 1)

Cost

I/O

|

4

MSJOIN

( 2)

25.8843

2

/-----+-----

1 4

TBSCAN TBSCAN

( 3) ( 5)

12.913 12.9682

1 1

| |

8 35

TABLE: SKAPOOR TABLE: SKAPOOR

ORG STAFF您在测试中获得了一个不同于生产中的访问计划。本例中,显然我们在测试系统上已经将 DFT_QUERYOPT(默认的查询优化)从 5 修改为 3。因此,您看到的是 Merge Join 计划,而非 Hash Join 计划,以及有一点点区别的总成本(Total Cost)。因为这些计划不匹配(假设您不确定为什么),所以要检查 db2exfmt 输出中的配置。见表 2。正如您可以看到的,测试(TEST)和生产(PRODUCTION)之间的惟一区别就是优化级别(Optimization Level),我们特意将之从 5 修改为 3,只是为了显示在测试环境中复制生产访问计划为何会不成功。本例中,您将使用下列 UPDATE 语句将 DFT_QUERYOPT 更新为5:UPDATE DB CFG FOR SAMPLE USING dft_queryopt 5然后,停止并重新连接数据库。再次对 DUMMYDB 发出 query.sql,并使用 db2exfmt 命令生成访问计划。这次,您将看到相同的访问计划。否则,就进一步确保本文中所讨论的所有优化器相关的参数都是相同的。示例 2:该示例显示了 db2look 命令中 -m 选项的重要性。前面用 -m 选项收集的统计数据在测试和生产中应该相同。本例中,我们将看到没有正确更新统计数据时计划是如何变化的。数据库治理器配置、数据库配置和 db2set 注册表变量与上面 示例 1 中的相同。这里的模式名是 SKAPOOR。用您的表的模式替换它。数据库是相同的,与 示例 1 中一样是 SAMPLE 和 DUMMY。这里所使用的平台和 db2level 是 AIX 5.1 和 DB2 UDB ESE V8.2,Fix pack 8,单分区。在 sample 数据库上执行下列命令:db2 "connect to sample"

db2 "create index name_ind on staff (name,id)"

db2 "runstats on table skapoor.staff with

distribution and indexes all"

db2 "set current explain mode explain"

db2 "select name from staff where

id=10 order by name"

db2 "set current explain mode no"

db2 "terminate"使用 db2exfmt 生成访问计划。您将看到下面的访问计划:Access Plan:

-----------

Total Cost: 0.111065

Query Degree: 1

Rows

RETURN

( 1)

Cost

I/O

|

1

IXSCAN

( 2)

0.111065

0

|

35

INDEX: SKAPOOR

NAME_IND从 sample 数据库中收集 db2look 信息:db2look -d sample -l -o storage.out

db2look -d sample -e -a -m -t STAFF -o db2look.outdb2look ummy 数据库,而不是之前在上面示例1中所连接的sample数据库。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航