(1) 자기 세션에 트레이스 걸기
  • 자신이 접속해 있는 세션에만 트레이스를 거는 방법이다.

alter session set sql_trace = true; --트레이스 걸기
select * from emp where empno = 7900; --SQL 실행
select * from dual; --SQL 실행
alter session set sql_trace = false; --걸어놓은 트레이스 해제

=> 그러고 나면, 지정된 서버 디렉토리에 트레이스파일(.trc)이 생성
하지만, 트레이스파일을 직접분석하기에는 대략난감.
그러므로 TKProf유틸리티를 사용하여, 분석하기 쉽도록 이쁘게 포맷팅해서 보면 됨.


tkprof ora10g_ora14370_oraking.trc report.prf sys=no

=> ora10g_ora14370_oraking.trc 파일을 예쁘게 포맷팅해서 report.prf으로 만들어주고, SQL을 파싱하는 과정에서 내부적으로 수행되는 SQL은 제외한다(sys=no).
=> 그리고, 예쁘게 만든 파일 분석하기

  • Call통계 컬럼들의 의미
항목설명
call커서 상태에 따라 Parse, Execute, Fetch 세 개의 Call로 나누어 각각에 대한 통계정보를 보여준다.

\- Parse : 커서를 파싱하고 실행계획을 생성하는 데 대한 통계

\- Execute : 커서의 실행 단계에 대한 통계

\- Fetch : 레코드를 실제로 Fetch하는 데 대한 통계
countParse, Execute, Fetch 각 단계가 수행된 횟수
cpu현재 커서가 각 단계에서 사용한 cpu time
elapsed현재 커서가 각 단계를 수행하는 데 소요된 시간
disk디스크로부터 읽은 블록 수
queryConsistent 모드에서 읽은 버퍼 블록 수
currentCurrent모드에서 읽은 버퍼 블록수
rows각 단계에서 읽거나 갱신한 처리건수
  • Auto Trace의 실행통계 항목과 비교하기
db block getscurrent
consistent getsquery
physical readsdisk
SQL*Net roundtrips to/from clientfetch count
rows processedfetch rows
  • 오라클은 오래전부터 다양한 종류의 이벤트 트레이스를 제공해 왔고, 이를 통해서도 SQL트레이스를 걸수 있다.
(2) 다른 세션에 트레이스 걸기
  • 성능문제가 발생한 SQL이 확보되지 않았다면, 커넥션 Pool에 놓인 세션 또는 시스템 레벨로 트레이스를 걸어 SQL정보를 수집해야한다.
(3) Service, Module, Action단위로 트레이스 걸기
  • 최근의 n-TIer 주고의 애플리케이션은 WAS에서 DB와 미리 맺어놓은 커넥션 풀에서 세션을 할당받으므로 특정 프로그램 모듈이 어떤 세션에서 실행될지 알수 없고, 한 모듈내에서 여러 SQL을 수행할때 각각 다른 세션을 통해 처리될 수도 있다.
  • 그러므로 한모듈만 트레이스를 거는것도 어렵고, WAS에서 맺은 세션에만 크레이스를 건 다음에 모든 트레이스 파일을 뒤져 찾는것도 어렵다.
  • 10g부터 service, module, action별로 트레이스를 설정하고 해제할 수 있는 dmms_monitor패키지가 소개되면서 위의 불편함이 사라진다.