▨ 인덱스 Rebuilding의 용도
- 조각화(Fragmentation) 해소
- DML 작업(INSERT/UPDATE/DELETE)으로 인해 인덱스 블록이 비효율적으로 사용될 수 있음.
- 리빌드하면 연속적인 블록에 재정렬되어 성능 개선 가능.
- 디스크 공간 회수
- 삭제된 인덱스 항목이 남아있는 블록의 공간을 다시 확보 가능.
- 성능 문제 해결
- 비효율적으로 구성된 인덱스를 정리함으로써 검색 속도를 향상시킬 수 있음.
- 데이터 파일 이동/정리 후 사용
- 예: 테이블스페이스 압축, 디스크 구조 변경 등.
- 불필요하게 커진 인덱스 크기 줄이기
▨ 인덱스 Rebuilding 방법
1. 단일 인덱스 리빌드
ALTER INDEX 인덱스명 REBUILD; |
2. ONLINE 옵션 사용 (서비스 중단 없이)
ALTER INDEX 인덱스명 REBUILD ONLINE; |
※ 단, ONLINE 옵션은 Enterprise Edition에서만 지원됨 (일부 버전 제한도 있음).
3. 병렬 리빌드 (대용량 처리 시)
ALTER INDEX 인덱스명 REBUILD PARALLEL 16; ALTER INDEX 인덱스명 NOPARALLEL; |
※ 이후 NOPARALLEL로 다시 설정해줘야 병렬 비활성화 됩니다:
4. 다른 테이블스페이스로 이동하며 리빌드
ALTER INDEX 인덱스명 REBUILD TABLESPACE 새테이블스페이스명; |
▨ 기타
- 리빌드 작업은 리소스를 많이 사용하므로 시스템 부하를 고려해서 비업무 시간대에 수행하는 것이 좋습니다.
- 자주 할 필요는 없음: Oracle은 대부분의 경우 인덱스를 자동으로 잘 관리함.
- 조각화 확인
SELECT IDX.INDEX_NAME, IDX.TABLE_NAME, IDX.BLEVEL, IDX.LEAF_BLOCKS, IDX.DISTINCT_KEYS, IDX.CLUSTERING_FACTOR, TAB.NUM_ROWS, ROUND(IDX.CLUSTERING_FACTOR / TAB.NUM_ROWS * 100, 2) AS CLUSTERING_RATIO FROM DBA_INDEXES IDX JOIN DBA_TABLES TAB ON IDX.TABLE_NAME = TAB.TABLE_NAME WHERE IDX.OWNER = 'YOUR_SCHEMA' AND TAB.OWNER = 'YOUR_SCHEMA' AND IDX.STATUS = 'VALID' AND IDX.BLEVEL >= 3 -- 트리 높이가 3 이상 AND IDX.LEAF_BLOCKS > 1000; -- 리프 블록 수가 많은 것들 |
- BLEVEL : 인덱스의 높이 (높을수록 성능 저하 우려)
- LEAF_BLOCKS : 리프 블록 개수
- DISTINCT_KEYS : 키의 다양성
- CLUSTERING_FACTOR : 테이블 데이터의 물리적 정렬 정도 (낮을수록 좋음)
- CLUSTERING_RATIO : 80% 이상이면 조각화 가능성 있음.
반응형
'ORACLE' 카테고리의 다른 글
언어별 표기 (0) | 2023.04.13 |
---|---|
RAC (1) | 2023.02.28 |
PRAGMA AUTONOMOUS_TRANSACTION (0) | 2022.06.29 |
INVISIBLE (0) | 2021.03.23 |
PL/SQL Developer (0) | 2021.03.12 |