Monday, December 10, 2012

DB2 runstats功能测试总结


测试目的:
了解runstats的数据的处理方式以及在对表进行字段修改和索引维护时对统计信息的影响。

统计信息查询:

查询表的统计信息 db2 "select CARD,NPAGES,FPAGES,OVERFLOW,CLUSTERED,ACTIVE_BLOCKS,AVGCOMPRESSEDROWSIZE,AVGROWCOMPRESSIONRATIO,PCTROWSCOMPRESSED,PCTPAGESSAVED from sysstat.tables where tabname = 'TB1'"
查询索引的统计信息 db2 "select char(INDNAME,20) as INDNAME,char(COLNAMES,30) as COLNAMES,NLEAF,NLEVELS,FIRSTKEYCARD,FIRST2KEYCARD,FULLKEYCARD,DENSITY,NUMRIDS,NUMRIDS_DELETED,NUM_EMPTY_LEAFS,AVERAGE_RANDOM_FETCH_PAGES,AVERAGE_RANDOM_PAGES,AVERAGE_SEQUENCE_GAP,AVERAGE_SEQUENCE_PAGES,INDCARD,AVGLEAFKEYSIZE,AVGNLEAFKEYSIZE from sysstat.INDEXES where TABNAME = 'TB1'"
查询列的统计信息 db2 "select char(colname,20) as colname,COLCARD,char(HIGH2KEY,40) as HIGH2KEY,char(LOW2KEY,40) as LOW2KEY,AVGCOLLEN,PCTINLINED,SUB_COUNT,SUB_DELIM_LENGTH,AVGCOLLENCHAR from sysstat.columns where tabname = 'TB1'"
查询列的数据分布统计信息 db2 "select char(COLNAME,10) as COLNAME,TYPE,SEQNO,char(COLVALUE,30) as COLVALUE,VALCOUNT,DISTCOUNT from sysstat.COLDIST where tabname = 'TB1'"

测试情况:

本来这里是有个测试脚本和结果的,但是好像不能上传附件,原文本可能太大了。

测试结果如下:
  1. ON ALL COLUMNS是默认参数,所以:db2 runstats on table db2iabc.tb1db2 runstats on table db2iabc.tb1 on all columns等价
  2. and sampled detailed indexes all选择用于更新所有索引的统计信息
  3. on key columns只更新索引包含的字段的统计信息,该参数会导致没有索引的字段统计信息被情况,需要根据情况操作
  4. with distribution参数用于更新列值的分布情况,可通过表sysstats.coldist查看
  5. alter table drop column删除字段时统计信息会被清空,并且表处于reorg pending状态,需要进行reorg
  6. alter table add column添加字段时统计信息不会被情况,但是表也同样处于reorg pending状态,需要进行reorg
  7. reorg操作后统计信息会被清空,需要进行runstats
  8. for sampled detailed index db2iabc.IDX_TB1_REMARKfor sampled detailed index all 仅对索引进行统计信息更新而不更新字段统计信息(会更新表的基本统计信息和主键的统计信息)
  9. 如果创建或删除索引都只会对该索引有效,不会影响其他统计信息。

总结:
  1. 如果对表字段进行增加或者删除后必须进行reorgrunstats
  2. 创建新索引后可使用for index 单独更新索引统计信息

No comments:

Post a Comment