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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值