Как запланировать работу в Sql server 2008 менее чем за 10 секунд?


8

Я хочу запускать задание каждые 3 секунды, однако в SQL Server 2008 мы не можем определить интервал менее 10 секунд.

Задание используется для вставки / обновления информации о посетителях и сегментации в базу данных, которая отслеживается поиском Google.

В течение 2 или 3 секунд вставляется до 100 строк. Это задание вставляет и обновляет таблицу в базе данных. Есть ли способ запланировать это с помощью конфигурации планирования заданий sp?

Ответы:


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

Разве это не порождает одну и ту же бесконечно цикличную работу каждую минуту до конца времени?
Брэндон

Нет, в любое задание может быть запущен только один экземпляр в любой момент времени.
Макс Вернон

Если задание не выполнено или остановлено, оно будет перезапущено примерно через 1 минуту.
Макс Вернон

1
Ах хорошо. Мне было интересно, если это так, но у меня не было возможности попробовать это. Продолжайте, здесь ничего не видно.
Брэндон

1
Стоит отметить, что вы должны указать циклу завершиться, если вы хотите, чтобы шаг задания записывал в журнал успех или неудачу.
Питер Вандивье

4

Я не думаю, что этот ответ правильный. Причина в следующем: скажем, dbo.SomeProcedure будет работать в течение 2 секунд и начнется в 10:00:00, затем, после завершения этого процесса, он будет ждать еще 3 секунды, прежде чем снова перезапускать, то есть в 10:00:02. , он заканчивается, и он не начнется до 10:00:05 утра. Хотя, если бы мы действительно могли запланировать выполнение задания каждые 3 секунды, dbo.SomeProcedure действительно запустится в 10:00:00 и 10:00:03, и так далее, и так далее. Более точным должно быть следующее:

    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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.