0

我有一个工作将为 SQL 实例中的所有数据库创建一个工作。我不希望作业按顺序运行。我需要同时运行多个数据库,但我还想确保我没有同时运行太多可能会影响服务器性能的数据库。

有没有办法指定可以同时运行的并发作业的数量,或者以在活动作业的数量少于我指定的数量之前不会启动新作业的方式管理这些作业?

4

1 回答 1

0

您可以创建一个接受 SQL 命令和要并行运行的作业数 [n] 的存储过程,并让它创建并启动 n 个作业,然后进入循环以轮询 msdb 表以查看是否所述作业仍在运行,并且每次它注意到活动(或离开)的作业少于 n 时,它可以开始一个新作业,直到处理完整个数据库集。然后它应该等待最后一个完成,以便调用进程知道所有内容都已处理。

提示: - 使用 sp_add_job 返回的 @job_id 来检查作业是否仍在运行 - 在系统表上使用 WITH (NOLOCK) 以避免不必要的锁定,在查找时是否使用“脏读”并不重要对于作业的状态 - 使用 WAITFOR DELAY 仅每 5 秒左右检查一次表格,否则您的循环将消耗等待太多资源!

于 2013-09-12T19:05:15.540 回答