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
'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 |