Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 DBMS_UTILITY, DBMS_DDL을 이용하여 ANALYZE하는 방법
DBMS_UTILITY, DBMS_DDL을 이용하여 ANALYZE하는 방법
=================================================

PURPOSE
-------

CBO(Cost Based Optimizer)에 대한 통계 정보를 수집하는 방법에 대하여
알아보기로 한다.


Explanation
-----------

보통, DB 내의 table, index 등에 대한 통계 정보를 관리하기 위해서는
analyze command를 이용하게 된다. analyze 작업은 이러한 'analyze'
command 이외에 Oracle에서 기본으로 제공하는 procedure에 의해서도
가능하다.

이들 procedure를 이용하면,
. 전체 DB 내의 모든 object들에 대해서,
. 특정 schema 내의 모든 object들에 대해서,
. 하나의 특정 object에 대해서
analyze 작업이 가능하다.

또한, 한번 analyze된 object들은 지속적인 변경 사항들을 반영하기 위하여
자주 re-analyze 해야 할 필요성이 생기는데, dbms_job을 이용하여 여기서
소개하는 procedure들을 job으로 등록할 경우 특정 시점에 또는 특정 시간
간격으로 analyze를 자동으로 수행하는 것이 가능해진다.
(DBMS_JOB에 관련된 내용은 Bulletin 10707, Oracle7 Server Administrator's
Guide 등을 참조한다.)

Package 생성 script
==================
$ORACLE_HOME/rdbms/admin/dbmsutil.sql, prvtutil.plb 를 SYS user로
수행한다.


Example
-------

DBMS_UTILITY.ANALYZE_DATABASE(method varchar2,
estimate_rows number default null,
estimate_percent number default null,
method_opt varchar2 default null);

Database 내의 모든 object(table, cluster, index)들을 analyze한다.
예) SQL> exec dbms_utility.analyze_database('COMPUTE') ;


DBMS_UTILITY.ANALYZE_SCHEMA(schema varchar2,
method varchar2,
estimate_rows number default null,
estimate_percent number default null,
method_opt varchar2 default null);

특정 schema 내의 모든 object(table, cluster, index)들을 analyze한다.
예) SQL> exec dbms_utility.analyze_schema('SCOTT','ESTIMATE',NULL,15);


DBMS_DDL.ANALYZE_OBJECT(type varchar2,
schema varchar2,
name varchar2,
method varchar2,
estimate_rows number default null,
estimate_percent number default null,
method_opt varchar2 default null);

analyze command처럼 특정 object를 analyze한다.
예) SQL> exec dbms_ddl.analyze_object('TABLE','SCOTT','EMP','COMPUTE');


각 argument들의 의미
====================
type :
'TABLE', 'CLUSTER', 'INDEX' 중의 하나로서 analyze 대상 object의 type.
만약 위의 세 가지가 아닌 다른 type를 입력하면 procedure는 return된다.

schema :
대상 object의 schema로서, null일 경우는 current schema를 의미

name :
대상 object의 이름

method :
'COMPUTE', 'ESTIMATE', 'DELETE' 중의 하나.
만약 'ESTIMATE'를 사용한다면 estimate_rows, estimate_percent 중의
하나는 값을 입력해야 한다.

estimate_rows :
estimate하는 row의 갯수

estimate_percent :
estimate하는 row의 percentage로서 estimate_rows가 함께 입력되면
이 argument는 무시됨.

method_opt :
method options으로 다음의 값들을 가질 수 있다.
[ FOR TABLE ]
[ FOR ALL [INDEXED] COLUMNS] [SIZE n]
[ FOR ALL INDEXES ]
Comment
등록된 코멘트가 없습니다.