메뉴 건너뛰기

bysql.net

1. Explain Plan

2010.06.06 11:08

실천하자 조회 수:14666

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 5. Direct Path I/O file balto 2010.07.10 12191
26 8. 블록 클린아웃 휘휘 2010.05.31 12287
25 7. PL/SQL 함수의 특징과 성능 부하 실천하자 2010.07.12 12606
24 6. RAC 캐시 퓨전 file 토시리 2010.07.19 12631
23 10. V$SQL 실천하자 2010.06.14 12680
22 8. Statspack / AWR balto 2010.06.13 12768
21 1. Library Cache Lock file balto 2010.07.17 12803
20 7. Result 캐시 휘휘 2010.07.19 12969
19 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14030
» 1. Explain Plan 실천하자 2010.06.06 14666
17 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14674
16 3. 버퍼 Lock [1] 휘휘 2010.05.24 15232
15 9. ASH(Active Session History) 실천하자 2010.06.14 15608
14 2. SQL 처리과정 file 휘휘 2010.06.28 15674
13 5. Fetch Call 최소화 file 휘휘 2010.07.05 16851
12 1 장. 오라클 아키텍처 운영자 2010.05.20 17850
11 4. Array Processing 활용 file 휘휘 2010.07.05 18250
10 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18347
9 11. Shared Pool file 실천하자 2010.05.31 18512
8 5. Undo file 토시리 2010.05.31 18661