by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

About 10053 Event




10053 Event

  • 정의
    1. CBO의 Optimization 과정을 Trace 파일에 출력
    2. 목적 : Query Transformation이 점점 복잡해지면서 low level의 troubleshooting tool의 필요성이 제기 됨
             query 수행 시작부터 결과를 보여주기까지의 과정을 알 수 있다.

  • 특징
    1. 10g 이전 버전 : PL/SQL 블록에 포함된 쿼리문에 대해서는 10053 트레이스 기능 작동 안 함
    2. 10gR1과 10gR2의 차이점 : 섹션의 순서가 다르고, 여러 가지 설명 추가 및 시스템 통계가 기록되고, 조건절 및 개요와 함께 최종 실행 계획이 포함됨
    3. Oracle의 공식문서에는 사용법 없음
    4. user_dump_dest 에 "*.trc" 파일 생성
    5. CBO인 경우에만 나옴 , RBO는 sql문장만 보임
      1. RBO 에 Parse 되었다면 QUERY Section 이 보여지 않는다.
      2. RBO 에 의해서 Parse 되는 3가지 이유
        1. optimzer_mode 혹은 optimizer_goal 이 rule 일 경우
        2. hint "rule" 이 사용된 경우
        3. 문장에서 사용된 테이블 중에 통계정보도 전혀 없고, 힌트도 전혀 사용되지 않은 경우( rule 관련 힌트는 rule 뿐!!)
    6. Display형태가 암호화 같이 가독성 어려움
    7. CBO가 어떤 factor를 고려해서 작동하는가를 보여줌
      1. Oracle Version / Parameter 변경에 따른 Optimizer 선택을 확인 할수 있다.
    8. 다른 Trace 와 다르게, 10053 Level 2의 경우 Level 1 보다 적은 Trace 를 생성한다.
    9. 10053 Event Trace 파일이 생성되는 조건
      1. Query 는 반드시 (Hard) Parse 되어야 한다.
      2. CBO 에 의해서 Parse 되어야 한다.

  • 실행 방법
    1. 현재 session에서 10053 트레이스 실행 방법
      1. alter session set events '10053 trace name context forever';
      2. alter session set events '10053 trace name context forever, level 1';
      3. alter session set events '10053 trace name context forever, level 2';
        • a & b번 : 같은 일을 함
        • c 번 : optimizer parameter 목록이 제외되어 약간 짧은 트레이스 파일 생성
      4. 종료 : alter session set events '10053 trace name context off';
    2. 다른 session에서 실행
      1. 실행 : SYS.DBMS_SYSTEM.SET_EV( <sid>, <serial#>, 10053, 1, '' )
      2. 종료 ; SYS.DBMS_SYSTEM.SET_EV( <sid>, <serial#>, 10053, 0, '' )
    3. Trace 파일 구분 : alter session set tracefile_identifier='10053_trace';

  • 구성
    1. 6개의 section으로 구성
      1. query
      2. parameters used by the optimizer
      3. Based Statistical Information
      4. Base Table Access Cost
      5. General Plans
      6. Recosting for special features

    2. Table 정보
      10053 Event Label dba_tables 설 명
      CDN NUM_ROWS cardinality = 테이블의 record 수
      NBLKS BLOCKS data를 가지고 있는 block의 수 (HWM 아래의 block수)
      TABLE_SCAN_CST   The estimate cost in I/O to full-table-scan the table
      AVG_ROW_LEN AVG_ROW_LEN o/h를 포함한 평균 record의 길이(bytes)


    3. Index 정보
      10053 Event Label dba_index 설 명
      Index#, col#   index의 object#, column의 column_id
      LVLS BLEVEL B* tree의 root block에서 leaf block까지의 depth
      #LB LEAF_BLOCKS leaf block의 수
      #DK DISTINCT_KEYS distinct key의 값
      LB/K AVG_LEAF_BLOCKS_PER_KEY 한 index에 대한 평균 leaf block 수
      DB/K AVG_DATA_BLOCKS_PER_KEY 한 index에 대한 평균 data block 수
      CLUF CLUSTERING_FACTOR index에 대한 data record의 정렬 정도


    4. Column 정보
      10053 Event Label dba_tables/dba_index 설 명
      NDV NUM_DISTINCT 전체 column의 distinct 값의 수
      NULLS NUM_NULLS 'null' 값을 가지고 있는 column 의 값
      DENS DENSITY historgram이 없을경우 1/NDV
      LO LOW_VALUE (numeric인경우) 최소값
      HI HIGH_VALUE (numeric인경우) 최대값


  • single table Base Acces Plans
    0 parallel hint 8 hash cluster 16 partitions hint 24 swap inputs to join
    1 no access path spec 9 rowid lookup 17 nopartitions hint 25 fact table
    2 table scan 10 range scan backwards 18 anti-join 26 not a fact table
    3 index unique 11 rowid range scan 19 index rowid range scan 27 merge of this view
    4 index range 12 driving_site hint 20 bitmap index 28 don't push join predicate into this view
    5 index and-equal 13   21 parallel_index hint 29 push join predicate into this view
    6 orderby using an index 14 cache hint 22 noparallel_index hint 30 no_merge of this view
    7 open cluster 15 nocache hint 23 index fast full scan 31 semi-join


  • 테스트
    1. 주의사항 : "set autotrace on"을 하면, plan_table에서 발생하는 과정까지 10053 trace에 기록이 되므로 가독성이 떨어짐

  • 결과
    1. CBO로 쿼리 수행 시 트레이스 결과
    2. RBO로 쿼리 수행 시 트레이스 결과

문서에 대하여

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.