利用SQL查看JOB执行的状况

博客给出了两条SQL查询语句,用于查询失败或取消的作业信息。包括作业名称、步骤名称、状态、日期、时间和错误信息等。通过连接多个表,筛选出启用的作业,按日期降序排列,还提供了简化版查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT sj.name as job, left(sjh_d.step_name, 20) as [step name], 

--What is it in English
CASE sjh.run_status
 WHEN 0 THEN 'Failed'
 WHEN 1 THEN 'Succeeded'
 WHEN 2 THEN 'Retry'
 WHEN 3 THEN 'Canceled'
 ELSE 'Unknown'
END as status,

--Convert Integer date to regular datetime
SUBSTRING(CAST(sjh.run_date AS CHAR(8)),5,2) + '/' +
RIGHT(CAST(sjh.run_date AS CHAR(8)),2) + '/' +
LEFT(CAST(sjh.run_date AS CHAR(8)),4) as [date]


--Change run time into something you can recognize (hh:mm:ss)
, LEFT(RIGHT('000000' + CAST(sjh.run_time AS VARCHAR(10)),6),2) + ':' +
 SUBSTRING(RIGHT('000000' + CAST(sjh.run_time AS VARCHAR(10)),6),3,2) + ':' +
 RIGHT(RIGHT('000000' + CAST(sjh.run_time AS VARCHAR(10)),6),2) as [time]

--error message
,sjh_d.message as error

FROM msdb.dbo.sysjobs sj --job id and name

--Job history
INNER JOIN msdb.dbo.sysjobhistory sjh
ON sj.job_id = sjh.job_id
--fail details
LEFT JOIN  msdb.dbo.sysjobhistory sjh_d
ON sjh.job_id = sjh_d.job_id AND sjh_d.step_id > 0

--Only enabled jobs
WHERE sj.enabled = 1
--Only job outcome not each step outcome
AND sjh.step_id = 0
--Only failed or cancelled jobs
AND (sjh.run_status = 0 OR sjh.run_status = 3)

--Latest date first
ORDER BY sjh.run_date DES

-------------------------------------------
简化版
-------------------------------------------
SELECT  a.name as job, left(b.step_name, 20) as [step name],
CASE b.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry' WHEN 3 THEN 'Canceled' ELSE 'Running'  END as status,
SUBSTRING(CAST(b.run_date AS CHAR(8)),5,2) + '/' + RIGHT(CAST(b.run_date AS CHAR(8)),2) + '/' + LEFT(CAST(b.run_date AS CHAR(8)),4) as [date],
LEFT(RIGHT('000000' + CAST(b.run_time AS VARCHAR(10)),6),2) + ':' +  SUBSTRING(RIGHT('000000' + CAST(b.run_time AS VARCHAR(10)),6),3,2) + ':' +  RIGHT(RIGHT('000000' +  CAST(b.run_time AS VARCHAR(10)),6),2) as [time],
b.message as Err_message
From msdb..sysjobs a
INNER JOIN msdb..sysjobhistory b ON a.job_id = b.job_id
inner join (select job_id,max(instance_id)  as maxinstance from msdb..sysjobhistory  group by job_id) x
on a.job_id = x.job_id and b.instance_id = x.maxinstance
where a.enabled =1 and b.run_status <>1 and b.run_status <> 4
ORDER BY job, convert(char, b.run_date,111)+convert(char,b.run_time,111)  desc

### 解决 xxl-job 定时任务不执行的问题 #### 一、时区配置错误引发的任务未执行 当遇到由于时区设置不当造成定时任务未能按时触发的情况,需确认xxl-job调度中心以及各执行器节点的`application.properties`文件中的时区参数是否一致并正确设置了目标运行时区。通常情况下,默认采用的是UTC时间标准,在中国环境下应调整为东八区即`Asia/Shanghai`[^1]。 #### 二、网络连通性和注册机制引起的故障排查 对于因执行器无法正常向Admin端完成自我注册而导致的任务失败现象,建议核查容器内部署的服务能否稳定访问外部资源,并确保Docker宿主机与集群内的其他成员间存在良好的通信条件。另外还需注意检查执行器所处环境下的防火墙策略是否会阻碍其对外发起HTTP请求的过程。针对动态变化的IP地址可能带来的影响,推荐利用域名解析服务来代替直连方式实现更稳定的连接建立过程。 #### 三、任务实际已调度却无响应处理办法 如果观察到后台日志显示已经发起了对特定作业实例的调用指令但最终却没有看到预期的结果输出,则可能是由于某些特殊原因使得该次执行被意外中断或是根本就没有真正启动起来。此时可以通过增加更多的调试信息记录点以便于后续分析具体发生了什么异常状况;同时也应该考虑是否存在依赖关系尚未满足等问题阻止了程序继续向前推进。 #### 四、数据库层面潜在瓶颈排除措施 考虑到长时间占用大量计算资源的操作可能会间接干扰到xxl-job自身的运作效率甚至引起整个系统的瘫痪,故而有必要定期维护好历史数据表单以防止它们变得过于庞大从而拖慢整体性能表现。特别是像`XXL_JOB_QRTZ_TRIGGER_LOG`这样的日志型表格更要保持合理的清理频率以免累积过多冗余条目形成不必要的负担[^3]。 ```sql DELETE FROM XXL_JOB_QRTZ_TRIGGER_LOG WHERE trigger_time >= '指定起始时刻' AND trigger_time <= '截止日期'; ``` 上述SQL语句展示了如何安全有效地清除过期的日志记录而不至于给现有业务流程带来负面影响的方法之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值