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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
46 | 3._비관적_vs._낙관적_동시성_제어 | dasini | 2012.03.26 | 6185 |
45 | 2._트랜잭션_수준_읽기_일관성 | AskZZang | 2012.03.20 | 6145 |
44 | 9._ASH(Active_Session_History) | 정찬호 | 2012.04.09 | 6071 |
43 | 2._Cursor_Sharing | 운영자 | 2012.05.28 | 5991 |
42 | 7._Response_Time_Analysis_방법론과_OWI | 시와처 | 2012.04.01 | 5743 |
41 | 4._DBMS_XPLAN_패키지 | AskZZang | 2012.04.04 | 5610 |
40 | 7._Consistent_vs._Current_모드_읽기 | 시와처 | 2012.03.18 | 5500 |
39 | 9._Static_vs._Dynamic_SQL | 남송휘 | 2012.05.07 | 5426 |
38 | 4._Redo | 남송휘 | 2012.03.12 | 5379 |
37 | 2장._트랜잭션과_Lock | AskZZang | 2012.03.17 | 5251 |
36 | 8._애플리케이션_커서_캐싱 | 박영창 | 2012.04.22 | 5242 |
35 | 3._라이브러리_캐시_구조 | dasini | 2012.04.06 | 5232 |
34 | 1_장._오라클_아키텍처 | AskZZang | 2012.03.02 | 4990 |
33 | 5._Fetch_Call_최소화 [1] | 박영창 | 2012.05.15 | 4809 |
32 | 1._트랜잭션_동시성_제어 | AskZZang | 2012.03.20 | 4667 |
31 | 6._바인드_변수의_부작용과_해법 | 시와처 | 2012.04.23 | 4645 |
30 | 5._V$SYSSTAT | AskZZang | 2012.04.04 | 4599 |
29 | 12._데이터베이스_성능_고도화_정석_해법 | 남송휘 | 2012.04.09 | 4574 |
28 | 2._User_Call_vs._Recursive_Call | 정찬호 | 2012.05.07 | 4427 |
» | 1._Explain_Plan | 남송휘 | 2012.03.26 | 4330 |