从sp_whoisactive结果中的“program_name”获取作业名称

问题描述 投票:0回答:1

我正在将sp_whoisactive的输出记录到表中,以帮助确定我需要进一步研究的问题。

我注意到我的大多数高利用率查询来自SQLAgent Jobs,而在“Program_Name”列中,它只给出了“SQLAgent - TSQL Job Step (Job 0xFA25C66E3D1.... : Step 7)”作为示例。

我怎样才能找回实际的工作名称,因为我无法运行sp_who或类似的检查,因为这是以前的执行。

sql-server
1个回答
0
投票

下面将为您提供按阻止受害者排序的查询,以及按要求的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
© www.soinside.com 2019 - 2024. All rights reserved.