DBA

개인 학습, 작업 기록용입니다. 올바르지 않은 정보가 있다면 댓글주시면 감사하겠습니다!

DATABASE/Oracle

[Oracle] INDEX 생성 모니터링, REBUILD 와 DROP CREATE 시 차이

DBnA 2023. 8. 25. 23:32

오라클의 인덱스 리빌드 와 DROP 하고 다시 재생성하는 것에 대해서
각각의 방법이 어떻게 진행되는지, 어떤 장/단점이 있는지 알아보았습니다.

 

인덱스 생성 모니터링
--temp 테이블스페이스 임시세그먼트 생성
select * from V$SORT_USAGE;

--임시 세그먼트 인덱스 테이블스페이스로 이관
select * from DBA_SEGMENTS where segment_type = 'TEMPORARY';

 

인덱스 리빌드

테이블스페이스에 임시 인덱스 세그먼트 생성
기존 인덱스의 지정 테이블스페이스에 이관
기존 인덱스 드랍 후 임시 인덱스를 기존 인덱스로 바꿈 ( 이 작업을 위해 테이블스페이스에 2개의 인덱스가 잠시 공존함)

 
=> 리빌드를 진행하게 된다면, temp tablespace 와 인덱스 지정 테이블스페이스에 추가 용량이 필요함.
=> 리빌드 되는 28분의 작업시간동안 기존의 인덱스를 사용할 수 있음
 (시간은 테스트 인덱스의 소요 시간입니다)

**참고 
ㅇ인덱스 리빌드 시 인덱스 사용 확인
- 인덱스가 리빌드 되는 동안에도 인덱스 조회 가능
기존 invalidate = 0

- 인덱스 리빌드 완료 후 쿼리 재실행 후 v$sql 확인
쿼리에서 사용하는 인덱스의 변경으로 loads와 invalidations 값 증가

 

인덱스 drop & create

drop하여 이전 인덱스 공간 해제
테이블스페이스에 임시 인덱스 세그먼트 생성
기존 인덱스의 지정 테이블스페이스에 이관

 
=> 기존 인덱스를 삭제했다 재생성하므로, 리빌드 처럼 여유공간에 크게 제약받지 않는다.
=> 기존 인덱스를 삭제하고, 인덱스가 재생성되는 약 27분간 인덱스가 없는 상태로 쿼리 조회시 인덱스 사용할 수 없음