热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

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

来源: 作者: 时间:2007-08-05 Tag: 点击:
 

手工修改统计数据之一。在 db2look.out 文件中搜索下列语句(请注意,模式名、TABSCHEMA 和 INDSCHEMA 可能与您的具体情况不同):

 

UPDATE SYSSTAT.INDEXES 
SET NLEAF=1, 
NLEVELS=1, 
FIRSTKEYCARD=35, 
FIRST2KEYCARD=35, 
FIRST3KEYCARD=-1, 
FIRST4KEYCARD=-1, 
FULLKEYCARD=35, 
CLUSTERFACTOR=-1.000000, 
CLUSTERRATIO=100, 
SEQUENTIAL_PAGES=0, 
DENSITY=0, 
AVERAGE_SEQUENCE_GAP=0.000000, 
AVERAGE_SEQUENCE_FETCH_GAP=0.000000, 
AVERAGE_SEQUENCE_PAGES=0.000000, 
AVERAGE_SEQUENCE_FETCH_PAGES=0.000000, 
AVERAGE_RANDOM_PAGES=1.000000, 
AVERAGE_RANDOM_FETCH_PAGES=0.000000, 
NUMRIDS=35, 
NUMRIDS_DELETED=0, 
NUM_EMPTY_LEAFS=0 
WHERE INDNAME = ’NAME_IND’
AND INDSCHEMA = ’SKAPOOR ’ 
AND TABNAME = ’STAFF’ 
AND TABSCHEMA = ’SKAPOOR ’; 
现在,将 FIRSTKEYCARD、FIRST2KEYCARD、
FULLKEYCARD 和 NUMRIDS 从 35 修改为 37。现在保存 
db2look.out 文件并运行这 3 个文件: 
db2 -tvf config.out > config_output.out 
db2 -tvf storage.out > storage_output.out 
db2 terminate 
db2stop 
db2start 
db2 -tvf db2look.out > db2look_output.out

 

检查前两个文件 config_output.out 和 storage_output.out 的内容,以确保它们运行成功。现在,检查

db2look_output.out 文件的内容。您将看到下列更新语句失败了:

 

UPDATE SYSSTAT.INDEXES SET NLEAF=1, NLEVELS=1, 
FIRSTKEYCARD=37, FIRST2KEYCARD=37 

, FIRST3KEYCARD=-1, FIRST4KEYCARD=-1, 
FULLKEYCARD=37, CLUSTERFACTOR=-1.000000, C 

LUSTERRATIO=100, SEQUENTIAL_PAGES=0, 
DENSITY=0, AVERAGE_SEQUENCE_GAP=0.000000, A 

VERAGE_SEQUENCE_FETCH_GAP=0.000000, 
AVERAGE_SEQUENCE_PAGES=0.000000, AVERAGE_SEQ 

UENCE_FETCH_PAGES=0.000000, 
AVERAGE_RANDOM_PAGES=1.000000, AVERAGE_RANDOM_FETCH_ 

PAGES=0.000000, NUMRIDS=37, 
NUMRIDS_DELETED=0, NUM_EMPTY_LEAFS=0 WHERE INDNAME = 

’NAME_IND’ AND INDSCHEMA = ’SKAPOOR ’ 
AND TABNAME = ’STAFF’ AND TABSCHEMA = ’SK 
APOOR ’ 
DB21034E The command was processed as 
an SQL statement because it was not a 
valid Command Line Processor command. 
During SQL processing it returned: 
SQL1227N The catalog statistic "37" 
for column "FULLKEYCARD" is out of range 
for its target column, has an invalid 
format, or is inconsistent in relation 
to some other statistic. Reason Code = "8". 
SQLSTATE=23521

 

 

 

正如您可以看到的,上面用于索引 NAME_IND 的 UPDATE 语句失败了,因为 FULLKEYCARD 大于表的基数(CARD)。正如通过

db2look.out 文件中的下列更新语句可以看到的,CARD 是 35:

 

UPDATE SYSSTAT.TABLES 
SET CARD=35, 
NPAGES=1, 
FPAGES=1, 
OVERFLOW=0, 
ACTIVE_BLOCKS=0 
WHERE TABNAME = ’STAFF’ AND TABSCHEMA = ’SKAPOOR ’;

 

现在,再次以解释模式运行相同的查询:

 

db2 "select name from staff where id=10 order by name"

并生成访问计划。您将看到它是不同的:

 

Access Plan: 
----------- 
Total Cost: 12.972 
Query Degree: 1 
Rows 
RETURN 
( 1) 
Cost 
I/O 
| 
1 
TBSCAN 
( 2) 
12.972 
1 
| 
1 
SORT 
( 3) 
12.9708 
1 
| 
1 
TBSCAN 
( 4) 
12.9682 
1 
| 
35 
TABLE: SKAPOOR 
STAFF

该示例显示,如果在表上发生 WRITE 活动时运行 RUNSTATS,统计数据就可能与本示例中的不一致。因此,用于更新统计数据的 UPDATE

语句可能失败并产生 SQL1227N 错误消息。所有的 UPDATE 语句都运行成功十分重要,如果存在不一致性,就应该进行修理并重新运行。本例中,解决方案是将

KEYCARDS 和 NUMRIDS 从 37 重新修改为 35。




相关文章:
db2日期操作函数
SQL 语法参考手册
谈谈IBM DB2的数据库备份与恢复
对 DB2 V9 中 XML 类型的编码处理(dW)
构建DB2 Cube View元数据桥
DB2存储过程开发最佳实践
DB2中使用所有内存
DB2与SQL Server2000间SQL数据复制
用户和组帐户与DB2 UDB的交互
DB2 9数据库优点及缺点详细分析
DB2中实现Oracle的相关功能
将Siebel 7电子商务应用程序从DB2 UDB V8 迁移到D
解析:DB2 无限活动日志策略的实用技巧
DB2 9数据服务器发展的3个阶段
为DB2数据库添加验证约束
DB2数据库创建存储过程时遇到的错误
DB2 9数据库性能理解的二十大误区
DB2中的终极SQL性能调节技术
DB2数据库应用系统性能优化深入探究
提高DB2 Web程序性能5条规则
详解安装DB2 9数据库管理软件的4种方式
DB2 9.5的数据库内存保护技术
解决DB2中出现的SQL1032N错误现象
创建克隆文件
DB2数据库优化的几条策略
如何解决DB2中出现的SQL1032N错误现象
解决DB2数据库代码页不兼容的问题
DB2创建存储过程时遇到的错误
教你提高商业智能环境中的DB2查询性能
DB2 9.5的数据库内存保护