-
[Oracle] 인덱스 - 리빌드Study/DB 2021. 5. 25. 13:34
뜻하지 않게 운영업무를 맡게되어 내 업무가 될지 몰랐던,, oracle 관리 작업을 시작하였다.
현재 엑사데이터에 여유공간이 전혀 없이 풀로 사용하고 있어 언제라도 장비가 꺼지면 데이터는 다 날아가버리는 위기 상황이다..
저장공간 확보 대장정의 세번째! 인덱스 리빌드를 해보려한다..
인덱스 리빌드는 왜 해야하지?
인덱스와 테이블의 정보가 달라질 때 진행한다.
테이블이 insert/delete/update 될 때 인덱스도 같이 수정된다고 생각한다면 그건 바로 경기도 오산,,
테이블의 수정사항이 많다면 인덱스도 리빌드 해줘야한다!
- INSERT
INSERT SPLIT 현상이 발생할 수 있다!
INSERT SPLIT이란? 인덱스의 블럭들이 하나에서 두 개로 나눠지는 현상
기존 블록에 여유공간이 없는 상황에서 새로운 데이터가 들어오는 상황에 발생
1. 기존 블록의 내용 중 일부를 새 블록에 기록
2. 기존 블록에 빈 공간을 만들어 새로운 데이터를 추가
이로인해 속도가 느려질 수 있다.
- DELETE
테이블의 데이터를 DELETE 할 때 인덱스는 지워지지 않는다.
EX) 테이블 10만건, 인덱스 10만건 -> 테이블 5만건 삭제 -> 테이블 5만건, 인덱스 10만건
이 경우 테이블과 인덱스의 정보가 다르기 때문에 인덱스를 사용해도 속도가 느려질 수 있다.
- UPDATE
인덱스는 UPDATE 개념이 없다.
테이블에 UPDATE가 일어날 경우
1. 인덱스에서 DELETE 발생
2. 인덱스에 새로운 데이터 INSERT
두 가지 작업이 일어나기 때문에 더 부하를 줄 수 있다.
인덱스 리빌드의 영향
옵티마이져가 실행 계획을 세울 때 최근에 생성한 인덱스가 영향을 줄 수 있다.
*주의할것은! 리빌드하는 동안 테이블에 LOCK이 발생하기 때문에 업무시간 외에 진행하도록 하자!
인덱스 관리
1. 인덱스 조회
/* 인덱스 목록 */
SELECT * FROM USER_INDEXES;
/* 인덱스에 포함 된 컬럼 리스트 */
SELECT * FROM USER_IND_COLUMNS;2. 인덱스 사용 여부 모니터링
사용하지 않는 인덱스는 DROP/VISIBLE 한다.
/* 모니터링 시작하기 */
ALTER INDEX [인덱스명] MONITORING USAGE;
/* 모니터링 중단하기 */
ALTER INDEX [인덱스명] NOMONITORING USAGE;
/* 사용 유무 확인하기 */
SELECT * FROM V$OBJECT_USAGE;3. 인덱스 밸런싱 확인
인덱스 밸런싱은 망가진? 인덱스가 몇%인지 확인하는 쿼리이다.
0에 가까울수록 좋다.
/* 인덱스 통계정보 생성 */
ANALYZE INDEX [인덱스명] VALIDATE STRUCTURE;
/* 인덱스 밸런싱 확인 */
SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100 AS BAL FROM INDEX_STATS;4. 인덱스 리빌드
/* 인덱스 리빌드 */
ALTER INDEX [인덱스명] REBUILD;
궁금증
1. 운영 데이터 DELETE/INSERT 짱 많이 하는데 리빌드 한적 없음 알아서 되는건가
2. INSERT SPLIT이 인덱스의 문제라는건가
3. 영향 더 없나?
참고자료
https://lee-mandu.tistory.com/484
[오라클] 인덱스의 주의사항 및 관리방법(쿼리문 확인)
안녕하세요. 앞서 인덱스의 개념과 종류에 대해 알아보았습니다. [개발/DB] - [오라클] 인덱스의 원리 및 개념과 종류(B-TREE, BITMAP INDEX) 오늘은 인덱스의 주의사항과 실습을 통하여 인덱스의 관리
lee-mandu.tistory.com
https://aozjffl.tistory.com/285
index rebuild 작업
질문 : index에 관해서 공부를 하다가 궁금한 점이 있어 이렇게 질문을 등록합니다. 테이블에 데이터가 자주 들락날락해서 delete된 데이터의 index가 그대로 남아있어, 필요이상으로 많은 공간을 차
aozjffl.tistory.com
https://jack-of-all-trades.tistory.com/400
오라클 Index 모니터링 - 안쓰는 인덱스 찾기 (index monitoring), Foreign Key 주의
Oracle DB 가 오래 운영되다 보면, 인덱스의 수가 점점 많아지는 경향이 있습니다. 많은 경우는 한 테이블에 40개 이상의 인덱스가 걸려있는 경우도 종종 발견됩니다. 이렇게 인덱스가 많아지는 이
jack-of-all-trades.tistory.com
https://dev-road.tistory.com/5
오라클 인덱스 생성/삭제/리빌드/조회
인덱스 생성 CREATE INDEX 유저명.인덱스명 ON 대상테이블명(대상컬럼명1,대상컬럼명2..); 인덱스 삭제 DROP INDEX 유저명.인덱스명; 인덱스 리빌드 ALTER INDEX 유저명.인덱스명 REBUILD; ALTER INDEX 유저명.인..
dev-road.tistory.com
'Study > DB' 카테고리의 다른 글
[MySQL / MariaDB] MySQL의 설정 파일 (0) 2024.09.27 [MySQL / MariaDB] 상태, 시작, 중지, 재시작 (0) 2024.09.27