SQL Database v12 は現状、S2 以上のデータベースであれば DMV から各種情報を取得することが可能です。 # というより、S2 未満でも取得したいものですね…。 2015/3/16 に確認したところ、S1 以下でも取得できるようになっていました。
取得できる情報から SQL Database v12 の各種構成を調べてみました。
S2 以上のDMV で取得できる情報として面白いと思ったのが、sys.dm_os_performance_counters から情報を取得できるということです。
ほかの sys.dm_os 系の DMV にもアクセスできるので各種情報を取得できます。
まずは、実行環境の情報から取得してみたいと思います。
実行基盤の情報を sys.dm_os_sys_info から取得します。
select cpu_count, hyperthread_ratio, physical_memory_kb, committed_kb, max_workers_count, virtual_machine_type_desc from sys.dm_os_sys_info
ここから、DB で使用できる CPU コアと、物理環境のメモリ、最大のワーカースレッド数、実行基盤を確認することができます。
どこまでが実環境とマッチしているかを判断するのが難しいですが、注目したい点としては、virtual_machine_type_desc が HYPERVISOR として認識されているところです。
今まで、SQL Database は物理環境上で実行されているということが記載されていましたが、v12 からはすべて仮想化環境上に移行されている可能性がありますね。
基盤系の情報を取得するためには、 sys.dm_os_hosts も合わせて確認をしておくと面白いかと思います。
それでは、冒頭に紹介した、sys.dm_os_performance_counters から興味深い情報を取得してみたいと思います。
まずは、以下のクエリを実行してみます。
select * from sys.dm_os_performance_counters where Object_name LIKE '%HTTP Storage%'
この情報からは HTTP Storage の情報を取得することができるのですが、この情報は Azure ストレージの BLOB 上に配置したデータベースのアクセス状況を確認することができます。
例としては以下のようなクエリを実行してみます。
select * from sys.dm_os_performance_counters where (Object_name LIKE '%HTTP Storage%' and instance_name = 'wasd2prodjawe1atr2rs9.blob.core.windows.net') GO DECLARE @i int = 1 BEGIN TRAN WHILE (@i <= 50000) BEGIN INSERT INTO Table_1 VALUES(NEWID()) SET @i += 1 END COMMIT TRAN GO select * from sys.dm_os_performance_counters where (Object_name LIKE '%HTTP Storage%' and instance_name = 'wasd2prodjawe1atr2rs9.blob.core.windows.net')
このクエリを実行すると、HTTP ストレージとして書き込みのカウンターが上昇していることが確認できます。
このことから、SQL Databaseでは、BLOB にデータベースを格納していることが確認できます。
類似の情報として、「CloudDB Messaging」と、「CloudDB Replication」もあるようです。
select * from sys.dm_os_performance_counters where object_name LIKE '%CloudDB%'
ただし、この情報は私の環境では 0 となっていました。
v11 までの DB の同期か、他の操作をした場合の情報が取得できるのかもしれないですね。
ほかに興味深い情報としては、sys.resource_governor_workload_groups があります。
ここからリソースガバナーのワークロードグループが取得できます。
SELECT * FROM sys.resource_governor_workload_groups
ただし、この情報は一部がマスキングされているようです。
select instance_name from sys.dm_os_performance_counters where object_name LIKE '%Workload Group Stats%' group by instance_name
このクエリを実行すると、以下のような情報が取得できます。
SQL Database では、かなり細かくリソースの使用状況が制御されているようです。
v12 の S2 以上であれば、このような情報のほかにさまざまな情報を取得することができます。
オンプレミスの SQL Server (Box の SQL Server) で取得できる情報を元にして、いろいろと試してみると面白いかと。