1. 실행계획의 정의

* 실행계획이란?

사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업절차

실행계획이 목적했던 대로 수립되지 않으면, SQL 퍼포먼스에 문제가 발생

 

 

2. 실행계획 확인 방법

* 오라클 DBMS를 통해 실행계획 확인하는 방법

EXPLAIN PLAN / SET AUTOTRACE 

 

- EXPLAIN PLAN

EXPLAIN PLAN
SET STATEMENT_ID = 'TEST1' INTO PLAN_TABLE
FOR
SELECT /*+USE_NL(e d)*/
       e.name, e.deptno, d.dname
  FROM emp e, dept d
 WHERE e.deptno = d.deptno;

- SQL에 대한 실행계획만을 확인할 수 있음

- 명령을 사용할 때 실제 데이터를 처리하지 않기 때문에 데이터베이스에 어떤 부하도 주지 않음

- 튜닝하고자 하는 SQL이 다수일 경우 매번 명령을 수행시켜야하는 불편함이 존재

SELECT *
  FROM TABLE(DBMS_XPLAN.DISPLAY
            ('PLAN_TABLE', 'TEST1', 'ALL'));

- PLAN_TABLE에 저장된 결과를 확인하기 위해 다음과 같은 별도의 SELECT명령어를 실행시켜야함

- 데이터를 처리하지 않기 때문에 I/O관련 시간도 측정할 수 없음

 

- SET AUTOTRACE 

SET AUTOTRACE ON; 
SELECT /*+USE_NL(e d)*/
       e.name, e.deptno, d.dname
  FROM emp e, dept d
 WHERE e.deptno = d.deptno;

- EXPLAIN 명령과 달리 한 번의 명령으로 여러 개의 SQL에 대한 실행계획을 바로 볼 수 있음

- 다양하게 옵션을 사용할 수 있어서 여러 가지의 정보를 선택적으로 확인할 수 있음

 

* SET AUTOTRACE ON에 사용하는 명령의 옵션

SET AUTOTRACE ON EXPLAIN;

출력결과와 실행계획까지만 나타내고 통계정보는 생략

 

SET AUTOTRACE ON STATISTICS;

출력결과와 실행계획을 생략하고 I/O관련 정보를 선택적으로 보여줌

 

SET AUTOTRACE ON TRACEONLY;

출력의 건수가 많을때 사용하는데 출력결과를 나타내지 않음

 

SET AUTOTRACE ON TRACEONLY EXPLAIN;

데이터를 처리하지 않고 SQL이 소유하는 실행계획만을 보여줌 (큰데이터를 처리할 때 부하없이 사용가능하다)

 

SET AUTOTRACE ON TRACEONLY STATISTICS;

출력된 결과를 화면에 나타내지않고 I/O관련 정보를 보여줌

 

SET AUTOTRACE ON OFF;

사용하지 않을 때 사용

 

~ 이러한 실행계획을 확인하고 해석하여 SQL의 성능을 향상시키는데 목적을 둠!

 

3. 실행계획 분석

SET AUTOTRACE ON TRACEONLY EXPLAIN;
SELECT /*+USE_NL(e d)*/
       e.name, e.deptno, d.dname
  FROM emp e, dept d
 WHERE e.deptno = d.deptno;

- SET AUTOTRACE ON TRACEONLY; 을 사용하였기 때문에 출력결과를 나타내지는 않고 반면 실행계획을 나타냄

 

아래는 위 쿼리의 실행계획이다.

- 맨 왼쪽에 ID가 부여 되었음 전반적인 실행계획은 들여쓰기를 기준으로 구분할 수 있음

- 1번 작업과 연관된 작업이 2번과 5번임을 알 수 있고 위에 있는 명령이 먼저 실행되므로 2번이 실행되고 5번이 실행됨

- 같은 예로 2번 작업과 연관된 작업이 3번과 4번임을 알 수 있다.

 

아래는 위의 실행계획을 트리구조로 나타낸 것이다.

- 들여쓰기에서 같은 DEPTH인 2번을 왼쪽에 5번을 왼쪽에 작성하고 그 다음으로 3번과 4번을 작성한다

- 이때 제일 먼저 실행되는 작업은 가장 왼쪽에서 아래에 있는 노드이다. 그림에서는 3 -> 4 -> 2 -> 5 -> 1 -> 0 순으로 실행된다.

 

- 실행계획은 데이터 처리를 위한 작업방법

- 실행계획 구성 내용의 분석을 통해 SQL의 비효율적인 부분을 확인 할 수 있음

- 실행계획의 정확한 분석을 통해 SQL문장의 튜닝 포인트를 도출할 수 있음