哄骗DB2look 重新创立优化器访问筹划(3)

 
在测试系统上重新创立优化器/盘问筹划问题标示例:
 
示例 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 表,
该文件在 \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
 
 
 
测试环境:
 
修正下面将数据库从 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;
 
 
 
修正为
 
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>\sqllib\misc\db2 -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
 
 
 
来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0730/28321.html


版权声明: 原创作品,承诺转载,转载时请务必以超链接情势标明文章 原始情由 、作者信息和本声明。否则将深究法律责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975359.html