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.