Skip to the content.

Analyze

목적

  1. Serial Statistics Gathering
  2. 옵티마이저가 가장 효율적인 실행 계획을 수립하기 위한 계산에 사용
  3. 각 오브젝트의 구조 및 체인 생성 여부를 확인함으로서 시스템 관리에 사용


생성하는 정보

|오브젝트|항목| |-|-| |테이블|전체 레코드 수
전체 Block 수
Block에서 사용 가능한 빈 공간의 평균
체인이 발생된 레코드 수
레코드 평균 길이| |인덱스|인덱스 깊이 (Depth)
Leaf Block 수
Distinct Key 수
Leaf Blocks/Key의 평균
Data Blocks/Key의 평균
Clustering Factor
가장 큰 Key 값
가장 작은 Key 값| |컬럼|Distinct 수
히스토그램 정보| |클러스터|각 클러스터 Key 길이 평균|


사용

ANALYZE object_type owner_name.object_name operation_name STATISTICS;

--특정 컬럼
ANALYZE TABLE owner_name.table_name operation_name STATISTICS FOR COLUMNS column_name;

--유효성 검사
ANALYZE object_type owner_name.object_name VALIDATE STRUCTURE;


옵션에 들어갈 값

|옵션 표기|값|설명| |-|-|-| |object_type|TABLE|테이블 이름| |object_type|INDEX|인덱스 이름| |object_type|CLUSTER|클러스터 이름| |operation_name|COMPUTE|통계 정보를 정확하게 계산함| |operation_name|ESTIMATE|딕셔너리 값과 데이터 견본을 가지고 검사하여 통계 정보를 추정함| |operation_name|DELETE|통계 정보를 삭제|


참고


SQL

--테이블 간단 통계 정보 조회
SELECT OWNER, TABLE_NAME, NUM_ROWS, CHAIN_CNT, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, AVG_ROW_LEN 
FROM ALL_TABLES
WHERE OWNER = 'owner_name' AND TABLE_NAME = 'table_name';

--인덱스 간단 통계 정보 조회
SELECT OWNER, INDEX_NAME, TABLE_NAME, STATUS, NUM_ROWS, LEAF_BLOCKS, BLEVEL
FROM ALL_INDEXES
WHERE OWNER = 'owner_name' AND index_name = 'index_name';

--테이블 ANALYZE SQL
SELECT
    'ANALYZE TABLE ' || owner || '.' || table_name ||
    CASE
        WHEN NUM_ROWS >= 20000
            THEN ' ESTIMATE '
        ELSE ' COMPUTE '
    END ||
    'STATISTICS;'
FROM ALL_TABLES
WHERE OWNER = 'owner_name';

--인덱스 ANALYZE SQL
SELECT
    'ANALYZE INDEX ' || owner || '.' || index_name ||
    CASE
        WHEN NUM_ROWS >= 20000
            THEN ' ESTIMATE '
        ELSE ' COMPUTE '
    END ||
    'STATISTICS;'
FROM ALL_INDEXES
WHERE OWNER = 'owner_name';