2015년 3월 20일 금요일

SQL Explain Plan & SQL Trace Log



SQL Explain Plan


SQL 실행 계획은 Query Optimizer에서 여러 Candidate Plan 중 가장 좋은 Plan으로 선택된 Plan을 실제 수행을 위한 형태로 구성된 것을 말한다. SQL 실행 계획은 실행을 위한 Node 단위로 구분이 되며, 각 Node는 자신이 수행해야 하는 Filter 등을 갖는다.


\explain plan : 실행결과 및 실행계획 출력

gSQL> \explain plan SELECT id, name FROM t1 ORDER BY 1;


\explain plan only : 실행 계획만 출력

gSQL> \explain plan only SELECT id, name FROM t1 ORDER BY 1;


\explain plan verbose : 실행결과에 따른 소요시간 출력

gSQL> \explain plan verbose SELECT id, name FROM t1 ORDER BY 1;


ID NAME
-- ----------
1 leekmo
2 jhkim
3 bsyou

3 rows selected.


>>>  start print plan

< Execution Plan >
======================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |       ROWS | Total Time     |
------------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |            | 0:00:00.000009 |
|    1  |    TABLE ACCESS ("T1")                                       |          9 | 0:00:00.000008 |
======================================================================================================

     1  -  READ COLUMNS : ID, NAME

<<<  end print plan







SQL Trace Log


SQL Trace Log는 사용자의 질의 수행에 대한 분석 가능한 정보를 기록하는 Log이다. SQL Trace Log는 $SUNDB_DATA/trc 디렉토리에 생성되며, 프로세스 ID 와 세션 ID로 구분되어 각각 독립된 파일로 생성된다. SQLTrace Log는 사용자의 질의, SQL 실행 계획, SQL 처리 과정별 수행시간 등 여러 정보로 구성되어 파일에 출력된다.


SQL Trace Log 출력 (Trace Log 옵션은 SYSDBA 계정에서 설정)


gSQL> \CONNECT AS SYSDBA

# trace log 출력
gSQL> ALTER SYSTEM SET TRACE_LOG_ID = 70200;

System altered.

# trace log 시간을 상세하게
gSQL> ALTER SYSTEM SET TRACE_LOG_TIME_DETAIL = ON;

System altered.



SQL Trace Log 해제


# trace log 해제
gSQL> ALTER SYSTEM SET TRACE_LOG_ID = 0;

System altered.

# trace log 시간 해제
gSQL> ALTER SYSTEM SET TRACE_LOG_TIME_DETAIL = OFF;

System altered.



SQL Trace Log는 trc 디렉토리 아래 파일이 생기며 파일명에 대한 규칙은 아래와 같다.


opt_p[프로세스ID]_s[세션ID].trc




SQL Trace Log 확인


[neuron@song ~]$ cd $SUNDB_DATA/trc
[neuron@song trc]$ ls -la
합계 48
drwxrwxr-x. 2 neuron neuron  4096 2015-03-20 17:43 .
drwxrwxr-x. 8 neuron neuron  4096 2015-03-19 13:04 ..
-rw-r--r--. 1 neuron neuron    15 2015-03-19 00:41 README
-rw-rw-r--. 1 neuron neuron  5045 2015-03-20 17:44 opt_p23232_s27.trc
-rw-rw-r--. 1 neuron neuron 24876 2015-03-20 17:24 system.trc
[neuron@song trc]$
[neuron@song trc]$




[neuron@song~]$ vi opt_p23232_s27.trc


< SQL Query String >
----------------------
select empno, ename from semp


< Execution Plan >
======================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |       ROWS | Total Time     |
------------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |            | 0:00:00.000009 |
|    1  |    TABLE ACCESS ("SEMP")                                     |          9 | 0:00:00.000008 |
======================================================================================================

     1  -  READ COLUMNS : EMPNO, ENAME



< Result >
----------------------
  SUCCESS


< Execution Type >
----------------------
  DIRECT EXECUTE


< Bind Param Value >
--------------------------
  No Bind Param.

< Time Info >
====================================================
| Module    | Time           | Rate     | Call     |
----------------------------------------------------
| Parse     | 0:00:00.000021 |  14.89 % |        1 |
| Validate  | 0:00:00.000038 |  26.95 % |        1 |
| Code Opt  | 0:00:00.000018 |  12.77 % |        1 |
| Optimizer | 0:00:00.000043 |  30.50 % |        1 |
| Data Opt  | 0:00:00.000007 |   4.96 % |        1 |
| Execute   | 0:00:00.000004 |   2.84 % |        1 |
| Fetch     | 0:00:00.000010 |   7.09 % |        1 |
| Total     | 0:00:00.000141 | 100.00 % |          |
====================================================