SQL> alter session set sql_trace = true;
SQL> SELECT * FROM emp WHERE empno = 7788;
SQL> SELECT * FROM dual;
SQL> alter session set sql_trace = false;
SELECT r.value || '/' || LOWER(t.instance_name) || '_ora_'
|| ltrim(to_char(p.spid)) || '.trc' trace_file
FROM v$process p, v$session s, v$parameter r, v$instance t
WHERE p.addr = s.paddr
AND r.name = 'user_dump_dest'
AND s.sid = (SELECT sid FROM v$mystat WHERE rownum = 1)
;
TRACE_FILE
-----------------------------------------------------------
rdbms\orcl\orcl\trace/orcl_ora_2444.trc
SQL> alter session set tracefile_identifier ='david'
orcl_ora_2444_manon94.trc
exec dbms_system.set_ev(145,3,10046,12,'');
dbms_monitor.session_trace_enable(
session_id => 145,
serial_num => 3,
waits => true,
binds => true);
end;
/
트레이스 해제 시 session_trace_disable
dbms_monitor.session_trace_disable(
session_id => 145,
serial_num => 3);
end;
/
SQL> alter system set sql_trace = true;
SQL> alter system set sql_trace = flase;
SQL> begin
2 dbms_monitor.serv_mod_act_trace_enable (
3 service_name => 'eCRM' -- 대소문자 구분함
4 ,module_name => dbms_monitor.all_module
5 ,action_name => dbms_monitor.all_actions
6 ,waits => true
7 ,binds => true
8);
SQL> begin
2 dbms_monitor.serv_mod_act_trace_disable (
3 service_name => 'eCRM'
4 ,module_name => dbms_monitor.all_module
5 ,action_name => dbms_monitor.all_actions
8);
C:\Documents and Settings\cbkim>tkprof
Usage: tkprof tracefile outputfile [explain= ] [table= ]
[print= ] [insert= ] [sys= ] [sort= ]
tkprof ora_trace.trc report.prf sys=no
================================================================================
Call Count CPU Time Elapsed Time Disk Query Current Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse 1 0.010 0.018 0 70 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 9 0.640 0.769 0 42864 0 728
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total 11 0.650 0.787 0 42934 0 728
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user: XXX (ID=182)
Rows Row Source Operation
------- ---------------------------------------------------
0 STATEMENT
...
728 HASH JOIN OUTER (cr=32575 r=0 w=0 time=663883 us)
728 NESTED LOOPS (cr=32529 r=0 w=0 time=654975 us)
728 NESTED LOOPS (cr=31071 r=0 w=0 time=649598 us)
728 NESTED LOOPS (cr=29613 r=0 w=0 time=644591 us)
728 TABLE ACCESS BY INDEX ROWID IT (cr=28155 r=0 w=0 time=637907 us)
946 INDEX FULL SCAN DESCENDING ITIND99 (cr=27330 r=0 w=0 time=633707 us)OF ITIND99 (NONUNIQUE)
항목 | 설명 | |
---|---|---|
call | 커서 상태에 따라 Parse, Execute, Fetch 세 개의 Call로 나누어 각각에 대한 통계정보를 보여줌 \- Parse : 커서를 파싱하고 실행계획을 생성하는 데 대한 통계 \- Execute : 커서의 실행 단계에 대한 통계 \- Fetch : 레코드를 실제로 Fetch하는 데 대한 통계 | |
count | Parse, Execute, Fetch 각 단계가 수행된 횟수 | |
cpu | 현재 커서가 각 단계에서 사용한 cpu time | |
elapsed | 현재 커서가 각 단계를 수행하는 데 소요된 시간 | |
disk | 디스크로부터 읽은 블록 수 | |
query | Consistent 모드에서 읽은 버퍼 블록 수 | |
current | Current모드에서 읽은 버퍼 블록수 | |
rows | 각 단계에서 읽거나 갱신한 처리건수 |
실행 통계 | Call |
---|---|
db block gets | current |
consistent gets | query |
physical reads | disk |
SQL*Net roundtrips to/from client | fetch count |
rows processed | fetch rows |
오라클은 다양한 종류의 이벤트 트레이스를 제공하며 설정할 수 있는 레벨 값은 1,4,8,12로 설정 할 수 있음
레벨4 이상으로 설정할 경우 파일의 크기가 급격하게 커질 수 있으므로 주의해야함
레벨 | 설명 |
---|---|
레벨1 | Default |
레벨4 | Bind Values |
레벨8 | Waits |
레벨12 | Bind Values & Waits |
Elapsed Time은 Call 단위로 측정이 이루어 짐
Elapsed Time = CPU Time + Wait Time
= Response시점 - Call 시점
SELECT문을 사용하는동안 3번의 Call이 발생하고 DML문은 2번의 Call이 발생함
* SELECT문 = Parse Call + Execute Call + Fetch Call
* DML문 = Parse Call + Execute Call
하나의 SQL을 수행할 때 Total Elapsed Time은 수행 시 발생하는 모든 Call의 Elapsed Time을 더해서 구함
트레이스 레벨을 8로 설정 하면 이벤트 발생 현황까지 확인 가능함
wait event | 설명 |
---|---|
SQL*Net message to client | Client에게 메세지 송신후 Client로 부터 메세지 수신 완료 신호가 정해진 시간보다 늦게 도착한 경우 발생 |
db file sequential read | Single Block I/O 시 발생 |
SQL*Net message from client | 오라클 서버 프로세스가 사용자에게 결과를 전달하고 다음 Fetch Call이 올때 까지 대기한 시간을 더한 값 |
SQL*Net more data from client | Client에게 전송할 데이터가 남았는데 네트워크 부하로 전송하지 못할 때 발생하는 대기 이벤트 |