2013년 7월 28일 일요일

(오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터)Oracle 초기화 파라미터 OPTIMIZER_MODE

초기화 파라미터 OPTIMIZER_MODE

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)



초기화 파라미터인 OPTIMIZER_MODE는 오라클 인스턴스가 최적의 Access 경로를 선택하는 기본 설정이 됩니다. 즉 옵티마이저가 어떠한 기준으로 최적화된 Access 경로를 추출 하는지 결정하는 방법에 대해 제시 한다고 볼 수 있습니다. 아래에 설정 가능한 값과 그에 대한 설명이 있으니 참고 바랍니다.

CHOOSE : 오라클 옵티마이저는 CBO(Cost-Based Optimizer) RBO(Rule-Based Optimizer)중 하나를 선택 합니다. 통계 정보의 이용가능 여부에 따라 이용 가능하면 CBO를 사용하고 불가능 경우에는 RBO를 사용 합니다. (Oracle9i의 기본값)

만약 데이터딕셔너리에 액세스 되는 테이블 중 적어도 하나의 테이블에 대한 통계 정보가 있는 경우엔 CBO를 사용하며 최대 처리량을 목표로 최적화를 수행 합니다.

딕셔너리에 약간의 통계 정보만을 가지고 있다면 CBO가 사용 될 수 있지만 옵티마이저는 통계 정보가 없는 부분에 대해서는 통계 정보를 추측해야 합니다. 이러한 것은 최선의 실행 계획이라기 보다 차선의 실행 계획이라고 볼 수 있습니다.

만약 Access되는 테이블에 대한 통계 정보가 하나도 없다면 RBO를 사용 합니다.

ALL_ROWS : 통계 정보의 유무와 상관없이 모든 SQL 문에 대해 CBO를 이용하며 최대 처리량을 목표로 합니다. 최대 처리량을 목표로 한다는 것은 전체 SQL문의 결과를 완료 하는데 걸리는 시간이 적게 드는 것을 목표로 한다는 것 입니다.

FIRST_ROWS_n : 통계 정보의 유무와 상관없이 모든 SQL 문에 대해 CBO를 이용하며 처음 n개의 레코드를 가장 빨리 추출 할 수 있는 최적의 경로를 찾습니다.

FIRST_ROWS : 옵티마이저는 첫번째 레코드의 추출을 가장 빠르게 하는 최적의 경로를 찾습니다.

RULE : 통계정보의 유무와 관계 없이 모든 SQL에 대해 RBO를 사용토록 합니다.

초기 매개 변수 파일(init.ora)에서 위의 파라미터를 변경 할 수도 있으며 alter session set optimizer_mode 명령을 이용 할 수도 있습니다. 또한 명령 행에서 Hint를 이용하여 Optimizer Mode나 목표를 변경 하는 것도 가능 합니다.

/*+ CHOOSE */
/*+ RULE */
/*+ ALL_ROWS */
/*+ FIRST_ROWS[(n)] */

결국 힌트는 개별 SQL문에 대해 CBO의 목표를 설정하기 위해 사용하는 겁니다. SQL문에서 힌트를 사용하게 되면 초기 파라미터에서 설정 한 것 보다 우선 적용 됩니다.

아래의 예를 참고 하세요~
SQL>conn / as sysdba
SQL> show parameter optimizer_mode

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
optimizer_mode                       string      CHOOSE
SQL> alter session set optimizer_mode = first_rows_1
  2  ;

세션이 변경되었습니다.

SQL> show parameter optimizer_mode

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
optimizer_mode                       string      FIRST_ROWS_1



CBO가 사용하는 통계 정보는 데이터 딕셔너리에 저장되며 DBMS_STATS 패키지나 ANALYZE 명령을 이용하여 스키마 객체에 대한 데이터의 분포도 등을 구할 수 있습니다. SQL문을 구사하면서 최적화된 CBO의 사용을 위해서는 반드시 통계 정보를 가져야 합니다.

[출처]오라클자바커뮤니티
www.oraclejavacommunity.co.kr

댓글 없음:

댓글 쓰기