SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database で利用状況モニターのプロセス情報相当を取得

leave a comment

オンプレミスの SQL Server に SSMS で接続した場合、現状を取得するための利用状況モニターを使用することができます。

image

接続されているセッションからの実行状況を取得するために、プロセスのカテゴリをよく使用することがあります。
image

似たような情報を SQL Database でも取得できると便利かなと思ってクエリを作ってみました。

以下のようなクエリで利用状況モニター相当の情報が取得できるかと思います。
実行するとセッション単位に情報が取得されます。

SELECT
	es.session_id,
	er.request_id,
	er.start_time,
	er.start_time,
	es.last_request_start_time,
	es.last_request_end_time,
	CASE WHEN er.sql_handle IS NULL
		THEN ec_text.text
		ELSE er_text.text
	END AS text,
	er.command,
	es.status,
	er.wait_type,
	er.last_wait_type,
	er.wait_resource,
	er.database_id,
	DB_NAME(DB_ID()) AS database_name,
	er.user_id,
	er.wait_time,
	er.open_resultset_count,
	er.open_resultset_count,
	er.percent_complete,
	er.estimated_completion_time,
	es.total_elapsed_time,
	er.total_elapsed_time AS exec_requests_total_elapsed_time,
	es.cpu_time,
	er.cpu_time AS exec_requests_cpu_time,
	es.memory_usage,
	es.total_scheduled_time,
	es.reads,
	er.reads AS exec_requests_reads,
	es.writes,
	er.writes AS exec_requests_writes,
	es.logical_reads,
	er.logical_reads AS exec_requests_logical_reads,
	es.row_count,
	er.row_count AS exec_requests_row_count,
	er.granted_query_memory,
	er.scheduler_id,
	er.transaction_isolation_level,
	er.executing_managed_code,
	es.lock_timeout,
	er.lock_timeout as exec_requests_lock_timeout,
	es.deadlock_priority,
	er.deadlock_priority AS exec_requests_deadlock_priority,
	es.host_name,
	es.program_name,
	es.login_time,
	es.login_name,
	es.client_version,
	es.client_interface_name,
	er.query_hash,
	er.query_plan_hash
FROM
	sys.dm_exec_sessions es
	LEFT JOIN
	sys.dm_exec_requests er
	ON
	es.session_id = er.session_id
	LEFT JOIN
	(SELECT * FROM sys.dm_exec_connections WHERE most_recent_sql_handle <> 0x0) AS ec
	ON
	es.session_id = ec.session_id
	OUTER APPLY
	sys.dm_exec_sql_text(er.sql_handle) AS er_text
	OUTER APPLY
	sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS ec_text
WHERE
	es.session_id <> @@SPID
ORDER BY
	session_id ASC

 

実行中のセッションについては実行中のクエリのテキストが、すでにクエリが完了し、セッションが残っている情報については、直近で実行されたクエリのテキストが出力されます。

image

SQL Server の場合はどのデータベースでクエリを実行しても問題ありませんが、SQL Database の場合は、接続しているデータベースによって情報が異なってきますので、情報を取得したいデータベースに接続した状態でクエリを実行する必要があります。

オンプレミスの SQL Server の情報になりますが、SQL Server 2012 System Views Map というシステムビュー (動的管理ビュー含む) の相関関係がわかるマップが提供されていますので、SQL Database についてもこれらの情報を参考にして管理用クエリを組むと楽かと。

# 一部 DMV が存在しないのであくまでも参考になりますが。

Share

Written by Masayuki.Ozawa

8月 6th, 2014 at 3:47 pm

Posted in SQL Database

Tagged with

Leave a Reply