본문 바로가기

IT/오라클

🔍 Oracle SHRINK 기법 완벽 정리: 공간 회수와 성능 최적화를 한 번에

반응형

🧠 1. SHRINK란 무엇인가?

Oracle의 SHRINK SPACE 기능은 세그먼트(테이블, 인덱스 등)에 할당된 여유 공간을 줄이는 작업입니다. 특히 DML(INSERT/DELETE 등) 작업이 많은 OLTP 환경에서 불필요하게 커진 테이블의 공간을 줄이고 I/O 성능을 향상시킬 수 있는 유용한 방법입니다.

🏗️ 2. 동작 원리

  • DELETE 작업은 데이터를 지워도 실제 테이블 크기는 줄어들지 않습니다.
  • SHRINK은 내부적으로 데이터를 재정렬하고 HWM(High Water Mark) 아래로 데이터를 밀어 넣은 후, 불필요한 블록을 반환합니다.
  • 반환된 블록은 tablespace에 반환되어 다른 객체에서 재사용 가능해집니다.

 

⚙️ 3. SHRINK 사용 조건

조건 설명
ASSM(Automatic Segment Space Management)
사용
SHRINK는 ASSM이 설정된 tablespace에서만 사용 가능
ROW MOVEMENT 허용 테이블에서 행이 재배치되므로, ROW MOVEMENT를 ENABLE 해야 함
테이블이 파티션이 아닐 경우 비파티션 테이블은 바로 shrink 가능 (파티션 테이블은 개별 파티션 단위 shrink 필요)
 

💻 4. SHRINK 사용 예제

1) 준비: ROW MOVEMENT 활성화

ALTER TABLE employees ENABLE ROW MOVEMENT;

2) 테이블 SHRINK (압축 + 공간 반환)

ALTER TABLE employees SHRINK SPACE;

🔁 이 명령은 데이터를 재배치한 뒤 HWM을 낮추고 여유 공간을 반환합니다.
3) 단계적 SHRINK (단계적으로 작업할 경우)

ALTER TABLE employees SHRINK SPACE COMPACT;  -- 재배치만 수행
ALTER TABLE employees SHRINK SPACE;          -- HWM 낮추기 및 공간 반환

 

4) 인덱스 SHRINK

ALTER INDEX emp_name_idx SHRINK SPACE;

 

🚨 5. 주의사항

  • SHRINK 중 잠금(Lock): Compact 단계는 공유 잠금, 전체 SHRINK는 일시적으로 Exclusive 잠금을 유발할 수 있습니다.
  • ROWID 변경: SHRINK는 행 재배치를 수반하므로 ROWID가 변경됩니다. ROWID를 외부에서 참조하는 경우 주의!
  • LOB 컬럼 SHRINK 불가: 일반 테이블은 가능하지만, LOB가 포함된 경우 일부 제한이 있습니다.
  • 파티션 테이블: 각 파티션별로 별도로 SHRINK해야 합니다.

 

📊 6. SHRINK 전후 비교 예시

-- SHRINK 전 공간 확인
SELECT table_name, blocks FROM user_tables WHERE table_name = 'EMPLOYEES';

-- SHRINK 수행
ALTER TABLE employees ENABLE ROW MOVEMENT;
ALTER TABLE employees SHRINK SPACE;

-- SHRINK 후 공간 확인
SELECT table_name, blocks FROM user_tables WHERE table_name = 'EMPLOYEES';

 

🧩 7. 언제 SHRINK를 사용할까?

상황 권장 여부
대량 DELETE 후 공간이 비었을 때 ✅ 적극 권장
OLTP 시스템에서 빈번한 DML이 있는 테이블 ✅ 주기적 SHRINK 고려
ROWID를 외부에서 참조 중 ❌ 비권장
운영 시스템에서 실시간 SHRINK ⚠️ 부하 고려 필요 (테스트 후 적용 권장)
 

📌 마무리

Oracle SHRINK는 공간 절감과 I/O 성능 개선에 직접적인 영향을 줄 수 있는 기능입니다. 하지만 모든 환경에 무작정 적용하기보다는 행 이동, 잠금, 성능 영향 등을 고려한 후 운영 정책에 맞게 주기적 또는 수동으로 적용하는 것이 좋습니다.

✅ 팁: 주기적인 SHRINK 작업은 배치나 야간 시간에 실행하고, 작업 전후 ROWID, 공간 블록 수, I/O 성능 지표 등을 반드시 비교해 보세요.

 

반응형