¿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.