Come pianificare i lavori nel server SQL 2008 per meno di 10 secondi?


8

Voglio eseguire un lavoro ogni 3 secondi, tuttavia in SQL Server 2008 non possiamo definire un intervallo inferiore a 10 secondi.

Il lavoro viene utilizzato per inserire / aggiornare le informazioni sui visitatori e le informazioni sulla segmentazione in un database monitorato dalla ricerca di Google.

Ci sono fino a circa 100 righe inserite in 2 o 3 secondi. Quel lavoro inserisce e aggiorna la tabella in un database. Esiste un modo per programmarlo utilizzando la configurazione di pianificazione lavoro sp?

Risposte:


12

Creare un lavoro che dovrebbe iniziare ogni minuto. Chiedi al lavoro di fare qualcosa del tipo:

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

Non genererà lo stesso lavoro a ciclo infinito ogni minuto fino alla fine dei tempi?
Brandon,

No, un determinato lavoro può sempre avere un'unica istanza in esecuzione in un dato momento.
Max Vernon,

Se il lavoro ha esito negativo o viene interrotto, verrà riavviato tra circa 1 minuto.
Max Vernon,

1
Ah ok. Mi chiedevo se fosse così, ma non avevo la possibilità di provarlo. Continua, niente da vedere qui.
Brandon,

1
vale la pena notare che è necessario dire al loop di uscire se si desidera che il processo di lavoro scriva l'esito positivo o negativo nel registro.
Peter Vandivier,

4

Non penso che questa risposta sia corretta. Il motivo è il seguente: diciamo dbo.SomeProcedure verrà eseguito per 2 secondi e inizierà alle 10:00:00, quindi al termine di questo proc, attenderà altri 3 secondi prima di riavviare di nuovo, ovvero alle 10:00:02 , termina e non inizierà fino alle 10:00:05. Mentre se davvero potessimo programmare l'esecuzione di un lavoro ogni 3 secondi, dbo.SomeProcedure verrà effettivamente eseguito alle 10:00:00 e alle 10:00:03, e così via. Quello più preciso dovrebbe essere il seguente:

    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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.