nickjoIT

옵티마이저 모드 (OPTIMIZER MODE) 본문

DB/oracle

옵티마이저 모드 (OPTIMIZER MODE)

nickjo 2017. 4. 25. 16:36

OPTIMIZER MODE 종류

CHOOSE

- 오라클의 9i의 디폴트 설정입니다. 하지만 10g 부터는 ALL_ROWS가 디폴트 설정이죠. 간단하게 설명해서 CBO나 RBO를 사용할지 오라클이 알아서 선택합니다. /*+ RULL*/ 힌트를 사용하거나 통계정보가 하나도 없다면 RBO를 그 외의 경우에는 CBO를 사용하게 됩니다.

RULE

- 무조건 RBO를 사용합니다.

FIRST_ROWS (FIRST_ROWS_N)

- CBO의 일종으로 일부 데이터를 보여주는데 최적화된 모드입니다. 테이블에 1000건이 있어도 '최근 데이터 20건만 보여주겠다.'라면 FIRST_ROWS를 사용하시면 됩니다. 주로 OLTP(Online Transaction Processing)에 적당합니다.

ALL_ROWS

- CBO의 일종으로 전체 데이터를 사용하는 환경에 적당합니다. 예를들어 '테이블안에 있는 전체 데이터를 검색해서 전체의 합이나 평균을 구하겠다.'라면 ALL_ROWS를 사용하시면 됩니다. 주로 OLAP(Online Analytical Processing)에 적당합니다.



Optimizer Mode Setting 방법

 

--------------------------

1.     Instance 수준의 셋팅 방법

--------------------------

-      DB의 설정 파일(initSID.ora or spfileSID.ora)에 전체적으로 적용이 되도록 정의하는 방법, OPTIMIZER MODE RULE, CHOOSE, ALL_ROOWS, FIRST_ROWS와 같은 종류가 있습니다. CHOOSE인 경우 한 테이블이라도 Analyzed되어 있는 경우엔 비용기반 접근(CBO) 방식을 이용하는 것이며 RULE인 경우 규칙기반 접근 방식을 사용, ALL_ROWS인 경우 비용기반 옵티마이저의 한 방법인데 모든 ROW들을 처리한다고 할 때 그 비용을 최소화 하는 방법으로 실행계획을 수립,  FIRST_ROWS인 경우엔 최초 ROW를 추출하는데 드는 비용을 최소화 하도록 실행 계획을 구성하는 것입니다.

 

-      ) OPTIMIZER_MODE=FIRST_ROWS

 

-      만약 initSID or spfileSID.ora에 아무 내용도 정의하지 않은 경우 기본적으로 CHOOSE 방식이 됩니다.

 

-------------------------

2.     Session 수준의 셋팅 방법

-------------------------

 

-      alter session이라는 명령을 이용하면 현재 접속된 세션 레벨에서 옵티마이저 모드를 정의할 수 있습니다.

 

-      ) alter session set optimizer_mode=rule 과 같이 정의하면 해당 세션이 끝나기 전까지는 규칙 기반(RULE-BASED) 옵티마이저 모드를 이용하게 됩니다.

 

--------------------------

3.     Statement 수준의 셋팅 방법

--------------------------

 

-      힌트(Hint) 구문을 이용한다면 매 SQL 문장마다 서로 다른 옵티마이저 모드를 적용할 수 있습니다.

 

-      ) SELECT /*+ FIRST_ROWS */

ENAME,

SAL,

JOB

           FROM EMP

           WHERE SAL > (SELECT MAX(SAL)

                           FROM  EMP

                           WHERE DEPTNO = 10)

 


[출처]

http://westzero.tistory.com/8

http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecOrccleTun&wr_id=80

'DB > oracle' 카테고리의 다른 글

화면 출력  (0) 2017.05.21
테이블 반복 생성  (0) 2017.05.21
the password has expired 오라클 데이터베이스 암호 만료  (0) 2017.04.24
테이블 or 유저의 grant 확인  (0) 2016.09.01
테이블 권한주기(grant)  (0) 2016.09.01
Comments