Toad Explain Plan

Toad Explain Plan 실행 단축키 CTRL + E 로 실행

 

[펌 내용]

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 보다 우수

 

[테스트]


[참고 내용]

 

1. 트리를 보면 왼쪽에 숫자가 나온다. 1부터가 실행되는 순서!!

- 플랜은 트리 형태로 되어 있으며, 자신보다 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이라면 상위 로우 소스부터 실행된다.

 


2. TABLE ACCESS FULL 는 쿼리상 나오면 안됨(겁나 느림)!!

- 옵티마이저가 통계 정보를 이용해 추정한 값이라고 보면 된다.

 

Cost - 옵티마이저가 해당 오퍼레이션을 수행하는데 필요하다고 판단한 비용. 측정을 위한 단위가 있는 것은 아니고, 그냥 weight 값 정도로 생각하면 됨. CBO는 여러 가지 실행 계획을 세우고 이에 대한 비용(cost)를 비교한 다음 비용이 가장 적은 실행 계획으로 SQL을 실행함.

 

Cardinality - 오퍼레이션을 수행할 때 접근하게 될 row 수. 역시 옵티마이저가 추정한 값

Bytes - 해당 오퍼레이션을 수행할 때 접근하게 될 byte 수. 옵티마이저가 추정한 값 

 

 

3. 실행계획에서는 옵티마이져가 판단한 값!!

- 실제 oracle의 실행과 다를수도 있으며 정확한것은 Trace를 통해서 확인해야 한다. 단지 이것을 어떻게 쿼리를 풀어나가는지를 확인하는 단계다.