sys.dm_os_volume_stats (Transact-SQL)

适用范围:SQL Server

返回有关指定数据库和文件存储在 SQL Server 中的操作系统卷(目录)的信息。 通过使用此动态管理函数,可以检查物理磁盘驱动器的属性,或返回有关目录的可用空间的信息。

Transact-SQL 语法约定

语法

sys.dm_os_volume_stats (database_id , file_id)

参数

database_id

数据库 ID。 database_id 的数据类型为 int,无默认值。 不能 NULL

file_id

文件的 ID。 file_id为 int,无默认值。 不能 NULL

返回的表

数据类型 描述
database_id int 数据库 ID。 不可为 null。
file_id int 文件的 ID。 不可为 null。
volume_mount_point nvarchar(512) 根卷上的装入点。 可返回空字符串。 在 Linux 上返回 null。
volume_id nvarchar(512) 操作系统卷 ID。 可返回空字符串。 在 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 2019 (15.x) 及更高版本

权限

SQL Server 2019 (15.x) 和早期版本需要对服务器具有 VIEW SERVER STATE 权限。

SQL Server 2022 (16.x) 及更高版本需要对服务器具有 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.file_id);