为并发数据库运行 SQL 代理作业



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

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

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

技巧: - 使用 sp_add_job 返回的@job_id检查作业是否仍在运行 - 在系统表上使用 WITH (NOLOCK) 以避免不必要的锁定,在查找作业状态时是否使用"脏读"并不重要 - 使用WAITFOR DELAY只检查一次表,否则你的循环会吃掉等待太多资源!

最新更新