ORACLE10g自动收集统计信息

2010-12-17  张林 

ORACLE10g自动收集统计信息--自动analyze

    从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。


    可以通过以下查询这个JOB的运行情况:

    select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'

   其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB:

SQL> select JOB_NAME,LAST_START_DATE, enabled from dba_scheduler_jobs;

JOB_NAME                       LAST_START_DATE
------------------------------ --------------------------------------
AUTO_SPACE_ADVISOR_JOB         04-DEC-07 10.00.00.692269 PM +08:00
GATHER_STATS_JOB               04-DEC-07 10.00.00.701152 PM +08:00
FGR$AUTOPURGE_JOB
PURGE_LOG                       05-DEC-07 03.00.00.169059 AM PRC


    然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。 而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。 所以建议最好关闭这个自动统计信息收集功能:

exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

自动化永远而严重的隐患相伴随!

关闭及开启自动搜集功能,有两种方法,分别如下:
方法一:
exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');
方法二:
alter system set "_optimizer_autostats_job"=false scope=spfile;
alter system set "_optimizer_autostats_job"=true scope=spfile;
Pfile可以直接修改初始化参数文件,重新启动数据库。


查看表上的统计信息
SELECT NUM_ROWS,    --表中的记录数
       BLOCKS,      --表中数据所占的数据块数
       EMPTY_BLOCKS,--表中的空块数
       AVG_SPACE,   --数据块中平均的使用空间
       CHAIN_CNT,   --表中行连接和行迁移的数量
       AVG_ROW_LEN  --每条记录的平均长度
  FROM USER_TABLES
 WHERE TABLE_NAME = 'CONTAINER'
2.查看索引的统计
SELECT BLEVEL,                  --索引的层数
       LEAF_BLOCKS,             --叶子结点的个数
       DISTINCT_KEYS,           --唯一值的个数
       AVG_LEAF_BLOCKS_PER_KEY, --每个KEY的平均叶块个数
       AVG_DATA_BLOCKS_PER_KEY, --每个KEY的平均数据块个数
       CLUSTERING_FACTOR        --群集因子
  FROM USER_INDEXES
 WHERE INDEX_NAME = 'CONTAINER_IDX_1'
3.查看列上的统计信息
SELECT NUM_DISTINCT, --唯一值的个数
       LOW_VALUE, --列上的最小值
       HIGH_VALUE, --列上的最大值
       DENSITY, --选择率因子(密度)
       NUM_NULLS, --空值的个数
       NUM_BUCKETS --直方图的BUCKET个数
       --HISTOGRAM    --直方图的类型
  FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'CONTAINER'
   AND COLUMN_NAME = 'CNTR_ID'
4.查询列上的直方图信息
SELECT ENDPOINT_NUMBER, ENDPOINT_VALUE
  FROM USER_TAB_HISTOGRAMS
 WHERE TABLE_NAME = 'CONTAINER'
   AND COLUMN_NAME = 'CNTR_ID'

http://www.lorentzcenter.nl/awcourse/oracle/server.920/a96533/stats.htm

CBO心得(选择率,基数,直方图)

http://sunwgneuqsoft.itpub.net/post/34741/456500


在11g中,Oracle在统计信息方面进行了进一步的增强。

这篇介绍函数统计信息。

11g统计信息方面增强(一):http://yangtingkun.itpub.net/post/468/507713

11g统计信息方面增强(二):http://yangtingkun.itpub.net/post/468/507859

11g统计信息方面增强(三):http://yangtingkun.itpub.net/post/468/507897

11g统计信息方面增强(四):http://yangtingkun.itpub.net/post/468/510913

11g统计信息方面增强(五):http://yangtingkun.itpub.net/post/468/510987

11g统计信息方面增强(六): http://yangtingkun.itpub.net/post/468/511083

389°/3895 人阅读/0 条评论 发表评论

登录 后发表评论