快速查詢 SQL Server Agent 當前正在執行的作業、所在步驟、執行命令與請求來源,輔助 DBA 即時排查長時間執行或卡住的作業。
BEGIN
DECLARE @jobstatus TABLE(
Job_ID UNIQUEIDENTIFIER,
Last_Run_Date INT,
Last_Run_Time INT,
Next_Run_Date INT,
Next_Run_Time INT,
Next_Run_Schedule_ID INT,
Requested_To_Run INT,
Request_Source INT,
Request_Source_ID VARCHAR(100),
Running INT,
Current_Step INT,
Current_Retry_Attempt INT,
State INT
);
INSERT INTO @jobstatus
EXEC MASTER.dbo.xp_sqlagent_enum_jobs 1, 'garbage';
SELECT DISTINCT
CASE State
WHEN 1 THEN 'Job is Executing'
WHEN 2 THEN 'Waiting for thread to complete'
WHEN 3 THEN 'Between retries'
WHEN 4 THEN 'Job is Idle'
WHEN 5 THEN 'Job is suspended'
WHEN 7 THEN 'Performing completion actions'
END AS State,
sj.name AS JobName,
CASE WHEN ej.running = 1 THEN st.step_id ELSE 0 END AS CurrentStepID,
CASE WHEN ej.running = 1 THEN st.step_name ELSE 'not executing' END AS CurrentStepName,
st.command AS StepCommand,
ej.request_source_id AS RequestSource
FROM @jobstatus ej
JOIN msdb..sysjobs sj ON sj.job_id = ej.job_id
JOIN msdb..sysjobsteps st ON st.job_id = ej.job_id
AND (st.step_id = ej.current_step OR ej.current_step = 0)
WHERE ej.running + 1 > 1; -- 僅顯示正在執行的作業
END;
https://webnesbay.com/sql-server-jobs-monitoring-script/
dbo.usp_MonitorRunningJobs,排程每分鐘執行並寫入記錄表。sp_whoisactive 或 dm_exec_requests 進一步關聯等待資源與阻塞鏈。