본문 바로가기

04번. IT 힌트얻기/▶ DB Tuning

[실행계획] Exercise_03


▶ 실행계획 설명

1-1. DUAL 테이블을 접근 -> 조건에 ROWNUM을 이용한다.
1-2. WORK_INF 테이블에 FULL SCAN으로 접근한다.
2. 1-1, 1-2의 결과 집합을 CARTESIAN JOIN을 통해서 연결해준다.
3. ORDER BY 순으로 SORTING을 해주고보여준다.

▶ 추가 설명

(1) FAST DUAL
- Oracle 9i 에서 사용되는 DUAL의 FULL TABLE SCAN 대신 10g에서는 FAST DUAL optimization plan을 사용한다.

 

Use DUAL Freely

아래와 같은 명령을 실제로 사용하는 개발자(또는 DBA)의 수가 얼마나 될 것이라 생각하십니까?

select USER into from DUAL

아마 거의 모든 이들이 사용하고 있을 것입니다. DUAL은 호출될 때마다 새로운 논리적 I/O(Buffer I/O)를 생성합니다. 이 기능은 매우 유용하게 활용됩니다. DUAL은 := USER와 같은 구문만큼이나 자주 사용되고 있습니다. 하지만 오라클 코드는 DUAL을 특수한 형태의 테이블로서 취급하며, 따라서 일반적인 튜닝 방법은 적용할 수 없다는 문제가 있습니다.

Oracle Database 10g에서라면 이에 관련한 걱정은 할 필요가 없습니다. DUAL이 특수한 테이블이기 때문에, 논리적 I/O를 나타내는 consistent gets의 값도 줄어들며, event 10046 trace에서 확인할 수 있는 것처럼 optimization plan도 다른 형태로 나타납니다.

Oracle9i의 경우
Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
      1   TABLE ACCESS (FULL) OF 'DUAL'


10g의 경우
Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   MODE: ALL_ROWS
      0   FAST DUAL

Oracle 9i에서 사용되는 DUAL의 FULL TABLE SCAN 대신, 10g에서는 FAST DUAL optimization plan을 사용하고 있다는 점을 주목하시기 바랍니다. 이러한 기능 개선을 통해 DUAL 테이블을 자주 사용하는 애플리케이션의 연속적인 읽기 작업 성능이 대폭적으로 향상되었습니다.



(2) COUNT (STOPKEY)
- 조건절에 ROWNUM을 사용했을 때 발생

(3) MERGE JOIN (CARTESIAN)
-
연결고리가 존재하지 않는 경우


카티젼 조인 (Cartesian Join)
- 협의의 의미에서 카티션 조인은 조인되는 두 개 집합 간에 연결고리 조건이 존혀 없는 경우를 말하지만, 넓은 개념에서 보면 'M:M' 조인을 의미
- 실제로 실행계획에 'CARTESIAN'으로 명기되는 조인은 Sort Merge 조인 뿐이며, 다른 조인은 내용에서 카티젼 조인으로 실행되고 원하는 결과가 나오더라도 실행계획에는 정상적인 조인과 동일한 모습으로 나타난다.


* 'MERGE JOIN (CARTESIAN)'이 나타났다면 분명 주변에 다른 처리단위들이 더 있으며, 위는 전체 실행 계획 중에서 일부분, 즉 최종 결과가 아니라 처리과정에서 발생하는 중간과정의 집합임
- 카티젼 조인이 발생하는 경우
1) 사용자가 특별한 목적을 가지고 카티젼 곱을 만드는 고의적인 경우
2) 3개 이상의 집합을 조인할 때 조인 순서의 잘못으로 인해 연결고리 부재 현상이 발생한 경우
                        (3)출처 : http://blog.naver.com/coolmrkm?Redirect=Log&logNo=140126737337

'04번. IT 힌트얻기 > ▶ DB Tuning' 카테고리의 다른 글

[Tuning] SQL Trace  (0) 2011.10.10
[실행계획] Exercise_04  (0) 2011.10.07
[실행계획] Exercise_02  (0) 2011.10.06
[실행계획] Exercise_01  (0) 2011.10.06
[Notice]실행계획 카테고리 생성  (0) 2011.10.06