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
|
댓글 없음:
댓글 쓰기