SE の雑記

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

SQL Server エージェント ジョブのプログラム名をジョブ名に変換する

without comments

SQL Server で SQL Server エージェントでジョブを実行している場合、sys.dm_exec_sessions の「program_name」に 「SQLAgent – TSQL JobStep (Job 0x66479B4A282C8545BED20F14B618478A : Step 2)」というような形式で表示が行われています。

この際、表示されている program_name ですが、GUID を Binary 表示したものとなっています。

これをジョブ ID と関連付けるためには、次のようなクエリを実行します。

SELECT
	T.*,
	j.name,
	j.description
FROM
(
	SELECT
		program_name,
		CAST(
		CONVERT(varbinary,
		SUBSTRING(
			program_name,
			CHARINDEX('0x', program_name),
			34
		),1)  AS uniqueidentifier) AS job_id
	FROM
		sys.dm_exec_sessions  AS es
	WHERE 
		program_name Like '%JobStep%0x%'
) AS T
LEFT JOIN msdb.dbo.sysjobs AS j
	ON j.job_id = T.job_id

 

これにより、SQL Server エージェント ジョブの program_name を実際のジョブ名と関連付けることができます。

image

sys.dm_exec_requests と sys.dm_exec_sessions を組み合わせて、実行中のクエリ情報を取得する際にはプログラム名も取得するのが定石となります。

SQL Server エージェント ジョブについても「実際にはどのジョブなのか?」が確認できた方が分析の効率が良いですので、このような方法で program_name をジョブ名と関連付けるための方法は覚えておくとよいかと。

Written by Masayuki.Ozawa

4月 30th, 2020 at 12:15 am

Posted in SQL Server

Tagged with

Leave a Reply