都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

データベースファイルが格納されているドライブの残容量をチェックしてみる

今回やることを説明してみる

 開発環境の SQL Server って容量監視とか意外とやらないですよね。プログラムを組んでやってしまいがちですが、SQL Server の動的管理関数を使ったクエリでも容量監視はできますので、紹介したいと思います。

使用する環境を説明してみる

 Microsoft Azure 上の SQL Server 2014 を使います。

実験してみる

 動的管理関数である、sys.dm_os_volume_stats (Transact-SQL) を使ってみましょう。使い方は下記の通りです。

sys.dm_os_volume_stats (database_id, file_id)

この動的管理関数は、

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

です。(説明手抜き.....)
 database_id と file_id を渡す必要があるので、sys.master_files (Transact-SQL) を使ってみましょう。下記のクエリを実行してみましょう。

select * from sys.master_files

f:id:koogucc11:20141111205548p:plain
 上記のクエリと動的管理関数を使って下記のようなクエリを作ってみました。ドライブごとの使用可能なパーセンテージを出力します。

SELECT DISTINCT 
       [ドライブは?] = ovs.volume_mount_point,
       [使用できるのは?] = RTRIM(CAST((CAST(ovs.available_bytes AS float) / 
	                               CAST(ovs.total_bytes AS float) * 100) as char(20))) + ' %'
FROM sys.master_files AS mf
CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) AS ovs;

f:id:koogucc11:20141112104850p:plain

ちゃんと監視するために、さらに応用してみる

 以前、下記のような記事を書きました。

SQL Server のチューニングについてまとめてみる - その4 - ( クエリパフォーマンスの結果をメールで送る ) - 都内で働くSEの技術的なひとりごと
 今回のクエリを上記の記事内容のように設定して、自分宛てにおくってしまえば、容量不足でデータベースサーバが落ちちゃうこともないですよね?

おわりに何か書いてみる

 監視は大切です。

設定の内容とか、ログの使用量とかのデータベースの状態を把握してみる - 都内で働くSEの技術的なひとりごと

sp_server_diagnostics を試してみた - 都内で働くSEの技術的なひとりごと

リソースのロック状態について説明してみた - 都内で働くSEの技術的なひとりごと
※リソースのロックとか、待ちに関しても記事書きたいですね。