SQL의 데이터베이스 파일에서 사용할 수있는 공간을 확인하기 위해 약간 수정 된 버전의 쿼리를 사용하여 어딘가에 있습니다.SQL 서버 데이터베이스 파일에서 사용되지 않는 공간 확인
SELECT
GETDATE() AS [Timestamp],
[TYPE] = A.TYPE_DESC,
[FILE_Name] = A.name,
[FILESIZE_MB] = CONVERT(DECIMAL(10, 2), A.SIZE/128.0),
[USEDSPACE_MB] = CONVERT(DECIMAL(10, 2), A.SIZE/128.0 - ((SIZE/128.0) - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)),
[FREESPACE_MB] = CONVERT(DECIMAL(10, 2), A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0),
[FREESPACE_%] = CONVERT(DECIMAL(10, 2), ((A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)/(A.SIZE/128.0)) * 100),
[FILEGROUP_NAME] = fg.name,
[File_Location] = A.PHYSICAL_NAME
FROM
sys.database_files A
LEFT JOIN
sys.filegroups fg ON A.data_space_id = fg.data_space_id
WHERE
A.TYPE_DESC NOT LIKE 'LOG'
ORDER BY
A.TYPE desc, A.NAME;
데이터가 데이터베이스에서 삭제 될 때 데이터베이스 파일이 축소되지 않으므로이 쿼리는 내가 찾고있는 모든 정보를 제공하지 않습니다.
SpaceUsed
파일 속성 (삭제 된 레코드로 인해 사용 가능한 공간 대비)에 실제 데이터가 얼마나 많이 들어 있는지 알 수있는 방법이 있습니까? 아니면 DBCC SHRINKDATABASE
같은 것을하고 파일의 실제 크기를 변경하는 유일한 옵션입니까?
나는 sp_spaceused
, sys.dm_db_index_physical_stats
및 다른 몇 가지 사항을 살펴 보았지만 해결 방법을 찾지 못했습니다.
업데이트 : 나는 그것이 내가 옳다고 확신하지는 않지만, 내가 필요한 것에 조금 더 가깝다고 생각하는 것을 발견했다. 사용 된 페이지 수/평균 페이지 공간에서 사용 된 공간을 계산하는 것은 내가 기대하는 바에 가까운 값처럼 보입니다.
SELECT
page_count,
avg_page_space_used_in_percent
FROM
sys.dm_db_index_physical_stats(db_id('TestDB'), NULL, NULL, NULL, 'Detailed')
감사합니다. 이것은 기본적으로 쿼리에서 얻는 것과 같은 유형의 물건이므로 찾고있는 것을하지 않습니다. 나는 내가 원하는 것이 가능한지 아닌지 실제로 확신하지 못합니다. – thephez