송민준의 개발노트

Oracle Analyze란 뭘까? 본문

DB

Oracle Analyze란 뭘까?

송민준 2020. 9. 17. 23:52

데이터를 다루다가 어느 순간부터 특정 테이블 쿼리가 느려지기 시작했다.

5개 정도 테이블을 조인 걸어서 조회하는 것이였는데...

 

실행계획이 이상하게 잡혔나싶어서 보니 정상적이다... 인덱스도 바뀐게 없는데...!!?

 

이리저리 힌트 바꿔가면서 삽질해봤지만 10초 정도 시간 줄이는게 끝...

 

물론 쿼리도 개선해야 할 부분이 있었다. 필요없는 칼럼들이 포함되어 있고 조건절에 'exists'가 아닌 'in'으로만 이루어져 있고... 

하지만 더 좋은 방법이 있었다.

 

Analyze를 사용하는 것이었다.

Analyze란 무엇일까?

- 인덱스, 테이블, 클러스터의 통계정보를 생성한다. 생성된 정보들은 비용기준의 옵티마이저가 가장 효율적인 실행계획을 수립하기 위해 최소비용을 계산할 때 사용된다. 구조를 확인하는 것은 물론 체인 생성 여부를 확인할 수 있으므로 시스템의 저장공간 관리를 도와준다.

 

문법은 어떻게 될까?

ANALYZE 대상Object operation STATISTICS [VALIDATE STRUCTURE[CASCADE]] [LIST CHAINED ROWS[INTO tables]]

- 대상Object : 테이블, 인덱스, 클러스터 중 해당 오브젝트를 기술하고 처리할 오브젝트 명을 기술한다.

- operation : 3가지 옵션이 존재하며 다음과 같다.

   1) COMPUTE : 각각의 값들을 정확하게 계산함. 가장 정확하지만 처리 속도가 느림

   2) ESTIMATE : 자료사전의 값과 데이터 견본을 가지고 검사해서 통계를 예상함. 덜 정확하지만 속도가 빠름

   3) DELETE : 모든 통계 정보를 삭제함

 

사용시기는 어떻게 될까?

- 주기적으로 해줘야 한다. 다량의 데이터 조작이나 인덱스 조작, 클러스터링, 테이블 조작 등을 할 경우 ANALYZE를 수행해주는 것이 좋다. 테이블을 ANALYZE 한다면 인덱스도 같이 해주는 것이 좋다. 또한 데이터조작이 많은 시간대는 피하는 것이 좋다.

 

예문

// 정보수집
ANALYZE TABLE BBS COMPUTE STATISTICS;

// 새로운 정보 수집 전 기존 정보 삭제
ANALYZE TABLE BBS DELETE STATISTICS;

 

 

 

'DB' 카테고리의 다른 글

옵티마이저란??  (0) 2020.08.17
Oracle DB 파티션이란?  (0) 2020.08.15
테이블의 용량 초기화  (0) 2020.06.01
Nologging  (0) 2020.06.01
Mybatis 동적 쿼리(like 사용 및 가변 컬럼 사용)  (0) 2019.12.27