¿Cómo programar trabajos en SQL Server 2008 por menos de 10 segundos?


8

Quiero ejecutar un trabajo cada 3 segundos, sin embargo, en SQL Server 2008 no podemos definir un intervalo de menos de 10 segundos.

El trabajo se utiliza para insertar / actualizar la información del visitante y la información de segmentación en una base de datos que es rastreada por la búsqueda de Google.

Hay hasta aproximadamente 100 filas insertadas en 2 o 3 segundos. Ese trabajo inserta y actualiza la tabla en una base de datos. ¿Hay alguna forma de programarlo usando la configuración de programación de trabajos sp?

Respuestas:


12

Cree un trabajo que esté programado para comenzar cada minuto. Haz que el trabajo haga 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

¿Esto no generará el mismo trabajo de bucle infinito cada minuto hasta el final de los tiempos?
Brandon

No, cualquier trabajo dado solo puede tener una única instancia ejecutándose en un momento dado.
Max Vernon

Si el trabajo falla o se detiene, se reiniciará en aproximadamente 1 minuto.
Max Vernon

1
Ah bien. Me preguntaba si ese era el caso, pero no tuve la oportunidad de probarlo. Continuar, nada que ver aquí.
Brandon

1
Vale la pena señalar que necesita decirle al ciclo que se cierre si desea que el paso de trabajo escriba éxito o falla en el registro.
Peter Vandivier

4

No creo que esta respuesta sea correcta. La razón es la siguiente: digamos dbo. SomeProcedure se ejecutará durante 2 segundos y comenzará a las 10:00:00 a.m., luego, una vez finalizado este proceso, esperará otros 3 segundos antes de reiniciar nuevamente, es decir, a las 10:00:02 a.m. , finaliza y no comenzará hasta las 10:00:05 am. Si bien si realmente pudiéramos programar un trabajo para que se ejecute cada 3 segundos, dbo.SomeProcedure se ejecutará a las 10:00:00 am y 10:00:03 am, y así sucesivamente. El más preciso debería ser el siguiente:

    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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.