1. Session Level
ALTER SESSION SET 패러미터명 = TRUE;
2. Instance Level
initSID.ora 파일에 설정(패러미터명=TRUE)
=> 인스턴스레벨로 Trace를 수행시키면 전체적인 성능이 2,30% 감소하는 등 성능상 문제가 발생할 수 있어 사용하지 않는 것이 좋다.
alter session set tracefile_identifier='oraking';
파일 뒤쪽에 oraking 식별자가 붙게 되어 확인하려고 하는 트레이스 파일을 손쉽게 찾아볼 수 있다.
$cd /usr/local/oracle/admin/ORA10g/udump
$ls -lt *oraking.trc
-rw-r----- 1 oracle dba 4422 May 17 2008 ora10g_ora_14370_oraking.trc
TKPROF tracefile outputfile
[SORT = parameters]
[PRINT = number]
[EXPLAIN = username/password]
TKPROF ora_12343.trc trc1.txt SORT=(EXECPU) [EXPLAIN = scott/tiger]
로우/컬럼 | 설 명 |
---|---|
Parse | sql문이 파싱되는 단계에 대한 통계. 새로 파싱을 했거나 Shared SQL Pool에서 찾아 온 것도 같이 포함된다. |
Execute | sql문의 실행 단계에 대한 통계. UPDATE, DELETE, INSERT 문은 여기에 수행한 결과가 나타난다. 전체범위방식으로 처리된 결과가 여러 건인 경우는 주로 여기에 많은 값이 나타나며 Fetch 에는 아주 적은 값이 나타난다. |
Fetch | sql 문이 실행되면서 페치된 통계. 부분범위방식으로 처리된 select 문들이나 전체범위처리를 한 후 한 건을 추출하는 경우 (전체 집계, Count 등)는 주로 여기에 많은 값들이 나타나고 Execute에는 아주 적은 값이 나타난다. |
Count | sql문이 파싱된 횟수, 실행된 횟수, 페치가 수행된 횟수 |
CPU | parse,execute,fetch가 실제로 사용한 CPU 시간 (1/100초 단위) |
Elapsed | 작업의 시작에서 종료시까지 실제 소요된 시간 |
Disk | 디스크에서 읽혀진 데이터 블럭의 수 |
Query | 메모리내에서 변경되지 않은 블럭을 읽거나 다른 세션에 의해 변경되었으나 아직 commit되지 않아 복사해 둔 스냅샷 블럭을 읽은 블럭수. select 문에서는 거의가 여기에 해당하며 Update, Delete, Insert 시에는 소량만 발생한다. |
Current | 현 세션에서 작업한 내용을 commit하지 않아 오로지 자신에게만 유효한 블럭을 액세스한 블럭 수로 주로 Update, Delete, Insert 작업시 많이 발생한다. select 문에서는 거의 없거나 아주 적은 양인 경우가 대부분이다. |
Rows | sql문을 수행한 결과에 의해 최종적으로 액세스된 로우의수 (만약 쿼리인 경우라면 서브쿼리에 의해서 추출된 로우는 제외됨) |
db block gets = current
consistent gets = query
physical reads = disk
SQL*Net roundtrips to/from clint = fetch count
row processed = fetch rows
10g부터 service, module, action별로 트레이스를 설정할 수 있는 패키지가 소개되었다.
패키지: dbms_monitor
프로시저: serv_mod_act_trace_enable
커넥션 풀을 사용하는 어플리케이션의 경우 유용하게 사용할 수 있으며
기존에 맺은 세션뿐 아니라 새롭게 맺어지는 세션에 대해서도 자동으로 트레이스가 걸린다.
-- create objects
create table testtrc as
select rownum as rnum, object_name
from all_objects
where rownum <= 500000;
create table test_master as
select object_id, owner, object_name
from all_objects
where length(object_name) <= 5;
create index idx_testtrc on testtrc(object_name);
create index idx_master on test_master(owner);
analyze table testtrc compute statistics;
analyze index idx_testtrc compute statistics;
analyze table test_master compute statistics;
analyze index idx_master compute statistics;
alter session set sql_trace = true;
select rnum, b.object_name, object_id, owner
from testtrc.testtrc a, testtrc.test_master b
where a.object_name = b.object_name
and b.owner = 'SYS'
union
select sum(rnum), min(b.object_name), avg(object_id), max(owner)
from testtrc.testtrc a, testtrc.test_master b
where a.object_name = b.object_name
order by 4,1,3,2 desc;
disk, query, current의 숫자는 적을수록 좋다.
이 숫자들이 크다는 것은 메모리 공유 영역의 적중률(Hit Ratio)이 낮다는 것을 의미