해우
2003-06-09 10:24:22
4
30075

[Oracle] Toad에서 Explain Plan을 이용하기(쿼리 튜닝하기)


많은 개발자들이 DB를 이용하면서 Query를 작성하고 또한 Query를 튜닝해야 한다는 것을 알지만 어떻게 튜닝해야 하는지는 잘 모르고 있는 것 같다. Toad를 이용하면 이러한 문제를 조금이나마 쉽게 접근할 수 있기 때문에 여기서 Toad를 이용한 튜닝 방법을 잠시 설명하기로 하자. Toad의 Sql Window를 열면 다음과 같은 창이 나타난다. 이곳의 Tab 을 보면 Explain Plan Tab이 존재한다. 이곳에서 실행한 Query의 Execution Plan을 볼수 있다.

Oracle의 Optimizer는 가장 효율적인 실행계획을 찾기위해 크게 2가지의 접근 방법을 가지고 있다.

  • Rule-Based Optimization(RBO)
    • 미리 정해진 규칙에 의한 실행 계획 수립
      • 연산자 우선순위
      • 접근 경로의 우선 순위
      • SQL 문장의 Syntax 규칙(상식에 의거하지만 융통성이 없음)
    • 데이터에 대한 통계 내지 실제 SQL을 수행할 경우에 소요될 비용한 대한 고려를 하지 않음
      • 예) 인덱스가 있다면 무조건 사용 (테이블의 크기, 인텍스의 효율등 무시)
    • Oracle 버젼 6이하와의 역 호환성을 위해 지원

     

  • Cost-Based Optimization(CBO)
    • 실행 비용( Cost)의 예측을 통한 지능적인 실행계획의 수립(Oracle 10 부터는 CBO만 제공된다고 하더군요)
    • 데이타에 대한 각종 통계 사용
    • 실제 SQL을 수행할 때 소요될 비용을 예측하고 그 값을 기준으로 실행 계획 결정
      (보다 현실적이고 지능적인 판단을 내림)
      • I/O 횟수
      • CPU 사용량
      • 메모리 사용량
      • 네트워크 전송량
    • Oracle7에 처음 도입
      • 지속적으로 성능 향상
      • 일반적으로 RBO 보다 우수

Toad에서 Execution Plan을 사용하기 위해서는 먼저 준비과정이 필요하다.

  1. USER_DATA, TEMPORARY_DATA의 2개의 Table Space를 만들어야 한다. 이때 TEMPORARY_DATA는 임시 Table로 생성하여야 한다. 크기는 별 상관 없는 것 같다. (본인은 10MB의 크기로 각각 생성하였다.)
  2. Toad를 실행하고 System 권한으로 SYSDBA로 해당 시스템에 Login한다.
  3. Toad의 설치 Directory -> temps -> toadprep.sql를 불어 들인다.
  4. DEFINE TMP_TSPACE=TEMPORARY 이곳의 TEMPORARY를 TEMPORARY_DATA로 수정한다.
  5. 이 파일을 실행한다. 실행시 오류가 발생하는데 이는 Drop에서 발생하는 것이므로 Continue를 선택해서 실행을 계속진행하면 된다.

이것으로 모든 것이 완료되었다. 이제 여러분도 다음과 같은 결과를 보실 수 있을 것이다.

결과의 내용중 Cost의 항목이 나오는 것은 CBO로실행된 것이고 없는 것은 RBO로 실행된 것이라 이해하면 된다.

주) RBO와 CBO의 설명은 Oracle Developer Conference에서 제공된 내용을 참조 하였음.

0
0
  • 댓글 4

  • 이호경
    2003-06-07 11:30:09
    CBO와 RBO에서 당근 CBO가 조케쪄..
    그런데 문제는 플랜을 어케 보는냐는 거아닌가여..?
    말밥.. 비용이 적게 나오는게 조은 쿼리가 되게꾸여..
    넘 어렵따.. ㅠ.ㅠ
    0
  • 하얀빛
    2003-06-30 00:09:59
    cbo만...볼수 있다면..ㅡㅡ; 옵티마이저가 이동하는 경로는 볼수 없는게 되겠네요? 헉~ ㅡㅡ; 그럼 쿼리 만으로 옵티마이저 경로를 다 알아야 되네..ㅜ.ㅜ
    0
  • 왕허접
    2005-01-24 18:52:40
    죄송합니다.. 왕 허접입니다
    죄송한데
    USER_DATA, TEMPORARY_DATA의 2개의 Table Space
    는 어떻게 만든는지 sql 좀..적어주세요
    죄송합니다 !!~~
    0
  • 양군짱
    2008-02-15 13:11:49
    RBO가 더 좋던데 ㅎㅎ
    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.