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 |