在SQL Server中执行长时间运行的作业

问题描述:

我正在使用SQL Server 2008.使用代理,我创建了一个作业并安排它每分钟执行一次。 作业执行一个存储过程,该过程将数据从表XXX移动到临时表,然后最终到表YYY。在SQL Server中执行长时间运行的作业

作业的执行可能需要一分多钟 - 因为数据相当大。

  1. 即使第一个实例仍在运行,该作业的第二个实例是否会启动?

  2. 如果是这样,我是否应该将临时表(status = 1)中的记录标记为表明这些记录正在被前一个作业实例处理?

  3. 有没有办法让我检查一个工作实例当前正在运行,以便我不启动第二个工作实例?

  4. 有没有另一种解决方案,我不知道? (吞吐量很重要)

+1

是的,你可以只有一个实例,MS建议使用MSX/TSX来提供此功能 - http://connect.microsoft.com/SQLServer/feedback/details/633140/sql-server-agent-allow-多个单一作业实例您可以考虑在每个作业中都有该作业的副本,然后将此ID放入状态列以标记数据继续执行 – Silx 2011-03-30 09:43:32

一次只能运行一个特定作业的一个实例。

因此,没有必要采取任何特殊的预防措施,防止第一次停止前开始执行相同的作业。

+1

downvote的原因?这是绝对正确的。同一个作业不能与其自身同时执行。所以回答问题“。在这种情况下,新的执行工作开始了吗?”没有”。提出问题2是没有意义的。 – 2014-01-13 15:59:23

+0

+1我以为这是每个SCHEDULE一个实例,而不是JOB本身。但是,我刚刚测试过,并且每个作业都有一个实例,即使有重叠的计划。因此,我也同意回答问题2 - 4是没有意义的,因为它们都是以#1为“是”为条件,事实并非如此。 – 2014-03-07 20:28:41

检查这个帖子
如何防止SQL Server作业同时运行

How to Prevent Sql Server Jobs to Run simultaneously

这里也
运行作业
http://technet.microsoft.com/en-us/library/aa213815(v=sql.80).aspx

如果作业已按启动它的日程安排,你不能在同一台服务器上启动该作业的另一个实例,直到sche失业的工作已经完成。在多服务器环境中,每个目标服务器可以同时运行同一作业的一个实例。