오라클(ORACLE) 테이블 스페이스 용량을 줄이기 위해서 데이터베이스 테이블의 데이터를 delete문을 통해 삭제하였습니다. 이후 테이블 스페이스 용량을 확인해보니 용량이 줄어들지 않았는데 이유가 무엇일까?
오늘은 오라클 10g 이상부터 지원하는 테이블의 빈 공간을 축소하는 "SEGMENT SHRINK"에 대해서 알아보겠습니다.
오라클 테이블 빈 공간이 생기는 이유는?
테이블의 빈 공간이 생기는 이유는 반복적이고 누적된 테이블 delete 연산의 결과로 일어나며 이 공간을 방치하게 되면 아래와 같은 문제가 생길 수 있습니다.
- 빈 공간 때문에 데이터가 흩어져 있기 때문에 해당 테이블을 스캔 시 보다 많은 I/O가 필요합니다.
- 내부 단편화로 인한 row-chaining/row migration이 발생할 수 있습니다.
- 서버의 전체적인 공간을 많이 차지하여 공간 낭비가 발생합니다
오라클 테이블 용량 줄이기(SEGMENT SHRINK)
SHRINK 사용조건
1. ORACLE 10g 이상 사용가능
2. ASSM(Automatic Segment Space Management) 사용하는 테이블스페이스만 가능
1) 조회하는 방법입니다.
select tablespace_name, segment_space_management from user_tablespaces;
(segment_space_management = AUTO 일 경우 가능)
3. row movement= enable
1)조회하는 방법입니다.
select table_name, ROW_MOVEMENT from dba_tables where table_name ='[table명]';
2) ROW MOVEMENT 활성화/비활성화
ALTER TABLE [table명] ENABLE ROW MOVEMENT; --활설화
ALTER TABLE [table명] DISABLE ROW MOVEMENT; --비활성화
SHRINK 명령어
alter table [table_name] shrink space cascade;
cascade 옵션 : segment shrink는 dependent 한 오브젝트들에 대해서도 자동으로 수행됩니다.
예를 들면 테이블을 shrink 하면서, 그 테이블에 대해 정의된 인덱스들 또한 자동으로 동시에 shrink 할 수 있습니다.
만약 ORA-10631 오류 발생 시 다음의 포스팅을 참조하세요
SHRINK 테스트 결과
SHRINK 테스트는 아래의 2가지 경우로 진행하였습니다.
- 테이블 delet 전 shrink 실행
- 테이블 delet(모든 데이터) 후 shrink 실행
기존 테이블스페이스 상태
테이블 delet 전 shrink 실행한 결과값 입니다.
기존에 테이블에 존재하던 빈 공간을 모아 Free Size가 증가한 상태입니다.
테이블 delet(모든 데이터) 후 shrink 실행한 결과 값입니다.
delet 하고 생긴 빈 공간을 모아 Free Size가 확보된 모습입니다.
해당 쿼리에대한 프로시저가 필요하신분은 다음 글을 참조해 주시기 바랍니다.
이상으로 오라클(ORACLE) 테이블 스페이스 용량 줄이는 방법에 대한 포스팅을 마치겠습니다.
'IT > ORACLE' 카테고리의 다른 글
오라클(Oracle) 테이블 스페이스 용량 확인 (0) | 2021.03.16 |
---|---|
오라클(Oracle) 테이블 스페이스 용량 축소 & 프로시저 생성 (0) | 2021.03.16 |
오라클(Oracle) 테이블 생성일자 조회 방법 (0) | 2021.02.24 |
오라클(Oracle) 비밀번호 정책 확인 (0) | 2020.12.29 |
오라클(ORACLE) 환경변수 설정 방법(Windows) (0) | 2020.12.29 |
댓글