인덱스란 테이블의 조회성능을 향상시켜주는 DB의 중요한 Object입니다.
인덱스를 생성 후 사용하다보면 테이블에도 데이터가 들어가는 경우가 분명히 있을 것이고, 테이블에 데이터가 삽입되면 인덱스에도 데이터를 추가해야 합니다.
인덱스에 데이터가 추가되는 과정에서 depth가 깊어지거나, leaf block이 많아져 데이터 조회시 많은 block을 조회(chaining row)해야 한다면, 조회 성능을 향상시켜주기 위해서 사용하는 index가 성능 저하의 원인이 될 수도 있다는 것입니다.
Index rebuild나 COALESCE를 수행하여 해결할 수 있습니다.
REBUILD
Rebuild가 필요한 상황
- 기존 인덱스를 다른 테이블스페이스로 이동해야 할 경우
- 인덱스가 삭제된 엔트리(데이터)를 많이 포함하고 있을 경우
- 기존의 정규 인덱스가 reverse 키 인덱스로 변환 되어야 할 경우
특성
- 새 인덱스는 기존 인덱스를 데이터 소스로 사용하여 구축됨
- 기존 인덱스를 사용하여 더 나은 성능을 얻기 위해 인덱스를 구축할 때는 정렬이 필요없음
- 이전 인덱스는 새 인덱스가 구축된 후 삭제됨. 재구축되는 동안 이전 인덱스와 새 인덱스 모두를 각각의 테이블스페이스에 수용할 충분한 공간이 필요
- 새 인덱스가 구축되고 있는 동안 질의문은 기존 인덱스를 이용해 계속 사용할 수 있음
장/단점
장점
- 인덱스를 신속하게 다른 테이블스페이스로 옮길 수 있음
- 인덱스를 drop하지 않고 스토리지나 테이블스페이스 관련 파라미터를 변경할 수 있음.
단점
- 추가 디스크 공간이 필요(높은 비용)
- 기존 인덱스를 사용하는 것이 아니라 새 인덱스를 생성
문법
ALTER INDEX [schema.]index REBUILD [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] [{ NOPARALLEL | PARALLEL [ integer ] }] ; or ALTER INDEX [schema.]index REBUILD ONLINE [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] [{ NOPARALLEL | PARALLEL [ integer ] }] ; or ALTER INDEX [schema.]index REBUILD PARTITION partition [PARAMETERS ('rebuild_params [physical_storage_params]' ) ]; |
COALESCE
Oracle Database가 재사용이 가능한 free block을 인덱스 블록의 내용을 병합할 수 있습니다.
장/단점
장점
- 추가 디스크 공간을 필요로 하지 않음(낮은 비용)
- index Tree의 동일한 Branch 상의 leaf block들만을 병합
- leaf block을 신속하게 사용가능한 상태로 만듬
단점
-인덱스를 다른 테이블스페이스로 옮길 수 없음
문법
ALTER INDEX index COALESCE; |
출처 : www.gurubee.net/lecture/1110
docs.oracle.com/database/121/SPATL/alter-index-rebuild.htm#SPATL1017
'Oracle > 운영' 카테고리의 다른 글
dba_2pc_pending (0) | 2021.03.11 |
---|---|
Two-Phase Commit 매커니즘 (0) | 2021.03.10 |
[RAC] 12.2 CRS Process 강제로 kill 하고 복구방법 (0) | 2021.02.08 |
dba_tables 과 dba_segments의 차이 (0) | 2021.02.05 |
[Reorg] 대상 테이블 추출하기 (DBMS_ROWID,DBMS_SPACE) (0) | 2021.02.04 |
댓글