我有一份工作,将为SQL实例中的所有数据库创建一个作业。我不希望作业按顺序运行。我需要一次运行多个数据库,但我还想确保我没有太多的数据库同时运行,这可能会影响服务器的性能。
有没有办法指定可以同时运行的并发作业数,或者以新作业无法启动的方式管理作业,直到活动作业数少于我指定的数? / p>
答案 0 :(得分:0)
您可以创建一个存储过程,接受SQL命令和要并行运行的作业数[n],并让它创建&启动n个作业,然后进入循环以轮询msdb表以查看所述作业是否仍在运行,并且每次发现活动少于n个作业(或者左)时,它可以启动新作业,直到整个数据库集合为止。已被处理。然后它应该等待最后一个完成,以便调用进程知道所有内容都已处理。
提示: - 使用sp_add_job返回的@ job_id来检查作业是否仍在运行 - 在系统表上使用WITH(NOLOCK)以避免不必要的锁定,在查找作业状态时使用“脏读”并不重要 - 使用WAITFOR DELAY只检查表每5秒左右,否则你的循环会吃掉等待太多资源!