我想確定在SQL Server數據庫文件中有多少空間可用,使用這個略有修改的查詢版本,我在SO上找到了某處。檢查SQL Server數據庫文件中未使用的空間
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