- Auto Trace 

SQL 수행 시에 실제 일량 측정 및 튜닝하는데 유용한 정보들을 많이 포함하는 도구


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
set autotrace on
SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
 
// -- 사용자 계정으로 위와같이 하면 PLUSTRACE 사용 설정을 확인해주어야 한다.
 
SQL> grant plustrace to pasudo;
 
Grant succeeded.
 
SQL> conn pasudo/pasudopass
Connected.
 
SQL> set autot on
SQL> select * FROM emp;
 
     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 18/02/18        800                    20
      7499 ALLEN                SALESMAN                 7698 18/02/18       1600        300         30
      7521 WARD                 SALESMAN                 7698 18/02/18       1250        500         30
      7566 JONES                MANAGER                  7839 18/02/18       2975                    20
      7654 MARTIN               SALESMAN                 7698 18/02/18       1250       1400         30
      7698 BLAKE                MANAGER                  7839 18/02/18       2850                    30
      7782 CLARK                MANAGER                  7839 18/02/18       2450                    10
      7788 SCOTT                ANALYST                  7566 18/02/18       3000                    20
      7839 KING                 PRESIDENT                     18/02/18       5000                    10
      7844 TURNER               SALESMAN                 7698 18/02/18       1500          0         30
      7876 ADAMS                CLERK                    7788 18/02/18       1100                    20
 
     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7900 JAMES                CLERK                    7698 18/02/18        950                    30
      7902 FORD                 ANALYST                  7566 18/02/18       3000                    20
      7934 MILLER               CLERK                    7782 18/02/18       1300                    10
 
14 rows selected.
 
 
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
 
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    14 |  1218 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |  1218 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------
 
Note
-----
   - dynamic sampling used for this statement (level=2)
 
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
          0  redo size
       1630  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         14  rows processed
cs


Auto Trace 옵션

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


1
2
SQL> set autotrace
Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
cs



위의 내용을 살펴보면 

  1. set autotrace on

  2. set autotrace on explain [exp]

  3. set autotrace on statistics [stat]

  4. set autotrace traceonly

  5. set autotrace trace exp

  6. set autotrace trace stat

1번, 2번, 3번은 수행결과를 출력해주어야 하기 때문에 쿼리를 실제 수행한다.
4번, 6번은 실행 통계를 보여주어야 하기 때문에 쿼리를 실제 수행한다.
5번은 실행계획만 출력하면 되므로 실제 수행을 하지 않는다.


내용 이해하기
- Explain
Cost
CBO(Cost-Based Optimizer) 가 쿼리 계획의 각 단계에 할당한 비용을 의미. CBO는 동일한 쿼리에 대해서 다양한 실행경로 및 계획을 생성함으로써 모든 쿼리에 대해 비용을 할당한다.
Rows
해당 쿼리 계획 단계에서 나올 것으로 예상되는 행의 수
Byte
계획의 각 단계가 반환할 것으로 예상되는 데이터의 크기를 바이트로 나타낸 수
Time
각 단계별 수행 시간

- Statistics
recursive calls
사용자의 SQL문을 실행하기 위하여 읽어온 블럭의 수
db block gets
현재 모드(current mode)에서 버퍼 캐시로부터 읽어온 블록의 총 수
consistent gets
버퍼 캐시의 블록에 대한 일관된 읽기의 요청 횟수. 일관된 읽기는 언두 정보, 즉 롤백 정보에 대한 읽기를 요구할 수도 있으며 언두에 대한 읽기도 계산
physical reads
물리적으로 데이터 파일을 읽어 버퍼 캐시에 넣은 횟수 (디스크에서 읽은 수)
redo size
해당 문이 실행되는 동안 생성된 리두의 전체 크기를 바이트 단위로 나타낸 수
bytes sent via SQL*Net to client
서버로부터 클라이언트에 전송된 총 바이트 수
bytes received via SQL*Net from client
클라이언트로부터 받은 총 바이트 수
SQL*Net roundtrips to/from client
클라이언트에서 전송된 SQL*NET 메시지의 총 수, 다중 행 결과 집합으로부터 꺼내오기 위한 왕복을 포함
sorts (memory)
사용자의 세션 메모리(정렬 영역)에서 수행된 정렬 sort_area_size 데이터베이스 맥변수에 의해 제어
sorts (disk)
사용자의 정렬 영역의 크기를 초과하여 디스크(임시 테이블 영역)을 사용하는 정렬
rows processed
수정되거나 select 문으로부터 반환된 행 (조건에 만족하는 로우 수)



Posted by doubler
,