ディスクの空き容量を確認するクエリー

クエリーでディスクの空き容量を確認する

データベースのサイズは知らない間に大きくなっていたりしますよね。

ディスクがいっぱいになると、急に「オブジェクトの領域を割り当てられませんでした」など、エラーが出てシステムが使えなくなってしまいます。

ですので、ディスクの空き容量をモニターするのも大事なお仕事ですね。

ここでは、クエリーでディスクの空き容量を確認する方法をご紹介します。


ディスクの空き容量を確認する方法1 - xp_fixeddrives

ディスクの空き容量を確認するのに便利で簡単なのは、xp_fixeddrives というドキュメントされていないストアドプロシジャーを使う方法です。

このストアドプロシジャーは、ローカルドライブとその空き容量を MB で返してくれます。 マップされたドライブは含まれません。

EXEC master..xp_fixeddrives;

xp_fixeddrives を使ったクエリーと実行結果

ディスクの空き容量を確認する方法2 - dm_os_volume_stats

もうひとつ、SQL Server 2008 R2 以上では、 sys.dm_os_volume_stats というビューを使って確認することもできます。

sys.dm_os_volume_stats は、指定した database_id と file_id のファイルが保存されているドライブの空き容量などの情報を返してくれます。

database_id と file_id を取得するには、全てのデータベースファイルの情報を返してくれる sys.master_files ビューと CROSS APPLY すると便利です。


sys.dm_os_volume_stats と sys.master_files を使って、ディスクの空き容量を確認するクエリーは以下の通りです。

ドライブが同じだと、トータルの容量や空き容量は同じなので、DISTINCT を使って、容量の単位はバイトなので、MB に換算しました。

SELECT   DISTINCT
         VS.volume_mount_point,
         ((VS.total_bytes / 1024) / 1024) AS total_MB,
         ((VS.available_bytes / 1024) / 1024) AS available_MB
FROM     sys.master_files AS MF
            CROSS APPLY sys.dm_os_volume_stats(MF.database_id, MF.file_id) AS VS;

dm_os_volume_stats を使ったクエリーと実行結果


実際の Dドライブの空き容量はこんな感じです。

D ドライブの実際の空き容量


空き容量不足をモニターするには、上記のクエリーで取得した空き容量が一定の容量を下回った際に、Email を送信するストアドプロシジャーを作って、SQL Server Agent にジョブを作ってスケジュールしておくのも良いですね。


ご参考までに、SQL Server から E メールを送信する方法はこちらです。
>> SQL Server から E メールを送信する

© 2010-2024 SQL Server 入門