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) | ❌ 기본적으로 비활성화 & 비권장 |
🧼 정리된 절차
TRUNCATE TABLE
로 데이터 제거ALTER INDEX ... REBUILD
또는ALTER TABLE ... REBUILD
로 공간 정리DBCC SHRINKFILE
로 데이터 파일 크기 줄임sp_spaceused
또는sys.database_files
로 결과 확인