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

2/9/2008来源:DB2教程人气:5105

  在测试系统上重新创建优化器/查询计划问题的示例:  示例 1:OS:Windows 2000DB2LEVEL: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;
  除了以上设置,还应在数据库配置中注重下列配置: 1234下一页 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 表,  该文件在 sqllibmisc 目录下: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.
上一页1234下一页   使用 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
  测试环境:  修改上面将数据库从 SAMPLE 连接到 DUMMYDB 时所收集的每个文件中的数据库名。  例如,假如您查看了 3 个文件的内容,就会注重到:CONNECT TO SAMPLE;  将它修改为:CONNECT TO DUMMYDB;  在测试环境中接管这些文件。本例中,所有的表都是在默认的表空间 USERSPACE1 中创建的。因此,它们也应在测试系统上相同的 SMS 表空间中用 storage.out 中转储的相同配置(包括 PREFETCHSIZE、EXTENTSIZE 等)进行创建。  在 config.out 文件中进行少量修改。将下列内容:UPDATE DB CFG FOR SAMPLE USING dft_queryopt 5; 上一页1234下一页   修改为UPDATE DB CFG FOR SAMPLE USING dft_queryopt 3;  并保存 config.out 文件。  现在,执行 storage.out、config.out 和 table.ddl,如下:db2 -tvf storage.out > storage_output.out
db2 -tvf config.out > config_output.out
db2 -tvf table.ddl > table.out
  检查输出文件以确保所有命令都成功运行了。并且按照生产环境设置中所显示的用于 SAMPLE DB 的设置来修改 DBHEAP、STMTHEAP、NUM_FREQVALUES、NUM_QUANTILES,使它们适用于 DUMMYDB。同时,检查注册表变量设置是否尽可能地相同。  使用 db2stop 和 db2start 停止并启动该实例。重新为 DUMMYDB 数据库创建解释表:db2 connect to dummydb;
<install path>sqllibmiscdb2 -tvf EXPLAIN.DDL
db2 terminate;
  现在,对 DUMMYDB 数据库运行查询,在前面对 SAMPLE 数据库运行查询时所生成的 query.sql 文件中将数据库名从 SAMPLE 修改为 DUMMYDB。C:>db2 -tvf query.sql
connect to dummydb
Database Connection Information
Database server = DB2/NT 8.2.1
SQL authorization ID = SKAPOOR
Local database alias = DUMMYDB
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
上一页1234