메뉴 건너뛰기

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. 실행계획을 별도 테이블로 저장 및 활용