データベース スナップショットのスパース ファイルのサイズを表示する方法 (Transact-SQL)

適用対象: SQL Server

このトピックでは、Transact-SQL を使用して、SQL Server のデータベース ファイルがスパース ファイルであることを確認する方法と、その実サイズおよび最大サイズを調べる方法について説明します。 NTFS ファイル システムの機能であるスパース ファイルは、SQL Server のデータベース スナップショットによって使用されます。

Note

スパース ファイルは、データベース スナップショットの作成時に CREATE DATABASE ステートメント内のファイル名を使用して作成されます。 これらのファイル名は、 sys.master_filesphysical_name 列に格納されます。 ソース データベース内とスナップショット内のいずれであっても、 sys.database_filesphysical_name 列には、ソース データベース ファイルの名前が必ず格納されます。

データベース ファイルがスパース ファイルであることを確認する

  1. SQL Serverのインスタンスで:

    データベース スナップショットの sys.database_files または sys.master_files から is_sparse列を選択します。 次に示すように、この値からファイルがスパース ファイルであるかどうかがわかります。

    1 = ファイルはスパース ファイルです。

    0 = ファイルはスパース ファイルではありません。

スパース ファイルの実際のサイズを調べる

Note

スパース ファイルは 64 KB 単位で大きくなるので、ディスク上のスパース ファイルのサイズは常に 64 KB の倍数になります。

スナップショットの各スパース ファイルが現在ディスク上で使用しているバイト数を表示するには、SQL Server の sys.dm_io_virtual_file_stats 動的管理ビューの size_on_disk_bytes 列に対してクエリを実行します。

スパース ファイルが使用するディスク領域を表示するには、Microsoft Windows でファイルを右クリックして [プロパティ]をクリックし、 [ディスク上のサイズ] の値を確認します。

スパース ファイルの最大サイズを調べる

スパース ファイルの最大サイズは、スナップショット作成時点での対応するソース データベース ファイルのサイズです。 このサイズを調べるには、次のいずれかを実行します。

  • Windows コマンド プロンプトを使用する:

    1. Windows の dir コマンドを使用します。

    2. スパース ファイルを選択し、ファイルの [プロパティ] ダイアログ ボックスを開き、 [サイズ] の値を確認します。

  • SQL Serverのインスタンスで:

    データベース スナップショットの sys.database_files または sys.master_files から size列を選択します。 size 列の値には、スナップショットが使用できる最大領域 (SQL ページ数) が反映されます。この値は、Windows の [サイズ] フィールドに相当しますが、ファイル内の SQL ページ数で表されている点が異なります。バイト単位のサイズは次のように表されます。

    ( number_of_pages * 8192)

次のスクリプトは、各スパース ファイルのディスク上のサイズを KB 単位で表示します。 また、スパース ファイルが増えた場合の最大サイズも MB 単位で表示します。 SQL Server Management Studio に Transact-SQL スクリプトを読み込む

SELECT  DB_NAME(sd.source_database_id) AS [SourceDatabase], 
		sd.name AS [Snapshot],
		mf.name AS [Filename], 
		size_on_disk_bytes/1024 AS [size_on_disk (KB)],
		mf2.size/128 AS [MaximumSize (MB)]
FROM sys.master_files mf
JOIN sys.databases sd
	ON mf.database_id = sd.database_id
JOIN sys.master_files mf2
	ON sd.source_database_id = mf2.database_id
	AND mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
WHERE mf.is_sparse = 1
AND mf2.is_sparse = 0
ORDER BY 1;

参照

データベース スナップショット (SQL Server)
sys.fn_virtualfilestats (Transact-SQL)
sys.database_files (Transact-SQL)
sys.master_files (Transact-SQL)