sys.dm_os_volume_stats (Transact-SQL)

適用於:SQL Server

傳回指定資料庫和檔案儲存在 SQL Server 之作業系統磁片區 (directory) 的相關資訊。 使用此動態管理功能來檢查實體磁片磁碟機的屬性,或傳回目錄的可用可用空間資訊。

Transact-SQL 語法慣例

語法

sys.dm_os_volume_stats (database_id, file_id)  

引數

database_id
資料庫的識別碼。 database_id為 int ,沒有預設值。 不可以是 NULL。

file_id
檔案的識別碼。 file_id為 int ,沒有預設值。 不可以是 NULL。

傳回的資料表

資料行 資料類型 說明
database_id int 資料庫的識別碼。 不可以是 null。
file_id int 檔案的識別碼。 不可以是 null。
volume_mount_point nvarchar(512) 磁片區根目錄的掛接點。 可以傳回空字串。 在 Linux 作業系統上傳回 Null。
volume_id nvarchar(512) 作業系統磁片區識別碼。 可以傳回空字串。 在 Linux 作業系統上傳回 Null。
logical_volume_name nvarchar(512) 邏輯磁片區名稱。 可以傳回空字串。 在 Linux 作業系統上傳回 Null。
file_system_type nvarchar(512) 檔案系統磁片區的類型(例如 NTFS、FAT、RAW)。 可以傳回空字串。 在 Linux 作業系統上傳回 Null。
total_bytes bigint 磁片區位元組的總大小。 不可以是 null。
available_bytes bigint 磁片區上可用的可用空間。 不可以是 null。
supports_compression tinyint 指出磁片區是否支援作業系統壓縮。 在 Windows 上不能為 null,在 Linux 作業系統上傳回 Null。
supports_alternate_streams tinyint 指出磁片區是否支援替代資料流程。 在 Windows 上不能為 null,在 Linux 作業系統上傳回 Null。
supports_sparse_files tinyint 指出磁片區是否支援疏鬆檔案。 在 Windows 上不能為 null,在 Linux 作業系統上傳回 Null。
is_read_only tinyint 指出磁片區目前是否標示為唯讀。 不可以是 null。
is_compressed tinyint 指出此磁片區目前是否已壓縮。 在 Windows 上不能為 null,在 Linux 作業系統上傳回 Null。
incurs_seek_penalty tinyint 指出支援此磁片區的儲存體類型。 可能的值包括:

0:此磁片區沒有搜尋懲罰,通常是當存放裝置是 PMM 或 SSD 時

1:在此磁片區上搜尋懲罰,通常是當存放裝置是 HDD 時

2:當磁片區位於 UNC 路徑或掛接共用時,無法判斷儲存類型

Null:無法在 Linux 作業系統上判斷儲存體類型

適用于: SQL Server (從 SQL Server 2019 開始 (15.x))

安全性

權限

需要 VIEW SERVER STATE 權限。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

範例

A. 傳回所有資料庫檔案的總空間和可用空間

下列範例會傳回 SQL Server 實例中所有資料庫檔案的總空間和可用空間(以位元組為單位)。

SELECT f.database_id, f.file_id, volume_mount_point, total_bytes, available_bytes  
FROM sys.master_files AS f  
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id);  

B. 傳回目前資料庫的總空間和可用空間

下列範例會傳回目前資料庫中資料庫檔案的總空間和可用空間(以位元組為單位)。

SELECT database_id, f.file_id, volume_mount_point, total_bytes, available_bytes  
FROM sys.database_files AS f  
CROSS APPLY sys.dm_os_volume_stats(DB_ID(f.name), f.file_id);  

另請參閱

sys.master_files (Transact-SQL)
sys.database_files (Transact-SQL)