如何在Sql Server 2008中调度作业少于10秒?


8

我想每3秒运行一次作业,但是在SQL Server 2008中,我们不能将间隔定义为少于10秒。

该作业用于将访问者信息以及细分信息插入/更新到Google搜索所跟踪的数据库中。

2到3秒钟内最多插入约100行。该作业将插入并更新数据库中的表。有什么方法可以使用sp作业计划配置进行计划吗?

Answers:


12

创建一个计划每分钟开始的作业。让工作执行以下操作:

WHILE 1=1
BEGIN
    EXEC dbo.SomeProcedure; /*  this would be the 
        name of a stored procedure that does the 
        actual work */
    WAITFOR DELAY '00:00:03.000';
END

难道这只是每分钟都会生成相同的无限循环工作,直到时间结束吗?
布兰登

不,任何给定的作业在任何给定时间只能运行一个实例。
Max Vernon

如果作业失败或停止,它将在大约1分钟后重新启动。
Max Vernon

1
啊好吧。我想知道是否是这种情况,但是我没有机会尝试。继续,没什么可看的。
布兰登

1
值得注意的是,如果您希望作业步骤将成功或失败写入日志,则需要告诉循环退出。
彼得·范迪维尔

4

我认为这个答案是不正确的。原因如下:假设dbo.SomeProcedure将运行2秒钟,并在10:00:00 am开始,然后在此proc完成后,它将等待另外3秒钟,然后再次重新启动,即10:00:02 am ,它完成了,直到10:00:05 am才开始。如果我们真的可以安排一个作业每3秒运行一次,则dbo.SomeProcedure确实会在10:00:00 am和10:00:03 am运行,依此类推。更准确的一种应该是:

    WHILE 1=1
    BEGIN
      EXEC dbo.SomeProcedure; /*  this would be the 
      name of a stored procedure that does the actual work */

      WHILE datediff(second, @dt, getdate())%3 <> 0
        WAITFOR DELAY '00:00:00.100'; -- can be made it to '00:00:00.001'
   END
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.