sys.dm_os_volume_stats(Transact-SQL)

適用対象:SQL Server

指定されたデータベースやファイルがSQL Serverに保存されているオペレーティングシステムのボリューム(ディレクトリ)に関する情報を返します。 この動的管理機能を使って、物理ディスクドライブの属性を確認したり、ディレクトリの空き容量情報を返したりします。

Transact-SQL 構文表記規則

Syntax

sys.dm_os_volume_stats (database_id , file_id)

引数

database_id

データベースの ID です。 database_id int, 、既定値はありません。 NULL にすることはあり得ません。

file_id

ファイルの ID。 file_idint で、既定値はありません。 NULL にすることはあり得ません。

返されるテーブル

Column データの種類 Description
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ではnullableではなく、Linuxではnullを返します。
supports_alternate_streams tinyint ボリュームが代替ストリームをサポートしているかどうかを示します。 Windowsではnullableではなく、Linuxではnullを返します。
supports_sparse_files tinyint ボリュームがスパースファイルをサポートしているかどうかを示します。 Windowsではnullableではなく、Linuxではnullを返します。
is_read_only tinyint ボリュームが現在読み取り専用とマークされているかどうかを示します。 NULL 値は許可されません。
is_compressed tinyint このボリュームが現在圧縮されているかどうかを示します。 Windowsではnullableではなく、Linuxではnullを返します。
incurs_seek_penalty tinyint このボリュームをサポートするストレージの種類を示します。 使用可能な値は次のとおりです。

0: このボリュームではシークペナルティはありません。通常、ストレージデバイスがPMMやSSDの場合です

1このボリュームに対してペナルティをシークします。通常はストレージデバイスがHDDの場合です

2:ストレージの種類は、ボリュームがUNCパス上またはマウント共有されている場合に判別できません

NULL:ストレージの種類はLinuxオペレーティングシステムでは特定できません

適用対象: SQL Server 2019 (15.x) 以降のバージョン

Permissions

SQL Server 2019 (15.x) 以前のバージョンでは、サーバーに対する VIEW SERVER STATE アクセス許可が必要です。

SQL Server 2022 (16.x) 以降のバージョンでは、サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

Examples

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);