Analyze는 Serial Statistics Gathering 기능 , DBMS_STATS은 Parallel Gathering 기능



1. Analyze는 파티션의 통계정보를 각 파티션 테이블과 인덱스에 대해서 수집하고, Global Statistics는 파티션 정보를 가지고 계산하므로, 비정확할 수 있다. 그러므로 파티션 또는 서브파티션이 있는 객체에는 DBMS_STATS을 사용 해야 함. 


2. DBMS_STATS은 전체 클러스터에 대해서는 통계정보를 수집하지 않으므로 Analyze를 사용


3. DBMS_STATS은 CBO와 관련된 통계정보만을 수집한다. 테이블의 EMPTY_BLOCKS, AVG_SPACE,CHAIN_CNT 등은 수집되지 않는다. 


4. DBMS_STATS은 사용자가 지정한 통계정보 테이블에 수집된 통계정보를 저장할수있고, 딕셔너리로 각 칼럼, 테이블, 인덱스, 스키마등을 반영할수있다. 


5. DBMS_STATS은 IMPORT/EXPORT 기능 및 추가적인 기능이 많다. 이 기능 을 이용하여 운영 DB의 통계정보를 개발장비의 통계정보로 복사할 수 있으므로 개발장비의 플랜을 운영장비와 같게 만들 수 있다. 


다음은 Analyze 명령어에만 있는 기능이다. 

Structural Integrity Check 기능 

analyze { index/table/cluster } (schema.){ index/table/cluster } validate structure (cascade) (into schema.table); 


Chained Rows 수집 기능 

ANALYZE TABLE order_hist LIST CHAINED ROWS INTO ;


-------------------------------------------------------------------------



결론: analyze 직후 dbms_stats하면 admin stat과 optimizer stat이 제대로 merge됨.



drop table  blueone;

create table  blueone

pctfree 5

storage( initial 1M next 1M pctincrease 0 )

partition by range (object_type)

       (partition  pt  values less than ('U'),

        partition  pz  values less than (maxvalue)

       )

nologging

as

select *

from  all_objects

where rownum <= 10000

;


update  blueone

   set  SUBOBJECT_NAME = rpad(' ',30)

;


commit;



analyze table blueone compute statistics;



col  "GLOBAL_STATS"              form a6        heading Global_|Stats

col  "LAST_ANALYZED"             form a20       heading Last_Analyzed

col  "TABLE_NAME"                form a10       heading Table_Name

col  "USER_STATS"                form a6        heading User_|Stats

col  "AVG_ROW_LEN"               form 9999      heading Avg_|Row_|Len

col  "AVG_SPACE"                 form 9999      heading Avg_|Space

col  "AVG_SPACE_FREELIST_BLOCKS" form 9999      heading Avg_|Space_|Freelist_|Blocks

col  "BLOCKS"                    form 99999     heading Blocks

col  "CHAIN_CNT"                 form 9999      heading Chain_|Cnt

col  "EMPTY_BLOCKS"              form 9999      heading Empty_|Blocks

col  "NUM_FREELIST_BLOCKS"       form 9999      heading Num_|Freelist_|Blocks

col  "NUM_ROWS"                  form 99999999  heading Num_|Rows

col  "SAMPLE_SIZE"               form 99999999  heading Sample_|Size


select  table_name, NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED, AVG_SPACE_FREELIST_BLOCKS, NUM_FREELIST_BLOCKS, GLOBAL_STATS                   

from  all_tables

where  owner = USER

  and  table_name = 'blueone'

------------

union all

------------

select  partition_name, NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED, null, null, null

from  all_tab_partitions

where  table_owner = USER

  and  table_name = 'blueone'

;



/*


                                                                                          Avg_

                                                 Avg_                                   Space_      Num_

                Num_        Empty_  Avg_ Chain_  Row_   Sample_                      Freelist_ Freelist_ Global

Table_Name      Rows Blocks Blocks Space    Cnt   Len      Size Last_Analyzed           Blocks    Blocks Stats

---------- --------- ------ ------ ----- ------ ----- --------- -------------------- --------- --------- ------

blueone           10000    236    148  1940      0   125         0 03/08/26-16:12:11            0         0 NO

PT              7519    189     67  2273   1557   129      7519 03/08/26-16:12:10

PZ              2481     47     81   934    619   113      2481 03/08/26-16:12:11


*/



drop table blueone;

-- recreate blueone


declare BEGIN dbms_stats.gather_table_stats(ownname=>USER, tabname=>'blueone' ); END;

/




                                                                                          Avg_

                                                 Avg_                                   Space_      Num_

                Num_        Empty_  Avg_ Chain_  Row_   Sample_                      Freelist_ Freelist_ Global

Table_Name      Rows Blocks Blocks Space    Cnt   Len      Size Last_Analyzed           Blocks    Blocks Stats

---------- --------- ------ ------ ----- ------ ----- --------- -------------------- --------- --------- ------

blueone           10000    236      0     0      0   120     10000 03/08/26-16:20:07            0         0 YES

PT              7519    189      0     0      0   124      7519 03/08/26-16:20:06

PZ              2481     47      0     0      0   107      2481 03/08/26-16:20:06



analyze table blueone delete statistics;




<차이점>



                  NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE  CHAIN_CNT AVG_ROW_LEN SAMPLE_SIZE LAST_ANALYZED

                ---------- ---------- ------------ ---------- ---------- ----------- ----------- -----------------

ANALYZE              27263        512            0        642       4444         127       27263 03/08/26-15:55:32

DBMS_STATS           27263        512            0          0          0         123       27263 03/08/26-15:56:13



사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

'DB - ORACLE > Oracle DB Admin ' 카테고리의 다른 글

Oracle DB Scheduler 개념 및 사용법  (0) 2016.03.24
Oracle Partition Table 정리  (0) 2016.03.23
OS 백업 방법 ( HP , IBM )  (0) 2016.02.22
DBMS_STATS 사용  (0) 2016.02.11
RMAN의 기본적 지식  (0) 2016.02.11

+ Recent posts