ディスクの空き容量を確認するクエリー
クエリーでディスクの空き容量を確認する
データベースのサイズは知らない間に大きくなっていたりしますよね。
ディスクがいっぱいになると、急に「オブジェクトの領域を割り当てられませんでした」など、エラーが出てシステムが使えなくなってしまいます。
ですので、ディスクの空き容量をモニターするのも大事なお仕事ですね。
ここでは、クエリーでディスクの空き容量を確認する方法をご紹介します。
ディスクの空き容量を確認する方法1 - xp_fixeddrives
ディスクの空き容量を確認するのに便利で簡単なのは、xp_fixeddrives というドキュメントされていないストアドプロシジャーを使う方法です。
このストアドプロシジャーは、ローカルドライブとその空き容量を MB で返してくれます。 マップされたドライブは含まれません。
ディスクの空き容量を確認する方法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 に換算しました。
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;
実際の Dドライブの空き容量はこんな感じです。
空き容量不足をモニターするには、上記のクエリーで取得した空き容量が一定の容量を下回った際に、Email を送信するストアドプロシジャーを作って、SQL Server Agent にジョブを作ってスケジュールしておくのも良いですね。
ご参考までに、SQL Server から E メールを送信する方法はこちらです。
>> SQL Server から E メールを送信する