Wie plane ich Jobs in SQL Server 2008 für weniger als 10 Sekunden?


8

Ich möchte alle 3 Sekunden einen Job ausführen, in SQL Server 2008 können wir jedoch kein Intervall von weniger als 10 Sekunden definieren.

Der Job wird zum Einfügen / Aktualisieren von Besucherinformationen und Segmentierungsinformationen in eine Datenbank verwendet, die von der Google-Suche verfolgt wird.

In 2 oder 3 Sekunden werden bis zu 100 Zeilen eingefügt. Dieser Job fügt die Tabelle in eine Datenbank ein und aktualisiert sie. Gibt es eine Möglichkeit, dies mithilfe der SP-Job-Planungskonfiguration zu planen?

Antworten:


12

Erstellen Sie einen Job, der jede Minute gestartet werden soll. Lassen Sie den Job so etwas wie Folgendes tun:

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

Wird dies nicht einfach jede Minute bis zum Ende der Zeit den gleichen Endlosschleifen-Job erzeugen?
Brandon

Nein, für einen bestimmten Job kann immer nur eine einzelne Instanz ausgeführt werden.
Max Vernon

Wenn der Job fehlschlägt oder gestoppt wird, wird er in ca. 1 Minute neu gestartet.
Max Vernon

1
Ah okay. Ich habe mich gefragt, ob das der Fall ist, aber ich hatte keine Chance, es zu versuchen. Weiter so, hier gibt es nichts zu sehen.
Brandon

1
Beachten Sie, dass Sie der Schleife mitteilen müssen, dass sie beendet werden soll, wenn der Jobschritt erfolgreich oder fehlgeschlagen in das Protokoll geschrieben werden soll.
Peter Vandivier

4

Ich denke nicht, dass diese Antwort richtig ist. Der Grund ist folgender: Nehmen wir an, dbo.SomeProcedure wird 2 Sekunden lang ausgeführt und beginnt um 10:00:00 Uhr. Nach Abschluss dieses Vorgangs wartet es weitere 3 Sekunden, bevor es erneut gestartet wird, dh um 10:00:02 Uhr Es endet und beginnt erst um 10:00:05 Uhr. Wenn wir wirklich einen Job planen könnten, der alle 3 Sekunden ausgeführt wird, wird dbo.SomeProcedure tatsächlich um 10:00:00 Uhr und 10:00:03 Uhr ausgeführt und so weiter. Die genauere sollte die folgende sein:

    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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.