Trace 및 TKprof 사용하기
작성자 관리자 작성시간 2007-10-08 17:35:43
 

[SQL Trace]
실행되는 SQL문장에 대해 분석정보를 제공하므로 사용자(프로그래머,..)가
특정 SQL문장을 어떻게 사용해야겠다는 가이드라인을 제공해준다. EXPLAIN PLAN과
병행하여 사용하는 것이 좋다.

다음과 같은 분석정보를 제공한다.
1. parse,execute,fetch수
2. CPU시간/경과된 시간
3. 물리적/논리적 reads
4. 처리된 로우수
5. 라이브러리 캐쉬 misses
6. 파싱이 발생할 때의 사용자
7. 커밋/롤백

SQL_TRACE와 관련된 패러미터는 3가지가 있고,
모두 동적패러미터(dynamic parameter)이다.
----------------------------------------------------------------------
-----------
1. timed_statistics
- CPU시간, 실행시간등 시간에 관련된 정보를 표시하기 위해 사용된다.
- 지속적인 설정을 위해 패러미터파일(init.ora)에 설정하거나
- 세션에서만 임시로 설정하기 위해
  alter session set timed_statistics=true 로 사용할 수 있다.

2. max_dump_file_size
- 트레이스파일의 최대 크기(단위: OS블럭수), 문서에는 500이 디폴트라고 했지만
  실제로는 unlimited였다.
- 지속적인 설정을 위해 패러미터파일(init.ora)에 설정하거나
- 세션에서만 임시로 설정하기 위해 alter session set max_dump_file_size=500 로
  사용할 수 있다.

3. user_dump_dest
- 트레이스파일이 생성될 디렉토리
- 여기서는 /u01/app/oracle/admin/dev/udump라고 가정한다.
- 지속적인 설정을 위해 패러미터파일(init.ora)에 설정하거나
  인스턴스에서만 임시로 설정하기 위해
  alter system set user_dump_dest=/tmp 로 사용할 수 있다.
----------------------------------------------------------------------
-----------

SQL Trace는 세션레벨 혹은 인스턴스레벨에서 enable될 수 있다.
인스턴스레벨에서 모든 SQL을 트레이스하는 경우는 거의 없으므로
DB응용프로그램에서 사용되는 특정 SQL에 대해서만 트레이스하는 것이 일반적이다.
그리고 트레이스를 enable하는것은 당연히 DB의 부하를 발생하는 것이라 필요할때만
사용하고 평상시의 production환경에서는 disable하는 것이 좋다.

----------------------------------------------------------------------
-----------
enable : alter session set sql_trace=true 혹은
        exec dbms_session.set_sql_trace(true)

disable: alter session set sql_trace=false 혹은
        exec dbms_session.set_sql_trace(false)
----------------------------------------------------------------------
-----------

[SQL Trace 사용예제}
alter session set sql_trace=true
alter system set user_dump_dest=/tmp

[TKPROF]

오라클 유틸리티 프로그램으로 OS상에 실행파일로 존재한다.
TKPROF은 SQL Trace가 생성한 트레이스파일을 분석하여
우리가 알아보기 쉬운 출력파일을 생성한다.
SQL문장이 실행될때마다 사용된 리소스량, 로우수 등에 대해 보고한다.

----------------------------------------------------------------------
-----------
(출력 예)

select * from t t1 where object_id=55

call    count      cpu    elapsed      disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.02      0.01          0          0          0          0
Execute      1      0.00      0.00          0          0          0          0
Fetch        1      0.00      0.00          0          4          0          0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.02      0.01          0          4          0          0

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 49 

Rows    Row Source Operation
-------  ---------------------------------------------------
      0  TABLE ACCESS BY INDEX ROWID T
      0  INDEX SKIP SCAN (object id 31310)

----------------------------------------------------------------------
-----------

[TKPROF 사용예제]
위에서 질의했던 것들은 ora_17994.trc라는 트레이스파일에 기록되어 있다.
트레이스파일명은 앞서 말했듯이 파악하기 힘드므로 잘 찾아야 한다.

[oracle@dev2 udump]$ tkprof ora_17994.trc skip_scan_query_report.txt
[oracle@dev2 udump]$ cat skip_scan_query_report.txt

TKPROF: Release 9.0.1.0.0 - Production on Fri Mar 8 20:39:22 2002
(c) Copyright 2001 Oracle Corporation.  All rights reserved.
Trace file: ora_17994.trc
Sort options: default

**************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk    = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows    = number of rows processed by the fetch or execute call
**************************************************************
select *
from
t t1 where object_id=55

call    count      cpu    elapsed      disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.02      0.01          0          0          0          0
Execute      1      0.00      0.00          0          0          0          0
Fetch        1      0.00      0.00          0          4          0          0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.02      0.01          0          4          0          0

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 49 

Rows    Row Source Operation
-------  ---------------------------------------------------
      0  TABLE ACCESS BY INDEX ROWID T
      0  INDEX SKIP SCAN (object id 31310)

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call    count      cpu    elapsed      disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        4      0.03      0.02          0          0          0          0
Execute      6      0.00      0.00          0          0          0          0
Fetch        2      0.07      0.06          0        393        18          0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      12      0.10      0.09          0        393        18          0

Misses in library cache during parse: 2

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call    count      cpu    elapsed      disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00      0.00          0          0          0          0
Execute    24      0.00      0.00          0          0          0          0
Fetch      24      0.00      0.00          0        48          0          0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      50      0.00      0.00          0        48          0          0

Misses in library cache during parse: 0

    6  user  SQL statements in session.
    2  internal SQL statements in session.
    8  SQL statements in session.
**************************************************************
Trace file: ora_17994.trc
Trace file compatibility: 9.00.01
Sort options: default

      1  session in tracefile.
      6  user  SQL statements in trace file.
      2  internal SQL statements in trace file.
      8  SQL statements in trace file.
      5  unique SQL statements in trace file.
    118  lines in trace file.


목록 | 입력 | 수정 | 답변 | 삭제