내용 목차
본 장에서는 DBMS_STATS 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
DBMS_STATS는 데이터베이스 객체의 통계 정보를 수집하고 관리하는 패키지이다. 이 패키지를 사용하면 데이터베이스에 있는 컬럼, 테이블, 데이터 사전(DD: Data Dictionary), 인덱스, 스키마, 시스템 등에 대한 통계 정보를 수집하고 관리(예: 삭제 또는 초기화 등)할 수 있다.
테이블 통계 정보를 수집할 때 사용자 선택에 따라서 컬럼 각각에 대한 데이터 분포도를 저장한다. 이를 히스토그램이라 하고, 수집 가능한 데이터 타입은 NUMBER, CHAR, VARCHAR, DATE, TIME, TIMESTAMP이다.
사용자는 자신에게 소속된 객체들에 대해서만 통계 정보 수집이 가능하다. ANALYZE ANY 권한을 부여받으면 모든 사용자의 객체에 대한 통계 정보 수집이 가능하다.
본 절에서는 DBMS_STATS 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.
통계 정보 히스토리 보유 기간을 변경하는 프러시저이다. 해당 값은 통계 정보 히스토리를 제거하는 시점에 영향을 끼친다. 히스토리를 제거하는 기능은 “28.2.30. PURGE_STATS” 프러시저를 참고한다.
ALTER_STATS_HISTORY_RETENTION 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.ALTER_STATS_HISTORY_RETENTION ( retention NUMBER );
파라미터
파라미터 | 설명 |
---|---|
retention | 통계 정보 히스토리를 보유할 최대 기간이다. (단위: 일) 1 이상의 값이어야 하지만 특별한 목적을 위해 아래와 같이 값을 지정할 수 있다.
|
테이블 및 로컬 인덱스의 원본 파티션의 통계 정보를 대상 파티션의 통계 정보로 복사하는 프러시저이다.
RANGE 파티션일 경우, 파티션 키의 첫번째 컬럼의 히스토그램이 대상 파티션 바로 이전 파티션까지를 대상으로 수집되었다면 히스토그램도 같이 갱신한다.
COPY_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.COPY_TABLE_STATS ( ownname IN VARCHAR2, tabname IN VARCHAR2, srcpartname IN VARCHAR2, dstpartname IN VARCHAR2, scale_factor IN NUMBER DEFAULT 1, flags IN NUMBER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE );
파라미터
파라미터 | 설명 |
---|---|
ownname | 파티션이 속한 스키마의 이름이다. |
tabname | 파티션이 속한 테이블의 이름이다. |
srcpartname | 통계 정보를 복사할 원본 파티션의 이름이다. |
dstpartname | 통계 정보를 복사할 대상 파티션의 이름이다. |
scale_factor | 원본 파티션의 로우 개수, 블록 개수 등을 해당 수치만큼 곱하여 대상 파티션에 저장한다. |
flags | 사용하지 않는 파라미터이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 존재하지 않는 테이블 또는 파티션 이름을 입력한 경우이다. |
통계 정보를 저장할 통계 테이블을 생성하는 프러시저이다.
CREATE_STAT_TABLE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.CREATE_STAT_TABLE ( ownname VARCHAR2, stattab VARCHAR2, tblspace VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 통계 테이블이 속한 스키마의 이름이다. |
stattab | 통계 정보를 저장할 통계 테이블의 이름이다. |
tblspace | 통계 테이블이 속할 테이블 스페이스의 이름이다. (기본값: NULL) NULL로 설정할 경우 SYSTEM 테이블 스페이스에 저장된다. |
예외 상황
예외 상황 | 설명 |
---|---|
7068 | 잘못된 스키마를 입력한 경우이다. |
컬럼의 통계 정보를 삭제하는 프러시저이다.
DELETE_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 컬럼이 속한 테이블의 이름이다. |
colname | 컬럼의 이름이다. |
partname | 통계 정보를 삭제할 파티션의 이름이다. 테이블이 파티션되어 있고, partname의 값이 NULL이면 테이블 수준의 컬럼 통계 정보를 삭제한다. |
cascade_parts | 테이블이 파티션되어 있고, partname이 NULL일 때 TRUE로 설정하면 모든 파티션 수준의 컬럼 통계 정보도 함께 삭제한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
데이터베이스에 있는 모든 테이블의 통계 정보를 삭제하는 프러시저이다.
DELETE_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_DATABASE_STATS ( no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
모든 데이터 사전의 스키마(SYS, SYSCAT)의 통계 정보를 삭제하는 프러시저이다.
DELETE_DICTIONARY_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_DICTIONARY_STATS ( no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
인덱스의 통계 정보를 삭제하는 프러시저이다.
DELETE_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_INDEX_STATS ( ownname VARCHAR2, idxname VARCHAR2, partname VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
idxname | 인덱스의 이름이다. |
partname | 통계 정보를 삭제할 파티션의 이름이다. 인덱스가 파티션으로 나누어져 있고, partname의 값이 NULL이면 인덱스 수준의 통계 정보를 삭제한다. |
cascade_parts | 인덱스가 파티션으로 나누어져 있고, partname의 값이 NULL일 때 TRUE로 설정하면 모든 파티션 수준의 통계 정보도 함께 삭제한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
스키마 전체의 통계 정보를 삭제하는 프러시저이다.
DELETE_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_SCHEMA_STATS ( ownname VARCHAR2, no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
workload 시스템의 통계 정보를 삭제하고, noworkload 시스템의 통계 정보를 초기화하는 프러시저이다. workload 시스템의 통계 정보는 INTERVAL, START, STOP 옵션으로, noworkload 시스템의 통계 정보는 NOWORKLOAD 옵션으로 수집한다.
DELETE_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_SYSTEM_STATS ();
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
테이블의 통계 정보를 삭제하는 프러시저이다.
DELETE_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DELETE_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, cascade_columns BOOLEAN DEFAULT TRUE, cascade_indexes BOOLEAN DEFAULT TRUE, no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
partname | 통계 정보를 삭제할 대상 파티션의 이름이다. 파티션으로 나뉘어 있고, partname의 값이 NULL이면 테이블 수준의 통계 정보를 삭제한다. |
cascade_parts | 테이블이 파티션으로 나뉘어 있고, partname이 NULL일 때 TRUE로 설정하면 모든 파티션 수준의 통계 정보도 함께 삭제한다. |
cascade_columns | TRUE로 설정하면 컬럼의 통계 정보도 함께 삭제한다. |
cascade_indexes | TRUE로 설정하면 테이블에 있는 인덱스의 통계 정보도 함께 삭제한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
통계 테이블을 삭제하는 프러시저이다.
DROP_STAT_TABLE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.DROP_STAT_TABLE ( ownname VARCHAR2, stattab VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
ownname | 통계 테이블이 속한 스키마의 이름이다. |
stattab | 통계 정보를 저장할 통계 테이블의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
7068 | 잘못된 스키마를 입력한 경우이다. |
지정한 컬럼의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
colname | 컬럼의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 컬럼을 입력한 경우이다. |
데이터베이스에 있는 테이블의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_DATABASE_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
지정한 인덱스의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
indname | 인덱스의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 인덱스를 입력한 경우이다. |
스키마 전체의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_SCHEMA_STATS ( ownname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 스키마를 입력한 경우이다. |
시스템의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_SYSTEM_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
테이블의 통계 정보를 통계 테이블에 저장하는 프러시저이다.
EXPORT_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.EXPORT_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, cascade BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
cascade | 테이블이 갖는 컬럼, 인덱스, 파티션의 통계 정보를 저장한다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 테이블을 입력한 경우이다. |
데이터베이스의 모든 객체의 통계 정보를 수집하는 프러시저이다.
GATHER_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_DATABASE_STATS ( estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param ('STAT_ESTIMATE_PERCENT'), method_opt VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'), degree NUMBER DEFAULT to_degree_type (get_param('STAT_DEGREE')), cascade BOOLEAN DEFAULT to_boolean(get_param('STAT_CASCADE')), gather_sys BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')), options VARCHAR2 DEFAULT 'GATHER' );
파라미터
파라미터 | 설명 |
---|---|
estimate_percent | 샘플링할 로우의 퍼센트를 정의한다. 0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다. |
method_opt | 히스토그램 생성에 대한 옵션으로 설정 방법은 [method_opt 파라미터 설정방법]을 참고한다. |
degree | 병렬 쿼리의 처리 개수를 설정한다. |
cascade | 인덱스에 대해서도 통계 정보를 수집한다. |
gather_sys | SYS 사용자의 테이블에 대해서도 통계 정보를 수집한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
options | 수집할 테이블의 기준을 정한다.
|
[method_opt 파라미터 설정방법]
다음과 같은 형식으로 method_opt 파라미터를 설정할 수 있다.
FOR ALL
FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
각 옵션에 대한 설명은 다음과 같다.
옵션 | 설명 |
---|---|
INDEXED | 인덱스된 컬럼의 통계 정보를 수집한다. |
HIDDEN | 실제 컬럼이 아닌 functional index로 생성된 컬럼에 대해서 통계 정보를 수집한다. |
size_clause | 히스토그램을 생성할 때 길이를 설정하는 데 필요한 절이다. |
FOR COLUMNS
FOR COLUMNS [size_clause] column [size_clause] [,column [size_clause]...]
각 옵션에 대한 설명은 다음과 같다.
옵션 | 설명 |
---|---|
size_clause | 히스토그램을 생성할 때 길이를 설정하는 데 필요한 절이다. |
size_clause
size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}
각 항목에 대한 설명은 다음과 같다.
항목 | 설명 |
---|---|
integer | 히스토그램 버킷의 수이다. 1~256개까지 설정할 수 있다. |
REPEAT | 히스토그램이 있는 경우에만 히스토그램의 정보를 수집한다. |
AUTO | 시스템에서 자동으로 값을 결정한다. |
SKEWONLY | 데이터 분포가 한쪽으로 치우친 분포에 맞게 값을 결정한다. |
예외 상황
예외 상황 | 설명 |
---|---|
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
모든 데이터 사전의 스키마(SYS, SYSCAT) 객체의 통계 정보를 수집하는 프러시저이다.
GATHER_DICTIONARY_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_DICTIONARY_STATS ( estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param ('STAT_ESTIMATE_PERCENT'), method_opt VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'), degree NUMBER DEFAULT to_degree_type (get_param('STAT_DEGREE')), cascade BOOLEAN DEFAULT to_boolean(get_param('STAT_CASCADE')), no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
estimate_percent | 샘플링할 로우의 퍼센트를 정의한다. 0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다. |
method_opt | 히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 “28.2.18. GATHER_DATABASE_STATS”를 참고한다. |
degree | 병렬 쿼리의 처리 개수를 설정한다. |
cascade | 인덱스에 대해서도 통계 정보를 수집한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
인덱스의 통계 정보를 수집하는 프러시저이다.
GATHER_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_INDEX_STATS ( ownname VARCHAR2, idxname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type ( get_param ('STAT_ESTIMATE_PERCENT')), degree NUMBER DEFAULT to_degree_type (get_param ('STAT_DEGREE')), no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
idxname | 인덱스의 이름이다. |
partname | 파티션의 이름이다. |
estimate_percent | 샘플링할 로우의 퍼센트를 정의한다. 0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다. |
degree | 병렬 쿼리의 처리 개수를 설정한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
스키마의 모든 객체의 통계 정보를 수집하는 프러시저이다.
GATHER_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_SCHEMA_STATS ( ownname VARCHAR2, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param ('STAT_ESTIMATE_PERCENT'), method_opt VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'), degree NUMBER DEFAULT to_degree_type (get_param('STAT_DEGREE')), cascade BOOLEAN DEFAULT to_boolean(get_param('STAT_CASCADE')), no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
estimate_percent | 샘플링할 로우의 퍼센트를 정의한다. 0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다. |
method_opt | 히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 “28.2.18. GATHER_DATABASE_STATS”를 참고한다. |
degree | 병렬 쿼리의 처리 개수를 설정한다. |
cascade | 인덱스에 대해서도 통계 정보를 수집한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
시스템의 통계 정보를 수집하는 프러시저이다. 이 프러시저를 사용하려면 DBA 권한이 필요하다.
GATHER_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_SYSTEM_STATS ( gathering_mode VARCHAR2 DEFAULT 'NOWORKLOAD', interval NUMBER DEFAULT 60, limit VARCHAR2 DEFAULT '3G' );
파라미터
파라미터 | 설명 |
---|---|
gathering_mode | NOWORKLOAD, INTERVAL, START/STOP 옵션을 지원한다. 각 옵션에 대한 설명은 다음의 [gathering_mode 파라미터 설정 옵션]을 참조한다. |
interval | gathering_mode가 INTERVAL일 때 시스템의 성능을 측정하는 시간을 분 단위로 나타낸다. (기본값: 60분) |
limit | gathering_mode가 NOWORKLOAD일 때 임의의 입출력을 수행해 볼 최대 데이터 양을 Byte 단위로 나타낸다. 이때 단위는 K(Kilo Byte), M(Mega Byte), G(Giga Byte), T(Tera Byte) 등을 사용할 수 있다. 캐시 버퍼(데이터베이스의 캐시, 운영체제의 캐시 등)의 크기보다 큰 값을 사용해야 좀 더 정확한 정보를 얻을 수 있다. (기본값: 3G) |
[gathering_mode 파라미터 설정 옵션]
gathering_mode 파라미터에 설정할 수 있는 각 옵션에 대한 설명은 다음과 같다.
옵션 | 설명 |
---|---|
NOWORKLOAD | 시스템의 CPU와 입출력 성능을 측정한다. 즉 시스템의 통계 정보 중 CPUSPEED, SEEKTM, TRFSPEED를 수집한다.
이 모드에서 시스템의 통계 정보를 수집하면 데이터베이스 크기에 따라 몇 분이 걸릴 수 있다. 이를 해결하기 위해 limit 파라미터를 사용하여 수집 시간을 조절할 수 있다. |
INTERVAL | interval 파라미터에 설정된 시간 동안 시스템의 성능을 측정한다. workload 시스템의 통계 정보인 SBLKRDTM, MBLKRDTM, MBLKRDCNT를 수집한다. 필요하다면 gathering_mode 파라미터의 옵션을 STOP으로 설정하여 interval 파라미터에 설정한 시간이 모두 지나가기 전에 수집을 일찍 마칠 수 있다. |
START, STOP | START와 STOP 옵션 간의 시스템 성능을 측정한다. workload 시스템의 통계 정보인 SBLKRDTM, MBLKRDTM, MBLKRDCNT를 수집한다. |
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | 권한이 부족한 경우이다. |
-20001 | 잘못된 파라미터 값을 입력한 경우이다. |
-20002 | _DD_AUX_STATS 통계 테이블의 내용이 이상한 경우이다. |
-20003 | 잘못된 gathering_mode 파라미터(NOWORKLOAD, INTERVAL, START, STOP만 가능)를 사용한 경우이다. |
테이블의 통계 정보를 수집하는 프러시저이다.
GATHER_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param ('STAT_ESTIMATE_PERCENT'), method_opt VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'), degree NUMBER DEFAULT to_degree_type (get_param('STAT_DEGREE')), cascade_indexes BOOLEAN DEFAULT to_boolean(get_param('STAT_CASCADE')), no_invalidate BOOLEAN DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')), granularity VARCHAR2 DEFAULT 'ALL' );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 현재 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
partname | 파티션의 이름이다. |
estimate_percent | 샘플링할 로우의 퍼센트를 정의한다. 0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다. |
method_opt | 히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 “28.2.18. GATHER_DATABASE_STATS”를 참고한다. |
degree | 병렬 쿼리의 처리 개수를 설정한다. |
cascade_indexes | 인덱스에 대해서도 통계 정보를 수집한다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
granularity | 통계 정보를 수집하는 대상을 가리킨다.
|
예외 상황
예외 상황 | 설명 |
---|---|
OBJECT_NOT_EXISTS | 객체가 존재하지 않는 경우이다. |
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
통계 테이블에 있는 지정한 컬럼의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
colname | 컬럼의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 컬럼을 입력한 경우이다. |
통계 테이블에 있는 모든 테이블의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_DATABASE_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
통계 테이블에 있는 지정한 인덱스의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
indname | 인덱스의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 인덱스를 입력한 경우이다. |
통계 테이블에 있는 스키마 전체의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_SCHEMA_STATS ( ownname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 스키마를 입력한 경우이다. |
통계 테이블에 있는 시스템의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_SYSTEM_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
통계 테이블에 있는 테이블의 통계 정보를 데이터 사전에 저장하는 프러시저이다.
IMPORT_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.IMPORT_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, cascade BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
partname | 파티션의 이름이다. |
stattab | 통계 테이블의 이름이다. |
statid | 통계 테이블 내에서 구분할 통계 정보 ID이다. |
cascade | 테이블이 갖는 컬럼, 인덱스, 파티션의 통계 정보를 저장한다. |
statown | 통계 테이블이 속한 스키마의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
20003 | 잘못된 테이블을 입력한 경우이다. |
지정된 시점보다 오래된 통계 정보 히스토리들을 제거하는 프러시저이다. 이 프러시저 수행을 하려면 SYSDBA 또는 ANALYZE ANY 권한이 필요하다.
PURGE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.PURGE_STATS ( before_timestamp IN TIMESTAMP WITH TIME ZONE );
파라미터
파라미터 | 설명 |
---|---|
before_timestamp | NULL일 경우 “28.3.3. GET_STATS_HISTORY_RETENTION” 함수에서 조회되는 보유 기간값에 맞춰서 삭제되며, NULL이 아닌 값을 지정할 경우에는 지정된 시점보다 이전의 히스토리들이 삭제된다. |
스키마의 모든 객체의 통계 정보를 지정된 시간대(as_of_timestamp)로 복원하는 프러시저이다.
RESTORE_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.RESTORE_SCHEMA_STATS ( ownname VARCHAR2, as_of_timestamp TIMESTAMP WITH TIME ZONE, no_invalidate BOOLEAN DEFAULT to_boolean (get_param ('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
as_of_timestamp | 복원할 통계 정보의 시간대이다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
테이블의 통계 정보를 지정된 시간대(as_of_timestamp)로 복원하는 프러시저이다. 이 프러시저는 연관된 인덱스와 컬럼의 통계 정보까지 복원한다.
RESTORE_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.RESTORE_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, as_of_timestamp TIMESTAMP WITH TIME ZONE, no_invalidate BOOLEAN DEFAULT to_boolean (get_param ('STAT_NO_INVALIDATE')) );
파라미터
파라미터 | 설명 |
---|---|
ownname | 스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다. |
tabname | 테이블의 이름이다. |
as_of_timestamp | 복원할 통계 정보의 시간대이다. |
no_invalidate | TRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다. |
DBMS_STATS 패키지의 디폴트 파라미터의 값을 변경하는 프러시저이다.
SET_PARAM 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.SET_PARAM ( pname VARCHAR2, pval VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
pname | 파라미터의 이름이다. |
pval | 파라미터의 설정 값이다.
NULL로 설정하지 않은 경우 다음과 같은 옵션을 설정한다.
|
예외 상황
예외 상황 | 설명 |
---|---|
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
시스템의 통계 값을 수동으로 설정하는 프러시저이다.
SET_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.SET_SYSTEM_STATS ( pname VARCHAR2, pvalue VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
pname | 파라미터의 이름이다. |
pvalue | 파라미터의 설정 값이다. 다음은 파라미터에 대한 설명이다.
|
예외 상황
예외 상황 | 설명 |
---|---|
-20000 | DBA 권한이 없는 경우이다. |
-20001 | 잘못된 파라미터 값을 입력한 경우이다. |
본 절에서는 DBMS_STATS 패키지에서 제공하는 함수를 알파벳 순으로 설명한다.
DBMS_STATS 패키지의 디폴트 파라미터의 값을 반환하는 함수이다.
프로토타입
DBMS_STATS.GET_PARAM ( pname VARCHAR2 ) RETURN VARCHAR2;
파라미터
파라미터 | 설명 |
---|---|
pname | 파라미터의 이름이다. |
예외 상황
예외 상황 | 설명 |
---|---|
BAD_INPUT_VALUE | 잘못된 파라미터 값을 입력한 경우이다. |
사용 가능한 가장 오래된 통계 정보 히스토리의 저장 시점을 반환한다. 사용자는 통계 정보를 이 시점보다 예전으로 복원할 수 없다.
GET_STATS_HISTORY_AVAILABILITY 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY RETURN TIMESTAMP WITH TIME ZONE;