제39장 DBMS_STATS

내용 목차

39.1. 개요
39.2. 프러시저
39.2.1. ALTER_STATS_HISTORY_RETENTION
39.2.2. COPY_TABLE_STATS
39.2.3. CREATE_STAT_TABLE
39.2.4. DELETE_COLUMN_STATS
39.2.5. DELETE_DATABASE_STATS
39.2.6. DELETE_DICTIONARY_STATS
39.2.7. DELETE_INDEX_STATS
39.2.8. DELETE_SCHEMA_STATS
39.2.9. DELETE_SYSTEM_STATS
39.2.10. DELETE_TABLE_STATS
39.2.11. DROP_STAT_TABLE
39.2.12. EXPORT_COLUMN_STATS
39.2.13. EXPORT_DATABASE_STATS
39.2.14. EXPORT_INDEX_STATS
39.2.15. EXPORT_SCHEMA_STATS
39.2.16. EXPORT_SYSTEM_STATS
39.2.17. EXPORT_TABLE_STATS
39.2.18. GATHER_DATABASE_STATS
39.2.19. GATHER_DICTIONARY_STATS
39.2.20. GATHER_INDEX_STATS
39.2.21. GATHER_SCHEMA_STATS
39.2.22. GATHER_SYSTEM_STATS
39.2.23. GATHER_TABLE_STATS
39.2.24. GET_COLUMN_STATS
39.2.25. GET_INDEX_STATS
39.2.26. GET_TABLE_STATS
39.2.27. IMPORT_COLUMN_STATS
39.2.28. IMPORT_DATABASE_STATS
39.2.29. IMPORT_INDEX_STATS
39.2.30. IMPORT_SCHEMA_STATS
39.2.31. IMPORT_SYSTEM_STATS
39.2.32. IMPORT_TABLE_STATS
39.2.33. LOCK_TABLE_STATS
39.2.34. LOCK_SCHEMA_STATS
39.2.35. SET_COLUMN_STATS
39.2.36. SET_INDEX_STATS
39.2.37. SET_TABLE_STATS
39.2.38. PURGE_STATS
39.2.39. RESTORE_SCHEMA_STATS
39.2.40. RESTORE_TABLE_STATS
39.2.41. SET_PARAM
39.2.42. SET_SYSTEM_STATS
39.2.43. UNLOCK_TABLE_STATS
39.2.44. UNLOCK_SCHEMA_STATS
39.3. 함수
39.3.1. GET_PARAM
39.3.2. GET_STATS_HISTORY_AVAILABILITY
39.3.3. GET_STATS_HISTORY_RETENTION
39.3.4. TO_BOOLEAN

본 장에서는 DBMS_STATS 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

DBMS_STATS는 데이터베이스 객체의 통계 정보를 수집하고 관리하는 패키지이다. 이 패키지를 사용하면 데이터베이스에 있는 컬럼, 테이블, 데이터 사전(DD: Data Dictionary), 인덱스, 스키마, 시스템 등에 대한 통계 정보를 수집하고 관리(예: 삭제 또는 초기화 등)할 수 있다.

테이블 통계 정보 수집시에 사용자 선택에 따라서 컬럼 각각에 대한 데이터 분포도를 저장한다. 이를 히스토그램이라 하고, 수집 가능한 데이터 타입은 NUMBER, CHAR, VARCHAR, DATE, TIME, TIMESTAMP이다.

사용자는 자신에게 소속된 객체들에 대해서만 통계 정보 수집이 가능하다. ANALYZE ANY 권한을 부여받으면 모든 사용자의 객체에 대한 통계 정보 수집이 가능하다.

본 절에서는 DBMS_STATS 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.

컬럼의 통계 정보를 삭제하는 프러시저이다.

DELETE_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.

데이터베이스에 있는 모든 테이블의 통계 정보를 삭제하는 프러시저이다.

DELETE_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.

모든 데이터 사전의 스키마(SYS, SYSCAT)의 통계 정보를 삭제하는 프러시저이다.

DELETE_DICTIONARY_STATS 프러시저의 세부 내용은 다음과 같다.

인덱스의 통계 정보를 삭제하는 프러시저이다.

DELETE_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.

스키마 전체의 통계 정보를 삭제하는 프러시저이다.

DELETE_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.

테이블의 통계 정보를 삭제하는 프러시저이다.

DELETE_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.

데이터베이스의 모든 객체의 통계 정보를 수집하는 프러시저이다.

GATHER_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.

모든 데이터 사전의 스키마(SYS, SYSCAT) 객체의 통계 정보를 수집하는 프러시저이다.

GATHER_DICTIONARY_STATS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_STATS.GATHER_DICTIONARY_STATS 
    (
        estimate_percent NUMBER   DEFAULT 
                       to_estimate_percent_type(get_param('STAT_ESTIMATE_PERCENT'),
        block_sample     BOOLEAN  DEFAULT FALSE,
        method_opt       VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'),
        degree           NUMBER   DEFAULT to_degree_type (get_param('STAT_DEGREE')),
        cascade          BOOLEAN  DEFAULT to_boolean(get_param('STAT_CASCADE')),
        no_invalidate    BOOLEAN  DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')),
        force            BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터설명
    estimate_percent

    샘플링할 로우의 퍼센트를 정의한다.

    0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다.

    block_sampleestimate_percent가 100보다 작을 때 로우 샘플링 대신 블록 샘플링을 사용할 수 있다. 블록 샘플링 방식은 로우 샘플링에 비해 표본이 고르게 뽑히지 않기 때문에 estimate_percent가 충분히 크지 않을 때는 기본값인 FALSE로 두어야 한다.
    method_opt히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 [method_opt 파라미터 설정방법]을 참고한다.
    degree병렬 쿼리의 처리 개수를 설정한다.
    cascade인덱스에 대해서도 통계 정보를 수집한다.
    no_invalidateTRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다.
    forceTRUE로 설정하면 잠겨 있는 테이블 및 관련 객체들의 통계 정보들도 수집한다.
  • 예외 상황

    예외 상황설명
    BAD_INPUT_VALUE잘못된 파라미터 값을 입력한 경우이다.

인덱스의 통계 정보를 수집하는 프러시저이다.

GATHER_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.

스키마의 모든 객체의 통계 정보를 수집하는 프러시저이다.

GATHER_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_STATS.GATHER_SCHEMA_STATS 
    (
        ownname          VARCHAR2,
        estimate_percent NUMBER   DEFAULT 
                       to_estimate_percent_type(get_param('STAT_ESTIMATE_PERCENT'),
        block_sample     BOOLEAN  DEFAULT FALSE,
        method_opt       VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'),
        degree           NUMBER   DEFAULT to_degree_type (get_param('STAT_DEGREE')),
        cascade          BOOLEAN  DEFAULT to_boolean(get_param('STAT_CASCADE')),
        no_invalidate    BOOLEAN  DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')),
        force            BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터설명
    ownname스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다.
    estimate_percent

    샘플링할 로우의 퍼센트를 정의한다.

    0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다.

    block_sampleestimate_percent가 100보다 작을 때 로우 샘플링 대신 블록 샘플링을 사용할 수 있다. 블록 샘플링 방식은 로우 샘플링에 비해 표본이 고르게 뽑히지 않기 때문에 estimate_percent가 충분히 크지 않을 때는 기본값인 FALSE로 두어야 한다.
    method_opt히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 [method_opt 파라미터 설정방법]을 참고한다.
    degree병렬 쿼리의 처리 개수를 설정한다.
    cascade인덱스에 대해서도 통계 정보를 수집한다.
    no_invalidateTRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다.
    forceTRUE로 설정하면 잠겨 있는 테이블 및 관련 객체들의 통계 정보들도 수집한다.
  • 예외 상황

    예외 상황설명
    OBJECT_NOT_EXISTS객체가 존재하지 않는 경우이다.
    BAD_INPUT_VALUE잘못된 파라미터 값을 입력한 경우이다.

시스템의 통계 정보를 수집하는 프러시저이다. 이 프러시저를 사용하려면 DBA 권한이 필요하다.

GATHER_SYSTEM_STATS 프러시저의 세부 내용은 다음과 같다.

테이블의 통계 정보를 수집하는 프러시저이다.

GATHER_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_STATS.GATHER_TABLE_STATS 
    (
        ownname          VARCHAR2, 
        tabname          VARCHAR2, 
        partname         VARCHAR2 DEFAULT NULL,
        estimate_percent NUMBER   DEFAULT 
                       to_estimate_percent_type(get_param('STAT_ESTIMATE_PERCENT'),
        block_sample     BOOLEAN  DEFAULT FALSE,
        method_opt       VARCHAR2 DEFAULT get_param('STAT_METHOD_OPT'),
        degree           NUMBER   DEFAULT to_degree_type (get_param('STAT_DEGREE')),
        cascade_indexes  BOOLEAN  DEFAULT to_boolean(get_param('STAT_CASCADE')),
        no_invalidate    BOOLEAN  DEFAULT to_boolean(get_param('STAT_NO_INVALIDATE')),
        granularity      VARCHAR2 DEFAULT 'ALL',
        force            BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터설명
    ownname스키마의 이름이다. NULL일 경우 현재 스키마의 이름이다.
    tabname테이블의 이름이다.
    partname파티션의 이름이다.
    estimate_percent

    샘플링할 로우의 퍼센트를 정의한다.

    0.000001 이상 100 이하의 값을 설정할 수 있다. 0을 입력한 경우에는 optimizer가 테이블에 크기에 따라 적합한 sampling rate을 결정하여 수행한다.

    block_sampleestimate_percent가 100보다 작을 때 로우 샘플링 대신 블록 샘플링을 사용할 수 있다. 블록 샘플링 방식은 로우 샘플링에 비해 표본이 고르게 뽑히지 않기 때문에 estimate_percent가 충분히 크지 않을 때는 기본값인 FALSE로 두어야 한다.
    method_opt히스토그램 생성에 대한 옵션이다. 파라미터를 설정하는 방법은 [method_opt 파라미터 설정방법]을 참고한다.
    degree병렬 쿼리의 처리 개수를 설정한다.
    cascade_indexes인덱스에 대해서도 통계 정보를 수집한다.
    no_invalidateTRUE로 설정하면 관련된 Physical Plan을 삭제하지 않는다.
    granularity

    통계 정보를 수집하는 대상을 가리킨다.

    • ALL: 테이블 및 파티션의 통계 정보를 수집한다.

    • GLOBAL: 파티션을 제외한 테이블의 통계 정보만 수집한다.

    • PARTITION: 파티션 수준의 통계 정보만 수집한다.

    forceTRUE로 설정하면 테이블의 통계 정보가 잠겨 있어도 수집한다.
  • 예외 상황

    예외 상황설명
    OBJECT_NOT_EXISTS객체가 존재하지 않는 경우이다.
    BAD_INPUT_VALUE잘못된 파라미터 값을 입력한 경우이다.

데이터 사전(DD: Data Dictionary) 또는 통계 테이블에 있는 지정한 인덱스의 통계 정보를 가져오는 프러시저이다.

GET_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_STATS.GET_INDEX_STATS
    (
        ownname      VARCHAR2,
        idxname      VARCHAR2,
        partname     VARCHAR2 DEFAULT NULL,
        stattab      VARCHAR2 DEFAULT NULL,
        statid       VARCHAR2 DEFAULT NULL,
        statown      GET_TABLE_STATSVARCHAR2 DEFAULT NULL,
        numrows      OUT   NUMBER,
        numlblks     OUT   NUMBER,
        numdist      OUT   NUMBER,
        clstfct      OUT   NUMBER,
        idxlevel     OUT   NUMBER
    );
  • 파라미터

    파라미터설명
    ownname스키마의 이름이다. NULL일 경우 이 프러시저를 호출한 스키마의 이름이다.
    idxname인덱스의 이름이다.
    partname파티션의 이름이다.
    stattab통계 테이블의 이름이다.
    statid통계 테이블 내에서 구분할 통계 정보 ID이다.
    statown통계 테이블이 속한 스키마의 이름이다.
    numrows인덱스의 로우 개수이다.
    numblks인덱스의 블록 개수이다.
    numlblks인덱스의 리프블록 개수이다.
    numdist인덱스 내 서로 다른 값들의 개수이다.
    clstfct인덱스의 클러스터링 팩터이다. 0에서 1 사이의 값으로 정규화되어 있다.
    idxlevel인덱스의 높이이다.
  • 예외 상황

    예외 상황설명
    20007잘못된 인덱스를 입력한 경우이다.
    20003잘못된 파티션을 입력한 경우이다.
    20004파티션 인덱스가 아닌데 파티션 이름을 지정한 경우이다.
    20025잘못된 통계 테이블을 입력한 경우이다.

통계 테이블에 있는 지정한 컬럼의 통계 정보를 데이터 사전에 저장하는 프러시저이다.

IMPORT_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.

통계 테이블에 있는 모든 테이블의 통계 정보를 데이터 사전에 저장하는 프러시저이다.

IMPORT_DATABASE_STATS 프러시저의 세부 내용은 다음과 같다.

통계 테이블에 있는 지정한 인덱스의 통계 정보를 데이터 사전에 저장하는 프러시저이다.

IMPORT_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.

통계 테이블에 있는 스키마 전체의 통계 정보를 데이터 사전에 저장하는 프러시저이다.

IMPORT_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.

통계 테이블에 있는 테이블의 통계 정보를 데이터 사전에 저장하는 프러시저이다.

IMPORT_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.

데이터 사전(DD: Data Dictionary) 또는 통계 테이블에 사용자가 입력한 지정된 컬럼에 대한 임의의 통계 정보를 기록하는 프러시저이다.

SET_COLUMN_STATS 프러시저의 세부 내용은 다음과 같다.

데이터 사전(DD: Data Dictionary) 또는 통계 테이블에 사용자가 입력한 지정된 인덱스에 대한 임의의 통계 정보를 기록하는 프러시저이다.

SET_INDEX_STATS 프러시저의 세부 내용은 다음과 같다.

데이터 사전(DD: Data Dictionary) 또는 통계 테이블에 사용자가 입력한 지정된 테이블에 대한 임의의 통계 정보를 기록하는 프러시저이다.

SET_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.

스키마의 모든 객체의 통계 정보를 지정된 시간대(as_of_timestamp)로 복원하는 프러시저이다.

RESTORE_SCHEMA_STATS 프러시저의 세부 내용은 다음과 같다.

테이블의 통계 정보를 지정된 시간대(as_of_timestamp)로 복원하는 프러시저이다. 이 프러시저는 연관된 인덱스와 컬럼들의 통계 정보들까지 복원한다.

RESTORE_TABLE_STATS 프러시저의 세부 내용은 다음과 같다.

본 절에서는 DBMS_STATS 패키지에서 제공하는 함수를 알파벳 순으로 설명한다.