AutoTrace

SQL 튜닝 시 유용한 정보들을 많이 포함하고 있어 가장 즐겨 사용하는 도구 중 하나


SQL> set autotrace on
SQL> select * from scott.emp where empno=7900;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO      //쿼리수행결과
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 81/12/03        950                    30


Execution Plan
----------------------------------------------------------

---------------------------------------------------------------------------           //실행계획
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    37 |     1   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    37 |     1   (0)|
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)|
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("EMPNO"=7900)


Statistics
----------------------------------------------------------                       //실행통계
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        750  bytes sent via SQL*Net to client
        405  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL> set autot off

아래와 같은 옵션에 따라 필요한 부분만 출력해 볼 수 있음

실제수행여부수행결과실행계획실행통계
(1) set autotrace onOOOO
(2) set autotrace on explainOOO
(3) set autotrace on statisticsOOO
(4) set autotrace traceonlyOOO
(5) set autotrace traceonly explainO
(6) set autotrace traceonly statisticsOO

(1)~(3)수행 결과를 출력 해야 하므로 쿼리를 실제 수행
(4),(6)실행 통계를 보여줘야 하므로 쿼리를 실제 수행
(5) 번은 실행 계획만 출력하면 되므로 실제 수행하지 않음

AutoTrace 필요 권한

(1) 실행계획 확인 용도로만 (Plan_Table만 생성)
(2) 실행통계 까지 확인 하려면
v_$sesstat, v_$statname, v_$mystat 뷰에 대한 읽기 권한이 필요
dba, select_catalog_role 등의 롤을 부여받지 않은 사용자의 경우 별도의 권한 설정이 필요
TIP!
plustrace 롤을 생성하고 롤을 부여하는 것이 편리


SQL> @?/sqlplus/admin/plustrace.sql
SQL> grant plustrace to scott;

참고

autotrace on statistics

  • 새로운 세션이 현재 세션의 통계정보를 대신 쿼리해서 보여줌
    ( 같은 세션 수행 시, 세션통계를 쿼리할 때의 수행통계까지 뒤섞이기 때문에 별도의 세션 사용)
    쿼리 실행전의 수행통계정보와 쿼리 실행 후 수행통계와의 Delta 값을 계산해서 보여줌

SQL> @session
USERNAME   PROGRAM     STATUS
--------- ------------ -------
SCOTT     sqlplus.exe  ACTIVE     //한개의 세션이 존재



SQL> set autotrace on statistics  //statistics옵션 활성
SQL> @session
USERNAME   PROGRAM     STATUS
--------- ------------ -------
SCOTT     sqlplus.exe  ACTIVE     
SCOTT     sqlplus.exe  ACTIVE     //새로운 세션이 추가됨



SQL> set autotrace on explain     //explain 옵션 활성
SQL> @session
USERNAME   PROGRAM     STATUS
--------- ------------ -------
SCOTT     sqlplus.exe  ACTIVE     
                                  //새롭게 열렸던 세션이 사라짐



참조문서

서적(오라클 성능 고도화 원리와해법 I) : http://book.daum.net/detail/book.do?bookid=KOR9788996246015