본문 바로가기
OraclE

DBMS_STATS 패키지

by 타마마임팩트_쫀 2012. 6. 13.

1) 통계 테이블의 생성 및 삭제


일반적으로 CREATE_STAT_TABLE, DROP_STAT_TABLE을 사용하여 데이터 딕셔너리가 아닌

사용자 스키마 내부 통계 정보를 저장할 수 있는 통계 테이블을 생성한다.

 

 Why? 데이터 딕셔너리는 기존의 통계정보를 삭제 후 입력하는 방식이지만

       유저의 통계 테이블은 추가적으로 입력되기에 기존의 통계 정보들을 보존 할 수 있기 때문이다.


* 파라미터

 ownname  스키마 이름
 stattab  생성 혹은 삭제될 테이블의 이름

 tblspace

 통계 테이블이 생성될 테이블 스페이스 이름 (미지정시 실행 유저의 default테이블 스페이스 사용)

 


* 구문

 

-- 통계 테이블 생성

DBMS_STATS.CREATE_STAT_TABLE (
 ownname  VARCHAR2,
 stattab  VARCHAR2,
 tblspace VARCHAR2 DEFAULT NULL );

 

-- 통계 테이블 삭제

DBMS_STATS.DROP_STAT_TABLE (
 ownname  VARCHAR2,
 stattab  VARCHAR2  );

 


2) 옵티마이저 용 통계 정보 생성

 

 프로시저를 사용하여 특정 범위의 통계정보를 옵티마이저 용으로 생성 할 수 있다.
 DBMS_STATS.GATHER* 프로시저들을 사용하여 유저설정 통계정보를 특정 컬럼 레벨이나 도메인 인덱스 레벨로 생성 할 수 있다.

 

 이때 ststtab 파라미터를 사용하여 저장될 대상 테이블을 유저 통계 테이블 혹은 데이터 딕셔너리로 지정하거나

statown 파라미터를 사용하여 스키마 이름을 지정하거나 statid 파라미터를 사용하여 해당 통계정보에 ID를 생성 할 수 있다.

statown, stattab, statid 파라미터를 사용하여 새 통계 정보를 생성하기 전에

데이터 딕셔너리 내의 현 통계 정보를 특정 테이블에 백업할 수 있다.

 

 GENERATE_STATS 라는 프로시저를 사용하여 특정 객체에 대한 충분한 통계 정보들이 존재할 시,

기존의 통계 정보들을 기반으로 하여 보다 정확한 새로운 통계정보를 창출할 수도 있다.

 

 

* 종류

GATHER_INDEX_STATS 인덱스 통계 정보 생성
GATHER_TABLE_STATS 테이블과 테이블 내 컬럼(및 인덱스) 통계정보 생성
GATHER_SCHEMA_STATS 해당 스키마 내 모든 객체들의 통계 정보 생성
GATHER_DATABASE_STATS DB내의 모든 객체들의 통계정보 생성
GATHER_SYSTEM_STATS 시스템 통계정보 생성

 

* 파라미터

ownname  :    스키마 이름
indname   :    인덱스 이름
partname  :   파티션 이름
tabname   :   테이블 이름
interval    :   지정된 분 동안의 DB실시간 SGA 사용량의 의거한 통계정보 생성
                 Gathering_mode='INTERVAL'일때만 사용 가능
estimate_percent   :    통계될 ROW의 퍼센트 정의(100 ~ 0.000001)
method_opt  :  FOR ALL [ INDEXED | HIDDEN ] COLUMNS [ size_clause ] 또는
                    FOR COLUMNS [ size_clause ] column | atrribure [ size_clause ] [,column | atrribure [ size_clause ] ]
degree      :   병렬 처리 개수 설정
granularity  :   해당 객체가 파티션 화 되어 있을시에만 사용
                   ALL - global, partition, subpartition 레벨의 통계 정보
                   DEFAULT - global 및 partition 레벨의 통계정보
cascade     :  테이블 대상 시에 해당 테이블의 모든 인덱스에 대해서도 통계 정보 생성
                  이때 인덱스 통계 정보는 병렬사용 불가능


* 사용예
(테이블 내의 인덱스된 컬럼들 및 대상 테이블과 연관된 모든 인덱스에 대한 통계정보 생성)

 

BEGIN
       dbms_stats.gather_table_stats( ownname           => 'HAPPY',
                                      tabname           => 'TESTTABLE',
                                      estimate_percent  => 1,
                                      method_opt        => 'FOR ALL INDEXED columns',
                                      degree            => 8,
                                      granularity       => 'ALL',
                                      cascade           => true);
END;

 

 

3) 통계 정보 이동


 필요에 따라 IMPORT*를 사용하여 유저의 통계 테이블에서 원하는 레벨의 통계 정보를 데이터 딕셔너리에 로딩시켜 현재 메모리 내의 기존 통계 정보를 삭제한 후, 새로운 통계 정보를 옵티마이저에 적용되도록 하거나, 혹은 EXPORT*를 사용하여 현재 메모리 내에 옵티마이저에 의해 사용되고 있는 데이터 딕셔너리 내의 통계 정보를 원하는 위치의 특정 테이블에 복사 할 수 있습니다.

 

* 종류

 

-- 각 옵션에 맞는 해당 통계정보를 추출하여 stattab에 지정한 테이블에 저장한다.

EXPORT_COLUMN_STATS
EXPORT_INDEX_STATS
EXPORT_SYSTEM_STATS
EXPORT_TABLE_STATS
EXPORT_SCHEMA_STATS
EXPORT_DATABASE_STATS

 

-- 각 옵션에 맞는 해당 통계정보를 추출하여 데이터 딕셔너리에 저장한다.

IMPORT_COLUMN_STATS
IMPORT_INDEX_STATS
IMPORT_SYSTEM_STATS
IMPORT_TABLE_STATS
IMPORT_SCHEMA_STATS
IMPORT_DATABASE_STATS

 

 

 


원출처 : http://cafe.naver.com/gmlrnlehdanf.cafe
내용 요약 : http://blog.naver.com/bluekisunny (bluekisunny)

[출처] http://blog.naver.com/bluekisunny?Redirect=Log&logNo=120051863976

'OraclE' 카테고리의 다른 글

datapump  (0) 2012.06.20
DBMS_STATS  (0) 2012.06.13
tuning block space usage  (0) 2012.06.13
ALTER TABLE 에 있어서의 SHRINK 와 MOVE (10g)  (0) 2012.06.13
[펌] INBOUND_CONNECT_TIMEOUT  (0) 2011.09.15