트러블슈팅 오라클 퍼포먼스 2판 (2017년)
오브젝트 통계 수집하기 0 0 43,689

by 구루비스터디 오브젝트통계 DBMS_STATS GATHER_DATABASE_STATS [2023.09.09]


오브젝트 통계 수집하기

  • GATHER_DATABASE_STATS : 전체 데이터 베이스 통계 수집
  • GATHER_DICTIONARY_STATS : 데이터 딕셔너리에 대해 수집
  • GATHER_FIXED_OBJECTS_STATS : 데이터 딕셔너리 중 FIXED테이블만 수집
  • GATHER_SCHEMA_STATS : 지정된 스키마 전체 통계수집
  • GATHER_TABLE_STATS : 하나의 테이블 통계수집
  • GATHER_INDEX_STATS : 하나의 인덱스 통계수집


CREATE INDEX, ALTER_INDEX 시에도 자동으로 인덱스가 수집된다.
12.1 버전부터는 CTAS, DIRECT-PATH INSERT시에도 자동으로 통계가 수집된다.


  • 오브젝트 통계 수집에 사용되는 프로시저의 파라미터 (교재 313페이지 표 8-3 참조)


대상 오브젝트

  • 대상 오브젝트 파라미터는 아래와 같이 어떤 오브젝트에 대한 통계를 수집할지 지정한다.
  • ownname : 스키마의 이름 지정(필수)
  • indname : 인덱스의 이름 지정(필수)
  • tabname : 테이블의 이름 지정(필수)
  • partname : 파티션이나 서브파티션의 이름 (지정하지 않으면 전체 파티션 및 서브파티션 통계 수집, 기본값:널)
  • comp_id : 구성요소의 ID 지정(기본값 : 널)
  • granularity : 파티셔닝된 오브젝트에 대해 어느 레벨까지 통계를 수집할지 지정(기본값 : auto)
  • cascade : 인덱스의 처리 여부(기본값 : dbms_stats.auto_cascade)
  • gather_fixed : fixed 테이블에 대한 통계 수집여부 지정(기본값 : false)
  • gather_sys : sys 스키마의 처리여부 (기본값 : false)
  • gather_temp : 임시테이블의 처리여부 ( 기본값 : false)
  • options : 어느 오브젝트를 처리할지 지정( 기본값 : gather)
  • objlist : options 파라미터의 값에 따라 처리되었거나 처리할 오브젝트 목록 반환
  • force : 잠긴 통계를 덮어쓸지 여부지정
  • obj_filter_list : 파라미터로 전달한 필터 중 적어도 하나를 충복하는 오브젝트에 대해서만 통계를 수집하도록 지정


스테일(stale) : 통계와 실제 데이터의 불일치가 심해져서 통계정보가 부정확하다라는 의미
오라클 엔진은 기본적으로 데이터가 10%이상 변경되었을 경우 스테일 상태로 판정한다.


수집옵션

  • ESTIMATE_PERCENT
    • 샘플링을 사용할지 여부 지정(0.000001 ~ 100 사이의 값)
    • 100이나 널이면 샘플링을 하지 않음(기본값 : dbms_stats.auto_sample_size)
    • 수치가 너무 낮을 경우 실 데이터와 불일치하는 통계가 만들어질 수 있음(엔진에 의해 자동으로 커질 수 있음)
    • external 테이블은 샘플링이 되지 않음
  • block_sample : 랜덤로우 샘플링(정확함), 블록 샘플링(속도가 빠름) 중 어느것을 사용할지 지정
  • method_opt : 컬럼 통계와 히스토그램의 수집여부 및 수집방법 지정
    • for all columns size 254 : 모든컬럼에 대해 최대 254개의 버킷을 사용하여 수집
    • for all columns size 1 for columns size 254 col1 : 모든컬럼의 통계를 수집하되, col1 컬럼만 254개의 버킷으로 수집한다.
  • degree : 통계수집 시 병렬도를 지정한다.(기본값 : 널)
  • no_invalidate : 처리된 오브젝트에 의존하는 커서의 무효화를 지정( false로 지정될 경우 모든 커서는 즉시 무효화 된다.)


백업테이블

  • stattab : 통계가 저장될 백업테이블 지정
  • statid : 오브젝트 통계를 구분하기 위한 식별자
  • statown : 지정한 백업테이블의 소유자(기본값 : 널)



DBMS_STATS.CREATE_STAT_TABLE(ownname => user, stattab => 'MYSTATS', tblspace => 'USERS');
DBMS_STATS.UPGRADE_STAT_TABLE(ownname => user, stattab => 'MYSTATS');


  • 서로 다른 데이터베이스 버전간에 백업테이블을 이동하려면 백업테이블을 해당버전에 맞게 업그레이드 해줘야한다.



DBMS_STATS.UPGRADE_STAT_TABLE(ownname => user, stattab => 'MYSTATS');
DBMS_STATS.DROP_STAT_TABLE(ownname => user, stattab => 'MYSTATS');

"데이터베이스 스터디모임" 에서 2017년에 "전문가를 위한 트러블슈팅 오라클 퍼포먼스(Second Edition) " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4379

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입