축소 후 원하는 파일 크기(MB 단위). SQL Server는 가능한 한 여기에 가깝게 축소
🧠 예시
-- 파일 이름 확인
SELECT name, type_desc, size * 8 / 1024 AS size_MB
FROM sys.database_files;
-- 예: 'MyDatabase'의 데이터 파일을 200MB로 줄이기
USE MyDatabase;
DBCC SHRINKFILE (MyDataFile, 200);
🧱 작동 방식
SQL Server는 데이터 파일에서 뒤쪽의 사용되지 않은 페이지를 찾아서 앞부분으로 압축(compact) 하고, 그 뒤의 빈 공간을 잘라냄
실제 데이터가 차 있는 공간은 줄일 수 없음 → 압축은 “빈 공간”에만 가능
🟡 주의 사항
문제
설명
❗ 성능 저하
SHRINK는 많은 디스크 I/O 발생, CPU도 사용됨
❗ 인덱스 조각화
인덱스 페이지를 무작위로 이동 → 심각한 조각화 발생
❌ 자주 사용 금지
주기적인 SHRINK는 비효율적이고 오히려 성능에 악영향
✅ 유지보수 후 단발성 사용
대용량 TRUNCATE, 삭제 후 한 번 SHRINK하는 건 OK
📌 사용 시점
상황
SHRINKFILE 사용 여부
✅ 대용량 데이터 삭제/TRUNCATE 후
가능
✅ 백업 전 일시적으로 공간 줄이기
가능
❌ 정기적으로 사용
비권장
❌ 공간이 곧 다시 필요할 예정일 때
비효율적 (축소 → 다시 확장됨)
✅ 자주 함께 쓰는 쿼리
-- 사용 중인 공간과 전체 공간 확인
SELECT
name AS LogicalName,
size * 8 / 1024 AS SizeMB,
FILEPROPERTY(name, 'SpaceUsed') * 8 / 1024 AS UsedMB
FROM sys.database_files;