|
구로디지털
오엔제이프로그래밍실무교육센터
(오라클,자바프레임워크
전문 강의)
SET AUTOTRACE 이용 하기
SQL*Plus에서 사용자는 자동으로 Optimizer에서 실행계획과 통계정보를
얻을 수 있습니다. 이런 경우 AUTOTRACE를 사용하며
DML문을 성공적으로 수행 시 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주
이용 됩니다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이
존재해야 하며 구문을 활성화 하기 위해 SET AUTOTRACE ON, 비활성화 하기위해 SET AUTOTRACE OFF하고 하면 됩니다. 참고로 SET AUTOTRACE에서 사용 할 수 있는 옵션은 다음과 같습니다.
SET AUTOTRACE OFF : 기본값으로 AUTOTRACE를 수행하지 않습니다.
SET AUTOTRACE ON EXPLAIN : 실행계획만을 출력
SET AUTOTRACE ON STATISTICS : 통계정보만을 출력
SET AUTOTRACE ON : 옵티마이저의 실행계획과 통계정보, 질의의 실행
결과를 함께 출력
SET AUTOTRACE TRACEONLY [EXPLAIN] : SET AUTOTRACE ON과 유사하지만 옵티마이저의 실행계획과
통계정보를 출력, 만약 EXPAIN이라고 하면 실행계획만
출력 합니다.
SQL> conn / as sysdba
연결되었습니다.
SQL> @d:\app\A\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL>
SQL> drop role plustrace;
drop role plustrace
*
1행에 오류:
ORA-01919: 롤 'PLUSTRACE'(이)가
존재하지 않습니다
SQL> create role plustrace;
롤이 생성되었습니다.
SQL>
SQL> grant select on v_$sesstat to plustrace;
권한이 부여되었습니다.
SQL> grant select on v_$statname to plustrace;
권한이 부여되었습니다.
SQL> grant select on v_$session to plustrace;
권한이 부여되었습니다.
SQL> grant plustrace to dba with admin option;
권한이 부여되었습니다.
SQL>
SQL> set echo off
SQL> grant plustrace to scott;
권한이 부여되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> @d:\app\A\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlxplan.sql
테이블이 생성되었습니다.
여기 까지 하면 SQL*Plus에서 TRACE 하기위한 plustrace 롤을 SCOTT 이 부여 받았고 , 실행계획을 저장 할 테이블인 PLAN_TABLE도 생성된다.
/*
아래 set autotrace on은 SQL문이 실행될 때 마다 실행 계획과 통계정보, 그리고 SQL의 실행 결과까지 보기 위해서 입니다.
만약 set autotrace
trace라고만 하면 실행 계획과 통계정보만 보여 줍니다.
기능을 해제하기 위해서는 OFF라고 하면 됩니다.
*/
SQL>set autotrace trace --쿼리 결과는 안 나온다.
SQL> select * from emp;
14 개의 행이 선택되었습니다.
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id
| Operation | Name |
Rows | Bytes | Cost (%CPU)|
Time |
--------------------------------------------------------------------------
|
0 | SELECT STATEMENT | |
14 | 532 | 3
(0)| 00:00:01 |
|
1 | TABLE ACCESS FULL|
EMP | 14 |
532 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1
recursive calls
0
db block gets
8
consistent gets
0
physical reads
0
redo size
1467
bytes sent via SQL*Net to client
415
bytes received via SQL*Net from client
2
SQL*Net roundtrips to/from client
0
sorts (memory)
0
sorts (disk)
14
rows processed
SQL> set autotrace off --trace 기능 해제
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> set autotrace
on;
SQL> select deptno,
min(sal) from emp
2 group by deptno
3 having min(sal) > (select min(sal) from emp
4
where deptno = 30)
5 order by deptno;
DEPTNO MIN(SAL)
---------- ----------
10
1300
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT
Optimizer=CHOOSE
1 0 FILTER
2 1 SORT (GROUP
BY)
3 2
TABLE ACCESS (FULL) OF 'EMP'
4 1 SORT
(AGGREGATE)
5 4
TABLE ACCESS (FULL) OF 'EMP'
Statistics
----------------------------------------------------------
191 recursive
calls //재귀호출의 횟수
5 db block gets
//현재의 블록이 요구된 횟수
(DML
or SELECT FOR UPDATE등에 의한 current mode로 읽힌 블록 수)
28 consistent
gets //한 블록에 대해 요구된 consistent read 횟수
(SELECT했을 때 읽기 일관성 모드로 읽힌 블록 수)
7 physical
reads //디스크로부터 읽어들인 데이터 블록의 총 개수
0 redo
size 리두로그가 만들어진 크기(SIZE)
448 bytes sent
via SQL*Net to client //Client에 보내진 바이트수
503 bytes
received via SQL*Net from client //client로부터 받은 바이트 수
2 SQL*Net
roundtrips to/from client //클라이언트에
송/수신된 Net메시지 합계 수
3 sorts
(memory) //메모리에서 일어난 소트의 수
0 sorts (disk) //디스트에서
일어나 소트의 수
1 rows processed //연산을
하는 동안 처리한 ROW의 수
재귀적 호출이란, 오라클은 내부 처리를 위한 테이블을 관리 하며 이 테이블을 변화
시킬 때 내부적인 SQL문장을 생성하는데 이를 재귀적인 호출이라고 합니다. 예를 들면 테이블의 존재나 권한의 체크 등을 위한 SQL
[출처]오라클자바커뮤니티
www.oraclejavacommunity.co.kr
|
댓글 없음:
댓글 쓰기