我正在将sp_whoisactive
的输出记录到表中,以帮助确定我需要进一步研究的问题。
我注意到我的大多数高利用率查询来自SQLAgent Jobs,而在“Program_Name
”列中,它只给出了“SQLAgent - TSQL Job Step (Job 0xFA25C66E3D1.... : Step 7)
”作为示例。
我怎样才能找回实际的工作名称,因为我无法运行sp_who
或类似的检查,因为这是以前的执行。
下面将为您提供按阻止受害者排序的查询,以及按要求的JobName。
SELECT er.session_id as [Spid]
,er.percent_complete
,DB_NAME(er.database_id) as [Database]
,CASE WHEN er.blocking_session_id=er.session_id THEN 0 ELSE er.blocking_session_id END Blocker
,Mem.used_memory_kb
,er.wait_time
,Mem.granted_memory_kb
,ES.nt_user_name
,er.status as [Status]
,er.wait_type as [Wait]
,ES.program_name
,J.Name as JobName
,ES.host_name
,ES.nt_domain
,er.start_time
,CONVERT(varchar(12), DATEADD(ms, DATEDIFF(ms, er.start_time, GETDATE()), 0), 108) TotalTime
,cast(qp.query_plan as XML) plans
,SUBSTRING(qt.text, er.statement_start_offset / 2,2000) [running Query]
,qt.text [Parent Query]
FROM sys.dm_exec_requests er
inner JOIN sys.dm_exec_sessions ES ON er.session_id = ES.session_id
outer APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
outer apply sys.dm_exec_query_plan(er.plan_handle) qp
LEFT JOIN sys.dm_exec_query_memory_grants Mem ON er.session_id = Mem.session_id
Left join msdb.dbo.sysjobs J on es.program_name like '%'+cast(right(j.job_id,12)as varchar(12)) +'%'
WHERE ES.program_name <>'Microsoft® Windows® Operating System'
ORDER BY
4 DESC ,
1 asc