手動收集——收集統計資訊

Davis_itpub發表於2018-06-27
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/31520497/viewspace-2156890/,如需轉載,請註明出處,否則將追究法律責任。

相關文章