메뉴 건너뛰기

bysql.net

1. Explain Plan

2010.06.06 11:08

실천하자 조회 수:14663

Chap03 오라클 성능 관리 Intro



 DB 튜너

의사

 Explain Plan

 X-ray

 AutoTrace

 CT촬영

 실제일량 측정 및 SQL 트레이스

 MRI

 쿼리 변환 및 옵티마이저 힌트

 외용약 및 내복약 처방

 인덱스 조정

 칼을 대지 않는 시술

 반정규화 및 진계 테이블 생성

 칼을 대는 절개수술



실행계획

  • explain plan 명령 사용
    • 조건 : plan_table 필요 (oracle 10g 부터 설치 시 기본적으로 생성 - sys.plan_table$)
    • 사용 ("set statement_id =" 생략 가능)
sql> explain plan set statement_id = 'query1' for
       select * from emp where empno = 7900;

      • 과거
        • plan_table 의 정보를 포맷팅하기 위해선 별도 SQL 요구  ☞  스크립트로 저장 후 호출
      • 현재
        1. 내부적으로 명령 수행 처리 
        2. plan_table 의 정보 포맷팅
        3. Autotrace 및 쿼리 툴에서 실행계획 출력


  • 실행계획 결과를 포맷팅하는 Sql

SELECT lpad(id, 4, ' ') || nvl(lpad(parent_id, 6, ' '), '      ')   
    || '  ' || lpad(' ', (level-1)*2, ' ')                          
    || operation || nvl2(options, ' (' || options || ')', '')       
    || nvl2(object_name, ' OF '''                                   
    || object_owner || '.' || object_name, NULL)                    
    || nvl2(object_name, '''', '')                                  
    || decode(parent_id, null, ' Optimizer=' || optimizer)          
    || (case                                                        
        when cost is null and cardinality is null and bytes is null 
        then ''                                                     
        else  ' (' || nvl2(cost, 'Cost=' || cost, '')               
                   || nvl2(cardinality, ' Card=' || cardinality, '')
                   || nvl2(bytes, ' Bytes=' || bytes, '')           
                   || ')' end) "Execution Plan"                     
FROM   plan_table p                                                 
START WITH statement_id = 'query1' AND id = 0                       
CONNECT BY prior id = parent_id AND prior statement_id = statement_id
ORDER BY id ;  


  • 9i 부터 제공하는 실행계획 스크립트 : utlxpls.sql, utlxplp.sql
  • 시스템 운영 및 성능관리 Tip

1. SQL을 하드코딩으로 하지 않고 XML 포맷으로 별도 Repository에 저장

2. SQL Repository 저장 SQL에 대해 매일 explain plan 명령을 수행

3. 실행계획을 별도 테이블로 저장 및 활용








번호 제목 글쓴이 날짜 조회 수
27 9. ASH(Active Session History) 실천하자 2010.06.14 15607
26 8. Statspack / AWR balto 2010.06.13 12766
25 7. Response Time Analysis 방법론과 OWI file balto 2010.06.13 8062
24 5. 오라클 Lock file 휘휘 2010.06.07 26368
23 4. 동시성 구현 사례 토시리 2010.06.07 10932
22 3. 비관적 vs. 낙관적 동시성 제어 휘휘 2010.06.07 8210
21 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19568
20 4. DBMS_XPLAN 패키지 balto 2010.06.06 10461
19 3. SQL 트레이스 file balto 2010.06.06 21175
18 3장. 오라클 성능 관리 운영자 2010.06.06 6694
17 2. AutoTrace 실천하자 2010.06.06 8597
» 1. Explain Plan 실천하자 2010.06.06 14663
15 2장. 트랜잭션과 Lock 운영자 2010.06.01 6895
14 6. 문장수준 읽기 일관성 file 토시리 2010.06.01 10432
13 1. 트랜잭션 동시성 제어 실천하자 2010.05.31 8631
12 5. Undo file 토시리 2010.05.31 18650
11 11. Shared Pool file 실천하자 2010.05.31 18511
10 8. 블록 클린아웃 휘휘 2010.05.31 12283
9 7. Consistent vs. Current 모드 읽기 휘휘 2010.05.31 10537
8 10. 대기 이벤트 balto 2010.05.30 8010