当前位置: 首页 > 面试题库 >

SQL Agent作业:确定已运行了多长时间

劳彦
2023-03-14
问题内容

场景

某些SQL Agent Jobs计划在一天中每隔几分钟运行一次。

在某些情况下,它会丢失其下一个计划,因为它仍在按上一个计划运行。

每隔一段时间,一项工作可能会“挂起”。这不会产生故障(因为作业尚未停止)。发生这种情况时,可以手动停止该作业,并在下次运行时正常运行。它旨在从停下来的地方重新取回。

最有效的方法是什么?

我想要一种确定名为“ 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
)

这是更常规的检查,取决于系统表。如果您希望使用自定义路线,则可以将作业插入到您创建的作业日志表中。



 类似资料:
  • 我在Master上运行了一个如下所示的spark代码: 我的集群配置:独立/客户机模式下的3个节点(1个主+2个从) 我尝试添加一个新的集群,因为上面搜索的关于资源不足的错误,但是这个错误在伸缩时仍然存在。 是因为节点中的内存较少吗??这里有什么建议吗??

  • 问题内容: 我有一个运行长时间运行的作业的Web服务(大约几个小时)。我正在使用Flask,Gunicorn和nginx进行开发。 我正在考虑做的事情是拥有一条需要很长时间才能完成的路由,调用一个创建线程的函数。然后,该函数将向路径返回一个GUID,并且路径将返回一个URL(使用GUID),用户可以使用该URL来检查进度。我正在将线程设为守护程序(thread.daemon = True),以便如

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?

  • 我在运行长时间队列工作时遇到问题,我目前正在使用Laravel 5.0。我曾经在数据库上对作业进行排队,对此没有问题,但我需要将其从DB中移动,所以我转到rabbitmq,所以我集成了这个包:https://github.com/vyuldashev/laravel-queue-rabbitmq/tree/v5.0 短时间工作一切都做得很好,那些需要不到3到4个薄荷糖的工作,但是我正在尝试为需要超

  • 问题内容: 我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。 很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为:芹菜调度程序通过将其再次发送给工作人员来重新运行刚刚完成的任务(我正在运行一个工作人员),并且它在同一时间发生了2次任务! 有人可以帮助我知道为什么会发生这种情况以及如何预防吗? 这些任务肯定

  • 问题内容: 作业系统:Cent-OS 我有一些作业(或脚本)要运行。每个工作需要3-5分钟。我有。我可以并行使用。请建议一些脚本或工具通过并行运行40个Jobs来处理30,000个Job。 我做了什么: 我创建了40个不同的文件夹,并通过为每个目录创建一个Shell脚本来并行执行作业。 我想知道下一次处理此类工作的更好方法。 问题答案: 正如Mark Setchell所说:GNU并行。 如果您坚持