본문 바로가기

DB/__Oracle

오라클에서 통계정보를 생성하는 이유는?

오라클에서 통계정보를 생성하는 이유는 오라클에있는 옵티마이저기능을 최적화하기 위함입니다.

이 옵티마이저가 최적화 되기 위해서는 기초데이터가 되는것이 통계정보 입니다.

ANALYZE란 명령어를 통해서 인덱스,테이블, 클러스터의 통계정보를 생성할 수 있습니다.

ANALYZE를 하기되면 통계정보를 생성후 데이터 사전에 저장합니다.

통계정보를 생성하지 않으면 인덱스가 있더라도 그리많은 효과를 보지 못 할수도 있습니다.

제대로된 인덱스를 찾지 못하기 떄문입니다. 왜냐하면 옵티마이저가 찾을 기초데이터가 없기 때문입니다.

그래서 ALALYZE를 통해서 통계정보를 생성해야만 최적화된 인덱스를 잡아내서 최대한의 효과를 볼 수 있기 떄문입니다.

COSE BASE로 OPTIMIZER가 운영중인 환경에서는 처음 생성 후

ANALYZE해 주시는 것이 옵티마이저를 최적화해주는데  큰 도움을 줄 수 있다. 

 

아래는 ANALYZE명령어 사용법입니다.

[문법]
--------------------------------------------------------------------------------------------
ANALYZE object-clause operation STATISTICS
        [VALIDATE STRUCTURE[CASCADE]]
        [LIST CHAINED ROWS[INTO tables]]
       
object-clause : TABLE,INDEX,CLUSTER중에서 해당하는 오브젝트를 기술하고 처리할 오브젝트명을
                기술합니다.
               
operation : operation옵션에서 아래 3가지중 한가지 기능을 선택할 수 있습니다.
           1) COMPUTE - 각각의 값들을 정확하게 계산 합니다.
                      - 가장 정확한 통계를 얻을 수 있지만 처리 속도가 가장느립니다.
           2) ESTIMATE - 자료사전의 값과 데이터 견본을 가지고 검사해서 통계정보를 예상합니다.
                       - COMPUTE보다 덜 정확하지만 처리속도가 훨씬 빠릅니다.
           3) DELETE - 데이블 모든 통계정보를 삭제합니다.
--------------------------------------------------------------------------------------------

테이블 재생성하거나 새로 클러스터링을 한 경우 인덱스를 추가하거나 재생성한 경우
다량의 데이터를 SQL이나 배치 어플리케이션을 통해 작업한 경우 ANALYZE를 수행 시켜 주는것이
좋습니다. 테이블 ANALYZE시킨다면 거기에따른 인덱스들도 같이 실시하는것이 좋습니다.


[특정 COLUMN에 대한 DATA분포]
SQL > ANALYZE TABLE ON_TBX_CME_FNO_ORD COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;


[특정 Table/Index만 Analyze하는 방법]
SQL > ANALYZE TABLE [TABLE_NAME] COMPUTE STATISTICS;
SQL > ANALYZE INDEX [INDEX_NAME] COMPUTE STATISTICS;
 

[삭제]-새로운정보 구하기 전에 기존 정보를 삭제할 때 이용
SQL > ANALYZE TABLE [TABLE_NAME] DELETE STATISTICS;
SQL > ANALYZE iNDEX [INDEX_NAME] DELETE STATISTICS;