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