1._Explain_Plan
2012.03.25 22: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 | 3._SQL트레이스 | sapius | 2012.04.03 | 37300 |
25 | 8._Statspack_AWR | 시와처 | 2012.04.01 | 11768 |
24 |
7._Response_Time_Analysis_방법론과_OWI
![]() | 시와처 | 2012.04.01 | 5916 |
23 | 6._V$SYSTEM_EVENT | 시와처 | 2012.04.01 | 3507 |
22 | 4._동시성_구현_사례 [1] | dasini | 2012.03.26 | 11962 |
21 |
5._오라클_Lock
![]() | 시와처 | 2012.03.25 | 12875 |
20 | 3._비관적_vs._낙관적_동시성_제어 | dasini | 2012.03.25 | 6396 |
19 | 2._AutoTrace | 남송휘 | 2012.03.25 | 3138 |
» | 1._Explain_Plan | 남송휘 | 2012.03.25 | 4543 |
17 | 3장._오라클_성능_관리 | 남송휘 | 2012.03.25 | 3117 |
16 |
2._트랜잭션_수준_읽기_일관성
![]() | AskZZang | 2012.03.20 | 6364 |
15 | 1._트랜잭션_동시성_제어 | AskZZang | 2012.03.19 | 4883 |
14 | 11._Shared_Pool | 박영창 | 2012.03.19 | 3395 |
13 | 10._대기_이벤트 | 박영창 | 2012.03.18 | 10624 |
12 | 9._Snapshot_too_old | 박영창 | 2012.03.18 | 9969 |
11 | 8._블록_클린아웃 | 시와처 | 2012.03.18 | 12305 |
10 |
7._Consistent_vs._Current_모드_읽기
![]() | 시와처 | 2012.03.18 | 5708 |
9 | 2장._트랜잭션과_Lock | AskZZang | 2012.03.16 | 5462 |
8 |
6._문장수준_읽기_일관성
![]() | 정찬호 | 2012.03.11 | 57563 |
7 |
4._Redo
![]() | 남송휘 | 2012.03.11 | 5606 |