Azure에서 Trucate후 압축한 후 Freespace 를 줄이는 방법

By | 2025-07-28

Azure SQL Database 또는 Azure SQL Managed Instance에서 TRUNCATE데이터베이스 파일의 실제 크기(Freespace)를 줄이는 것은 일반적인 온프레미스 SQL Server와는 차이가 있습니다.


✅ 기본 개념 요약

작업설명
TRUNCATE TABLE테이블의 데이터를 빠르게 삭제하지만, 파일 크기(DB 공간)는 줄어들지 않음
DBCC SHRINKDATABASE / DBCC SHRINKFILE사용하지 않는 공간을 줄임 (하지만 Azure에서는 주의 필요)
Azure SQL자동 크기 조절 기능이 있지만 자동 축소(auto-shrink)는 없음. 수동 축소만 가능

📌 목표: TRUNCATE → 압축 → 실제 사용 공간 줄이기 (Azure 기준)

1. TRUNCATE TABLE 실행

TRUNCATE TABLE [YourTableName];
  • 데이터는 빠르게 삭제되지만, 공간은 여전히 할당되어 있음.

2. 인덱스 재구성 또는 압축 (optional)

-- 테이블에 클러스터드 인덱스가 있다면 재구성
ALTER INDEX ALL ON [YourTableName] REBUILD;

또는:

-- 데이터 압축 적용 (예: 페이지 압축)
ALTER TABLE [YourTableName] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE); -- 또는 ROW

📌 목적: 내부적으로 공간 최적화. 공간 줄이기 전 “실제 사용 공간” 최소화


3. DBCC SHRINKFILE 실행 (Azure에서 사용 가능)

-- 데이터 파일 이름 확인
SELECT name AS FileName, type_desc, size * 8 / 1024 AS SizeMB
FROM sys.database_files;

-- Shrink 실행 (예: 100MB로 줄이기)
DBCC SHRINKFILE (N'YourDataFileName', 100);

⚠️ 주의:

  • 너무 자주 SHRINK하면 인덱스 조각화 증가, 성능 저하 발생 가능
  • 권장: 한 번만, 또는 유지보수 시간에 실행

4. (옵션) DBCC SHRINKDATABASE 실행

-- DB 전체를 지정된 %까지 축소
DBCC SHRINKDATABASE (YourDBName, 10); -- 10% 여유공간만 남기고 압축

⚠️ DBCC SHRINKDATABASE는 일부 Azure SQL 환경에서는 제한될 수 있으므로 보통은 SHRINKFILE이 더 안전합니다.


📈 공간 사용량 확인 쿼리

-- 데이터베이스의 공간 정보 보기
EXEC sp_spaceused;

-- 파일별 크기 보기
SELECT
    name AS LogicalName,
    type_desc AS FileType,
    size * 8 / 1024 AS SizeMB,
    FILEPROPERTY(name, 'SpaceUsed') * 8 / 1024 AS UsedSpaceMB
FROM sys.database_files;

✅ Azure 환경 팁

환경지원 여부
Azure SQL Database (PaaS)DBCC SHRINKFILE 가능, DBCC SHRINKDATABASE 일부 제한
Azure SQL Managed Instance✅ 온프레미스와 동일하게 SHRINK 가능
자동 축소(AUTO_SHRINK)❌ 기본적으로 비활성화 & 비권장

🧼 정리된 절차

  1. TRUNCATE TABLE 로 데이터 제거
  2. ALTER INDEX ... REBUILD 또는 ALTER TABLE ... REBUILD 로 공간 정리
  3. DBCC SHRINKFILE 로 데이터 파일 크기 줄임
  4. sp_spaceused 또는 sys.database_files로 결과 확인

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다