메뉴 건너뛰기

bysql.net

1._Explain_Plan

2012.03.26 07:03

남송휘 조회 수:4321


  • 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/tiger

Connected.

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
  • 문서의 잘못된 점이나 질문사항은 본문서에 댓글로 남겨주세요. ^^





번호 제목 글쓴이 날짜 조회 수
26 3._SQL트레이스 sapius 2012.04.04 26836
25 8._Statspack_AWR 시와처 2012.04.01 11468
24 7._Response_Time_Analysis_방법론과_OWI file 시와처 2012.04.01 5733
23 6._V$SYSTEM_EVENT 시와처 2012.04.01 3296
22 4._동시성_구현_사례 [1] dasini 2012.03.27 11678
21 5._오라클_Lock file 시와처 2012.03.26 12566
20 3._비관적_vs._낙관적_동시성_제어 dasini 2012.03.26 6176
19 2._AutoTrace 남송휘 2012.03.26 2913
» 1._Explain_Plan 남송휘 2012.03.26 4321
17 3장._오라클_성능_관리 남송휘 2012.03.26 2884
16 2._트랜잭션_수준_읽기_일관성 file AskZZang 2012.03.20 6133
15 1._트랜잭션_동시성_제어 AskZZang 2012.03.20 4657
14 11._Shared_Pool 박영창 2012.03.19 3153
13 10._대기_이벤트 박영창 2012.03.19 10362
12 9._Snapshot_too_old 박영창 2012.03.19 9722
11 8._블록_클린아웃 시와처 2012.03.19 11986
10 7._Consistent_vs._Current_모드_읽기 file 시와처 2012.03.18 5485
9 2장._트랜잭션과_Lock AskZZang 2012.03.17 5237
8 6._문장수준_읽기_일관성 file 정찬호 2012.03.12 57261
7 4._Redo file 남송휘 2012.03.12 5365