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라고 하면 됩니다. */ <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
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 |
2013년 8월 13일 화요일
[ORACLEJAVA커뮤니티강좌]오라클 통계정보 해석하기 , SET AUTOTRACE 이용 하기
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기