by 안병훈 [2006.01.25 09:46:38]
특정 테이블을 사용하는 많은 sql 문장들이 있고, 이 문장들이 index를 제대로 타고 있는지 아니면 full scan 하는지를 아는 방법.
1. 사용 SQL문 조회
- v$sql, v$sqlarea, v$sqltext ... etc ... 이용
ex) select *
from v$sqlarea
where sql_text like '%table_name%';
2. EXPLAIN PLAN 사용법 예제 (sql script경로는 OS 또는 install 경로에 따라 다름)
ex)
c:> sqlplus "/as sysdba"
sql> @c:/oracle/ora81/sqlplus/admin/plustrce.sql [plustrce.sql script 실행]
sql> grant plustrace,dba to scott; [dba 권한부여]
sql> connect scott/tiger [DB connect]
sql> @c:/oracle/ora81/rdbms/admin/utlxplan.sql [utlxplan.sql script 실행]
SQL> set autotrace traceonly; [autotrace 설정]
-- traceonly: 출력결과 데이터는 배제
SQL> select * from big_emp where deptno = 10; [대상 SQL문 실행]
5001 개의 행이 선택되었습니다.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'BIG_EMP'
Statistics
----------------------------------------------------------
0 recursive calls
4 db block gets
534 consistent gets
0 physical reads
0 redo size
521889 bytes sent via SQL*Net to client
39830 bytes received via SQL*Net from client
357 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
5336 rows processed
SQL> set autotrace off; [autotrace 해제]