database mdf 파일 사이즈 축소

DataBase/MS-SQL|2019. 10. 11. 10:52

 

로그 서버에 DB 파일 사이즈가 900기가에 육박하여 불필요한 로그를 삭제하고 

 

DBCC SHRINKFILE(DB명, TRUNCATEONLY) 

 

위와 같이 축소를 했다.

 

하지만 크게 줄어들지 않은 mdf 파일 사이즈

 

왜 그렇지 하고 찾아보니 SHRINKFILE 옵션을 찾아보니 

 

(MS docs 링크)

 

NOTRUNCATE
target_percent의 지정 여부와 관계없이 데이터 파일의 끝에서 할당된 페이지를 파일 앞의 할당되지 않은 페이지로 이동합니다. 파일 끝의 사용 가능한 공간이 운영 체제에 반환되지 않고, 파일의 물리적 크기가 변경되지 않습니다. 그러므로 NOTRUNCATE를 지정하면 파일이 축소되지 않는 것처럼 보입니다. NOTRUNCATE는 데이터 파일에만 적용되며 로그 파일에는 영향을 주지 않습니다. 이 옵션은 FILESTREAM 파일 그룹 컨테이너에서 지원되지 않습니다.

 

TRUNCATEONLY
파일 끝의 모든 사용 가능한 공간을 운영 체제로 해제하지만 파일 내에서 페이지 이동을 수행하지 않습니다. 데이터 파일은 마지막으로 할당된 익스텐트까지만 축소됩니다. TRUNCATEONLY로 지정되면 target_size가 무시됩니다.
TRUNCATEONLY 옵션은 로그에 있는 정보를 이동시키지 않습니다. 하지만 로그 파일의 끝에서 비활성 상태의 VLF를 제거합니다. 이 옵션은 FILESTREAM 파일 그룹 컨테이너에서 지원되지 않습니다.

 

TRUNCATEONLY 옵션으로는 중간중간에 비어있는 공간에 대해서 해제를 하지 못한다는 것.

 

NOTRUNCATE 옵션으로 중간중간 비어있는 공간들을 당겨주고

TRUNCATEONLY 옵션으로 해제해주어야 원하는 결과를 얻을 수 있었다.

 

 


DBCC SHRINKFILE(DB명,NOTRUNCATE) 
-- DB 빈 공간 정리 마치 조각 모음과 같다. ( 빈 공간은 그대로 남아있다 )

DBCC SHRINKFILE(DB명, TRUNCATEONLY) 
-- 빈 여유 공간 제거 ( 사이즈 축소 )

 

 

 

댓글()