ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 手动收集——收集统计信息

手动收集——收集统计信息

原创 Linux操作系统 作者:oracleclub 时间:2011-12-08 23:00:43 0 删除 编辑
DBMS_STATS包
4个粒度:
数据库级别——GATHER_DATABASE_STATS
前提:job_queue_processes必须非0,如果为0,则不工作
SQL> show parameter job_queue_processes;

NAME                                 TYPE       VALUE
------------------------------------ ---------- ------------------------------
job_queue_processes                  integer    10

 GATHER_DATABASE_STATS几个参数如下:

 。ESTIMATE_PERCENT——对数据行的选择百分比;如为NULL,就对所有表所有行统计
 。ESTHOD_OPT——是否收集直方图;AUTO依据列数据的分布和列的数据负载收集直方图
 。GRANULARITY——对表而言,说明统计粒度;
1,AUTO
2,GLOBAL AND PARTITION——全局统计量
3,PARTITION——所有表的分区
4,SUBPATITION——子分区
5,ALL,所有表的分区,子分区,全局统计量

 。CASCADE——表和索引
 。OPTIONS——对统计对象作出选择 
1,GATHER——收集所有对象的统计数据
2,GATHER AUTO——数据库认为有必要的对象
3,GATHER EMPTY——只收集目前没有统计数据的数据库对象
4,GATHER STALE——收集过时

语法:
SQL> begin
  2   dbms_stats.GATHER_DATABASE_STATS(estimate_percent=>null);
  3  end;
  4  /


模式—————GATHER_SCHEMA_STATS
语法:
SQL> execute dbms_stats.GATHER_SCHEMA_STATS(ownname=>'SCOTT');
验证:
SQL> select LAST_ANALYZED,TABLE_NAME,OWNER,NUM_ROWS,SAMPLE_SIZE
  2   from dba_tables
  3   where wner= 'SCOTT';

LAST_ANAL TABLE_NAME      OWNER                            NUM_ROWS SAMPLE_SIZE
--------- --------------- ------------------------------ ---------- -----------
04-DEC-11 DEPT            SCOTT                                   4           4
04-DEC-11 BONUS           SCOTT                                   0           0
04-DEC-11 SALGRADE        SCOTT                                   5           5
04-DEC-11 DEPT_TEST3      SCOTT                                   4           4
04-DEC-11 TEST3           SCOTT                                   0           0
04-DEC-11 TEST1           SCOTT                                   1           1

表——————GATHER_TABLE_STATS
语法:
SQL> execute dbms_stats.GATHER_TABLE_STATS('scott','test1');

索引—————GATHER_INDEX_STATS
查:
SQL> select INDEX_NAME,TABLE_NAME from dba_indexes where  owner='SCOTT';

INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
PK_DEPT                        DEPT
I_REV                          TEST3
I_FUN                          TEST3

语法:
SQL> execute dbms_stats.GATHER_INDEX_STATS('scott','PK_DEPT');

PL/SQL procedure successfully completed.
========================================
========================================
手工收集的统计信息存储在哪里?
DBA_TAB_STATISTICS——存储CBO计算所需的统计数据
DBA_TAB_COL_STATISTICS——收集列的统计数据
例子:
SQL> select NUM_ROWS,AVG_SPACE,AVG_ROW_LEN,NUM_FREELIST_BLOCKS,LAST_ANALYZED
  2  from DBA_TAB_STATISTICS
  3  where  table_name='DEPT';

  NUM_ROWS  AVG_SPACE AVG_ROW_LEN NUM_FREELIST_BLOCKS LAST_ANAL
---------- ---------- ----------- ------------------- ---------
         4       8049          20                   0 04-DEC-11


SQL> select COLUMN_NAME,NUM_DISTINCT,LOW_VALUE,HIGH_VALUE,SAMPLE_SIZE,AVG_COL_LEN
  2  from dba_tab_col_statistics
  3  where table_name='DEPT';

COLUMN_NAM NUM_DISTINCT LOW_VALUE            HIGH_VALUE      SAMPLE_SIZE AVG_COL_LEN
---------- ------------ -------------------- --------------- ----------- -----------
DEPTNO                4 C10B                 C129                      4           3
DNAME                 4 4143434F554E54494E47 53414C4553                4          10
LOC                   4 424F53544F4E         4E455720594F524           4           8
                                             B

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26465805/viewspace-712998/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-11-22

  • 博文量
    61
  • 访问量
    82252