gpt4 book ai didi

SQL代理作业: Determine how long it has been running

转载 作者:行者123 更新时间:2023-12-02 09:57:44 29 4
gpt4 key购买 nike

场景

某些 SQL 代理作业计划全天每隔几分钟运行一次。

在某些情况下,它会错过下一个计划,因为它仍在按照上一个计划运行。

每隔一段时间,作业可能会“挂起”。这不会产生失败(因为作业尚未停止)。发生这种情况时,可以手动停止该作业,并在下次运行时正常工作。它旨在从中断处继续。

最有效的方法是什么......?

我想要一种方法来确定名为“JobX”的 SQL 代理作业当前运行的时间(以秒为单位)。如果它当前没有运行,我们可以返回零。

这样,如果作业运行的时间超过特定阈值,我可以停止该作业。

我认为可以使用 xp_sqlagent_enum_jobs 和 sysjobhistory 的组合,但我很好奇是否有更好的解决方案......并且希望能够从你们其他人已经遇到并解决的障碍中受益。

最佳答案

这个解决方案可行:

SELECT DATEDIFF(SECOND,aj.start_execution_date,GetDate()) AS Seconds
FROM msdb..sysjobactivity aj
JOIN msdb..sysjobs sj on sj.job_id = aj.job_id
WHERE aj.stop_execution_date IS NULL -- job hasn't stopped running
AND aj.start_execution_date IS NOT NULL -- job is currently running
AND sj.name = 'JobX'
and not exists( -- make sure this is the most recent run
select 1
from msdb..sysjobactivity new
where new.job_id = aj.job_id
and new.start_execution_date > aj.start_execution_date
)

这是依赖于系统表的更一般的检查。如果您更喜欢自定义路线,则可以将作业插入到您创建的作业日志表中。

关于SQL代理作业: Determine how long it has been running,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726585/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com