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?

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.