1 2 4 3 5 SELECT empno, ename, job, sal, dname FROM emp, dept 결과분석(Execute Plan) SELECT empno, ename, job, sal, dname FROM emp, dept WHERE emp.deptno = dept.deptno; ID Operation Name SELECT STATEMENT 1 MERGE JOIN 2 TABLE ACCESS BY INDEX ROWID DEPT 3 INDEX FULL SCAN PK_DEPT *4 SORT JOIN 5 TABLE ACCESS FULL EMP ( SELECT ) ( Merge JOIN) 1 TALBE ACCESS (DEPT) SORT(EMP) 2 4 3 5 INDEX FULL SCAN PK_DEPT TALBE ACCESS (DEPT)
ID OPERATION NAME ROWS BYTES COST(%CPU) 개발자가 실행하는 SQL문을 EXPLAIN PLAN 명령어 또는 SET AUTOTRACE ON에 의해 분석하면 다음과 같은 실행 계획이 나타납니다. C:\> SQLPLUS SCOTT/TIGER SQL> SET AUTOTRACE TRACE SQL> SELECT EMPNO, ENAME, JOB, SAL, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; ID OPERATION NAME ROWS BYTES COST(%CPU) SELECT STATEMENT 14 462 6 (17) 1 MERGE JOIN 2 TABLE ACCESS BY INDEX ROWID DEPT 4 52 2 (0) 3 INDEX FULL SCAN PK_DEPT 1 (0) *4 SORT JOIN 280 4 (25) 5 TABLE ACCESS FULL EMP 3 (0)
SELECT * FROM BIG_EMP; ① ② CALL COUNT CPU ELAPSED DISK QUERY CURRENT ROWS PARSE 1 0.02 EXECUTE 0.00 FETCH 0.03 12 2 10 TOTAL 3 0.05 MISSES IN LIBRAY CACHE DURING PARSE : 0 MISSES IN LIBRAY CACHE DURING EXECUTE: 1 OPTIMIZER HINT : CHOOSE PARSING USER ID : 22(SCOTT) EXECUTION PLAN OPERATION OBJECT SELECT STATEMENTOPTIMIZER=CHOOSE FILTER 2 1 TABLEACCESS(FULL) OF ‘BIG_EMP’ BIG_EMP ① ② - ① CPU는 실제 내가요청한 쿼리의 사용시간이고 ELAPSED는 CPU에 물려있는 총 부호 시간이다. 이점에 유의하고 두 관계의 범위가 커질 수록 구조 쪽 문제가 있을 경우가 크다. - DISK에서 읽혀진 것보다 ② 메모리 공간 내에서 읽혀진 것이 좋으면 두 관계의 범위가 커질 수록 이 역시 구조적인 문제가 크다 ※ SQL문이 실핸될 때 사용되는 CPU 시간과 (QUERY+CURRENT) 블럭수를 줄여나가야 만 보다 빠른 검색 속도를 보장 받을 수 있다.
[튜닝해야 할 SQL문의 분석] SQL>SELECT SQL_TEXT, BUFFER_GETS FROM V$SQLAREA SQL> CONNECT SCOTT/TIGER <TIP! : 화면 포멧 관련 옵션> SQL> COLUMN SQL_TEXT FORMAT A70 SQL> SET LINESIZE 200 SQL>SELECT * FROM BIG_DEPT; SQL>SELECT * FROM BIG_EMP; SQL>SELECT SQL_TEXT, BUFFER_GETS FROM V$SQLAREA WHERE SQL_TEXT NOT LIKE ‘%$%’ AND COMMAND_TYPE IN (2,3,6,7) ← (2:INSERT, 3:SELECT, 6:UPDATE, 7:DELETE) ORDER BY BUFFER_GETS DESC; ※ 사용자가 실행한 SQL문들 중에 가장 많이 메모리에 영역을 사용한 SQL문 순으로 현재 상태를 확인 SQL>SELECT SQL_TEXT, DISK_READS ORDER BY DISK_READSDESC; ※ 가장 많은 디스크 I/O를 유발시킨 SQL문 순으로 현재 상태를 확인하십시오.