1._Explain_Plan
2012.03.26 07:03
- explain plan
- SQL을 수행하기 전에 실행 계획을 확인
- plan_table 생성
SQL> @?/rdbms/admin/utlxplan.sql
Table created.
SQL> select owner,synonym_name, table_owner, table_name
2 from all_synonyms
3 where synonym_name='PLAN_TABLE';
OWNER SYNONYM_NAME
------------------------------ ------------------------------
TABLE_OWNER TABLE_NAME
------------------------------ ------------------------------
PUBLIC PLAN_TABLE
SYS PLAN_TABLE$
※ ? : $ORACLE_HOME
- 오라클 10g 는 기본적으로 sys.plan_table$ 테이블 및 public synonym을 기본적으로 생성
- explain plan for 명령을 수행하면 plan_table에 저장
SQL> conn scott/tigerConnected.
SQL> explain plan set statement_id='qyery1' for
2 select * from emp where empno=7900;
Explained.
SQL> set linesize 200
SQL> @?/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------
Plan hash value: 2949544139
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 38 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 38 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
2 - access("EMPNO"=7900)
14 rows selected.
SQL>
- oracle 9i 이상 부터 utlxpls.sql 또는 utlxplp.sql 스크립트를 이용
- 사용하는 SQL 문을 대상으로 매일 explain plan 명령을 수행해 그 실행계획을 별도 테이블로 저장
- 안정적인 시스템 운영 및 성능 관리에 활용
- 인덱스 구조를 바꾸고자 할때 해당 인덱스를 사용하는 쿼리 목록을 뽑아 사전 점검을 실시할수 있음
- 통계정보가 어느날 갑자기 나빠질경우 실행계획을 빨리 확인하고 튜닝 가능
- sql repository 테이블을 사용할 경우
repository 테이블 저장 스크립트 예
create table sql_repository ( sql_id varchar2 (30), sql_text varchar2 (4000) );
begin
for c in (select sql_id,sql_text from sql_repository)
loop
execute immediate 'explain plan set statement_id = ''' || c.sql_id
|| ''' into sql_plan_repository'
|| ' for ' || c.sql_text;
commit;
end loop;
end;
/
- 오라클 고도화 원리와 해법 2 (bysql.net 2012년 1차 스터디)
- 작성자: 남송휘 (tofriend)
- 최초작성일: 2012년 3월 25일
- 본문서는 bysql.net 스터디 결과입니다 .본 문서를 인용하실때는 출처를 밝혀주세요. http://www.bysql.net
- 문서의 잘못된 점이나 질문사항은 본문서에 댓글로 남겨주세요. ^^
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
26 | 5장._데이터베이스_Call_최소화_원리 | 운영자 | 2012.05.07 | 4321 |
25 | 1._Call_통계 | 정찬호 | 2012.05.07 | 4310 |
24 | 5._바인드_변수의_중요성 | 시와처 | 2012.04.23 | 4299 |
23 | 10._Dynamic_SQL_사용_기준 | 남송휘 | 2012.05.07 | 4276 |
22 | 2._Memory_vs._Disk_IO | 정찬호 | 2012.05.23 | 4167 |
21 | 7._Result_캐시 | 운영자 | 2012.05.27 | 4157 |
20 | 8._IO_효율화_원리 | 운영자 | 2012.06.06 | 4121 |
19 | 3._Deterministic_함수_사용_시_주의사항 | 정찬호 | 2012.05.29 | 4091 |
18 | 1._Library_Cache_Lock_Pin | 남송휘 | 2012.05.21 | 3964 |
17 | 3._Single_Block_vs._Multiblock_IO | 정찬호 | 2012.05.23 | 3960 |
16 | 1._블록_단위_IO | 정찬호 | 2012.05.22 | 3925 |
15 | 6장._IO_효율화_원리 | 정찬호 | 2012.05.22 | 3808 |
14 | 4._Array_Processing_활용 | 시와처 | 2012.05.14 | 3770 |
13 | 11._Static_SQL_구현을_위한_기법들 | dasini | 2012.05.07 | 3736 |
12 | 1._SQL과_옵티마이저 | dasini | 2012.04.06 | 3612 |
11 | 4._Prefetch | 남송휘 | 2012.05.21 | 3596 |
10 | 8._PLSQL_함수_호출_부하_해소_방안 | 남송휘 | 2012.05.21 | 3457 |
9 | 3._데이터베이스_Call이_성능에_미치는_영향 | 시와처 | 2012.05.13 | 3382 |
8 | 6._V$SYSTEM_EVENT | 시와처 | 2012.04.01 | 3311 |
7 | 11._Shared_Pool | 박영창 | 2012.03.19 | 3163 |