Como agendar trabalhos no Sql server 2008 por menos de 10 segundos?

8

Quero executar um trabalho a cada 3 segundos, no entanto, no SQL Server 2008, não podemos definir um intervalo inferior a 10 segundos.

O trabalho é usado para inserir / atualizar informações do visitante e informações de segmentação em um banco de dados que é rastreado pela pesquisa do Google.

Existem até 100 linhas inseridas em 2 ou 3 segundos. Esse trabalho insere e atualiza a tabela em um banco de dados. Existe alguma maneira de agendá-lo usando a configuração de agendamento de tarefas sp?

Musakkhir Sayyed
fonte

Respostas:

12

Crie um trabalho agendado para iniciar a cada minuto. Faça com que o trabalho faça algo como:

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
fonte
Isso não gera o mesmo trabalho de loop infinito a cada minuto até o fim dos tempos?
Brandon
Não, um determinado trabalho só pode ter uma única instância em execução a qualquer momento.
Max Vernon
Se o trabalho falhar ou for parado, ele será reiniciado em aproximadamente 1 minuto.
precisa
11
Ah ok. Fiquei me perguntando se era esse o caso, mas não tive chance de tentar. Continue, nada para ver aqui.
Brandon
11
é importante notar que você precisa informar o loop para sair, se desejar que a etapa da tarefa grave com êxito ou com falha no log.
Peter Vandivier
4

Eu não acho que esta resposta esteja correta. O motivo é o seguinte: digamos dbo.SomeProcedure será executado por 2 segundos e começará às 10:00:00. Depois que esse processo terminar, ele aguardará outros 3 segundos antes de reiniciar novamente, ou seja, às 10:00:02 , ele termina e não será iniciado até às 10h05. Embora se realmente possamos agendar um trabalho para ser executado a cada 3 segundos, o dbo.SomeProcedure será executado de fato às 10:00:00 e 10:00:03, e assim por diante. O mais preciso deve ser o seguinte:

    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
jyao
fonte