실전 Oracle 성능 분석! AUTOTRACE vs SQL Trace 차이와 활용법 (tkprof 포함)
오라클 튜닝을 공부하다 보면 가장 먼저 부딪히는 벽이 바로 **"실행계획이 뭐지?"**
그리고 그 다음엔 이런 생각이 들죠.
> 이 쿼리 진짜 느린데, 왜 느린지는 모르겠네…
그래서 오늘은 실무와 튜닝 공부에서 정말 많이 쓰이는 두 가지 기능인
**AUTOTRACE**, **SQL TRACE + tkprof** 에 대해 정리해봤습니다.
1️⃣ AUTOTRACE란?
AUTOTRACE는 SQL을 실행하면, 그 결과와 함께 **실행계획 + 통계 정보**를 보여주는 도구입니다.
SQL*Plus 또는 Oracle SQL Developer에서 사용 가능합니다.
- TABLE ACCESS FULL, INDEX RANGE SCAN 같은 실행계획 키워드를 볼 수 있어요.
- 특히 Rows, Cost, Time 정보를 보면서 쿼리 효율을 체크할 수 있습니다.
0. SQL*Plus 실행 및 로그인 진행
1. autotrace on 설정하기
ALTER SESSION SET SQL_TRACE = TRUE;
2. sql 실행하기(태스트용 테이블_emp을 조회하면서 발생하는 실행 계획 보기 위해서 DML 활용)
SELECT * FROM EMP;
3. autotrace off하기
ALTER SESSION SET SQL_TRACE = FALSE;
4. trc파일 위치 확인하기
SELECT value FROM v$diag_info WHERE name = 'Default Trace File';
응답값으로 폴더위치가 나옵니다.
예시: ~~\trace\orcl_ora_123456.trc
5.CMD(명령어 프롬프트)을 열어서 4번에 나온 trc폴더 위치로 이동(trace 폴더까지만 이동)
cd C:\APP\C\사용자이름\diag\rdbms\orcl\orcl\trace
6. 이어서 trc폴더에서 명령어 하나 입력(사용자가 볼 수 있게 txt로 변환)
tkprof orcl_ora_123456.trc output.txt
tkprof orcl_ora_5번에 나온 수치.trc output.txt
7. output.txt 생성 확인
Trace file: orcl_ora_123456.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
EMP
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 83 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1335 0.00 0.02 0 1466 0 20000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1337 0.00 0.02 0 1549 0 20000
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 9
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
20000 20000 20000 TABLE ACCESS FULL EMP (cr=1466 pr=0 pw=0 time=25668 us starts=1 cost=39 size=2129673 card=24479)
********************************************************************************
SQL TRACE + tkprof란?
AUTOTRACE가 한 번의 쿼리를 분석한다면,
SQL TRACE는 전체 세션의 모든 SQL 실행을 추적해주는 기능이에요.
트레이스 결과는 .trc 파일로 저장되며, Oracle이 제공하는 tkprof로 사람이 읽기 좋게 변환합니다.
tkprof 해석 예시
- query: 논리적 블록 읽기
- disk: 실제 디스크 접근 횟수
- rows: 반환된 레코드 수
- cpu, elapsed: 처리 시간
✅ 실제로 인덱스를 탔다면 INDEX UNIQUE SCAN 같은 문구도 뜹니다!
실습 사례 정리
이번 글을 위해 직접 테스트도 진행해봤습니다.
- EMP 테이블에 2만 건 데이터 삽입
- ORA-01438, ORA-00001 오류 발생 및 해결
- PRIMARY KEY 제약 조건 수정
- AUTOTRACE 및 tkprof 분석 수행