我正在寻找一种可以限制同时运行的作业数量的设置(除了计划转移)。我的 SQL 代理(SQL Server 2017 Enterprise)中有 844 个作业。他们中的大多数需要几分钟才能完成,大约有 190 个工作需要半小时。所有这些都计划每小时运行一次。如果它们一起运行,我无法将总持续时间控制在 60 分钟以下。是否有任何设置可以将 744 个作业排队,直到 844 个作业中的一个完成并且 SQL 代理将启动在队列中等待的下一个作业?
这最好在 SQL 代理之外完成。老实说,在每小时运行 800 多个作业的情况下,您早就应该改用不同的方法了。
我对此的偏好是创建一个单一的主 SSIS 包,该包读取需要运行的作业列表,然后启动列表中的第一个 X,然后休眠直到正在运行的作业数量低于阈值,然后启动列表中的下一个 X。您可以根据自己的选择随机化列表或对其进行排序。我在我的环境中做了类似的事情,我需要确保某些类的包(客户端导入)一次完成一个。
较不动态的方法是将需要运行的作业列表分解为您想要同时运行的多个作业。每个步骤都有一个调用需要运行的实际作业的步骤列表。它需要较少的时间、睡眠和查询活动作业的摆弄,但动态性较低(例如,更改最大同时线程数将需要工作。
但无论如何,我会离开现在的工作,只是删除/禁用他们的日程安排。然后你想要的任何解决方案都可以调用 sp_start_job 过程。这让您仍然可以轻松地在周期之外运行任何您想要的作业,并且您会看到成功/失败的独立报告。