생계/Oracle2022. 7. 21. 02:08

오라클은 DBMS_STATS 패키지로 통계정보 관리를 지원한다. 

하위에 여러 프로시져가 있는데 자주 쓰는 프로시져 몇 가지에 대해서 정리해보자. 

 

- DBMS_STATS.CREATE_STAT_TABLE : 통계정보를 담을 테이블 생성  

 사용법 : begin dbms_stats.create_stat_table('SCOTT','STAT_TABLE','USERS'); end;

 scott 소유의 테이블 stat_table 을 users 테이블스페이스에 생성. 

 이 테이블은 아래쪽의 통계정보 export 할때 사용될수 있다. 

- DBMS_STATS.DROP_STAT_TABLE : 통계정보 테이블 삭제 

 사용법 : begin dbms_stats.drop_stat_table('SCOTT','STAT_TABLE'); end;

- DBMS_STATS.GATHER_STAT_TABLE : 통계정보 수집

 사용법 : begin dbms_stats.gather_stat_table(OWNNAME=>'SCOTT', TABNAME=>'TEST_TAB', partname=>'PT_2000', estimate_percent=>5, degree=>1, granularity=>'PARTITION', cascade=>TRUE, no_invalidate=>FALSE ); end;  

- DBMS_STATS.EXPORT_STAT_TABLE : 통계정보 백업 (export) **

사용법 : begin dbms_stats.export_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB', stattab=>'STAT_TAB' 

- DBMS_STATS.IMPORT_STAT_TABLE : 통계정보 복구 (import) **

사용법 : begin dbms_stats.import_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB', stattab=>'STAT_TAB' 

- DBMS_STATS.DELETE_STAT_TABLE  : 통계정보 삭제

사용법 : (일반테이블) begin dbms_stats.delete_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB'); end;

 (파티션) begin dbms_stats.delete_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB', partname=>'PT_2000'); end;

select owner, table_name, partition_name, 
       num_rows, last_analyzed, global_stats, stattype_locked
  from dba_tab_statistics
 where owner='SCOTT'; 

- DBMS_STATS.COPY_STAT_TABLE : 통계정보 복사

사용법 : begin dbms_stats.copy_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB', srcpartname=>'PT_2000', dstpartname=>'PT_2001'); end;

- DBMS_STATS.LOCK_STAT_TABLE : 통계정보 잠금

사용법 : begin dbms_stats.lock_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB'); end;

- DBMS_STATS.UNLOCK_STAT_TABLE : 통계정보 잠금해제 

사용법 : begin dbms_stats.unlock_stat_table(ownname=>'SCOTT', tabname=>'TEST_TAB'); end;

확인 : DBA_TAB_STATISTICS => stattype_locked 

** 딕셔너리 통계정보 

DBMS_STAT.GATHER_DICTIONARY_STATS
DBMS_STAT.GATHER_FIXED_OBJECTS_STATS

** 자동 통계정보 수집 

오라클을 설치하면 디폴트로 자동 통계수집 되는 것이 있다. 

select *  
  from dba_autotask_client
 WHERE client_name LIKE 'auto opt%'
;

필요하다면 disable 한다. 

BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
 client_name => 'auto optimizer stat collection'
,operation => null
,window_name => null
);

 

반응형
Posted by 돌고래트레이너