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*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 횟수
28 consistent gets //한 블록에 대해 요구된 consistent read 횟수
(SELECT했을 때 읽기 일관성 모드로 읽힌 블록 수)
7 physical reads //디스크로부터 읽어들인 데이터 블록의 총 개수
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
자바
오라클/빅데이터
아이폰/안드로이드
닷넷/WPF
표준웹/HTML5
채용/취업무료교육
초보자코스
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
댓글 없음:
댓글 쓰기