Site icon DBA의 정석

[튜닝] SQL*Trace 방법

모든 오라클 버전에서 가능한 방법

자기 세션에 대하여

alter session set timed_statistics = true;

alter session set max_dump_file_size = unlimited;

alter session set sql_trace = TRUE;

또는

exec dbms_session.set_sql_trace(TRUE);

또는

alter session set events ‘10046 trace name context forever, level 8’;

— trace 할 SQL 실행 —

alter session set events ‘10046 trace name context off’;

 

다른 세션에 대하여

alter system set timed_statistics = true;

alter system set max_dump_file_size = unlimited;

exec dbms_system.set_sql_trace_in_session(sid, serial#, true);

— trace 할 SQL 실행

exec dbms_system.set_sql_trace_in_session(sid, serial#, false);

 

오렌지 Session Monitor 에서 사용하는 방식

exec dbms_system.set_ev(sid, serial#, 10046, 8, ‘’); <= 8 Level SQL*Trace 설정

exec dbms_system.set_ev(sid, serial#, 10046, 0, ‘’); <= 해제

 

오라클 8.1.6 이상 버전에서 가능한 방법

자기 세션에 대하여 (dbmssupp.sql 실행하여 dbms_support 패키지 생성)

alter session set timed_statistics = true;

alter session set max_dump_file_size = unlimited;

exec sys.dbms_support.start_trace;

또는

exec sys.dbms_support.start_trace(waits=>TRUE, binds=> TRUE)

— trace 할 SQL문장 실행 —

exec sys.dbms_support.stop_trace;

 

다른 세션에 대하여

exec dbms_system.set_bool_param_in_session(sid, serial#, parnam=> ’TIMED_STATISTICS’, bval => true);

exec dbms_system.set_int_param_in_session(sid, serial#, parnam=> ‘MAX_DUMP_FILE_SIZE, intval=>2147483647);

exec sys.dbms_support.start_trace_in_session(sid, serial#);

또는

exec sys.dbms_support.start_trace_in_session(sid, serial#, waits=> true, binds=> true)

— trace 할 SQL문장 실행 —

exec sys.dbms_support.stop_trace_in_session(sid, serial#);

 

오라클 10g 이상 버전에서 가능한 방법

기존 방식처럼 sid, serial# 을 이용하여 세션 기준에 의한 trace 설정

dbmsmntr.sql 을 통해 dbms_monitor 패키지 생성

초기화 파라미터 파일에서 tracefile_identifier = ‘test’ <8.1.7 이상>

=> orcl_ora_560_test.trc

exec dbms_monitor.session_trace_enable (session_id, serial_num, waits, binds);

exec dbms_monitor.session_trace_disable(session_id, serial_num);

service, action, module 기준에 의한 트레이스 설정

exec dbms_monitor.serv_mod_act_trace_enable (service_name, module_name,action_name, waits=>true, binds=>true, instance_name => null);

exec dbms_monitor.serv_mod_act_trace_disable (service_name, module_name,action_name);

<참고> exec dbms_application_info.set_module(‘module name’, ‘action name’);

<참고> exec dbms_application_info.set_action(‘action name’);

 

oradebug를 활용한 방법

O/S 프로세스 ID 혹은 오라클 프로세스 ID 확인

select s.username, p.spid as os_process_id, p.pid as oracle_process_id

from v$session s, v$process p

where s.paddr = p.addr

and s.sid = :sid;

MS-Windows 환경에서는 p.spid 는 스레드 id 이다.

TRACE

alter system set timed_statistics = true;

oradebug setospid <os_process_id>;

또는

oradebug setmypid;

oradebug unlimit;

oradebug event 10046 trace name context forever, level 8;

 

— trace 할 SQL문장 실행 —

<참고> oradebug tracefile_name

oradebug event 10046 trace name context off;

Exit mobile version