Comment planifier des travaux dans Sql Server 2008 pour moins de 10 secondes?


8

Je veux exécuter un travail toutes les 3 secondes, mais dans SQL Server 2008, nous ne pouvons pas définir un intervalle inférieur à 10 secondes.

Le travail est utilisé pour insérer / mettre à jour les informations sur les visiteurs et les informations de segmentation dans une base de données qui est suivie par la recherche Google.

Il y a jusqu'à environ 100 lignes insérées en 2 ou 3 secondes. Ce travail insère et met à jour la table dans une base de données. Existe-t-il un moyen de le planifier à l'aide de la configuration de planification des travaux sp?

Réponses:


12

Créez un travail qui doit démarrer toutes les minutes. Demandez au travail de faire quelque chose comme:

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

Cela ne va-t-il pas simplement engendrer le même travail en boucle infinie chaque minute jusqu'à la fin des temps?
Brandon

Non, un travail donné ne peut avoir qu'une seule instance en cours d'exécution à un moment donné.
Max Vernon

Si le travail échoue ou est arrêté, il redémarrera dans environ 1 minute.
Max Vernon

1
Ah ok. Je me demandais si c'était le cas mais je n'ai pas eu l'occasion de l'essayer. Continuez, rien à voir ici.
Brandon

1
il convient de noter que vous devez indiquer à la boucle de se fermer si vous souhaitez que le jobstep enregistre le succès ou l'échec dans le journal.
Peter Vandivier

4

Je ne pense pas que cette réponse soit correcte. La raison est la suivante: disons que dbo.SomeProcedure fonctionnera pendant 2 secondes et il commencera à 10:00:00 am, puis une fois ce processus terminé, il attendra encore 3 secondes avant de redémarrer, c'est-à-dire à 10:00:02 am. , il se termine et il ne commencera pas avant 10 h 00 min 05 s. Alors que si nous pouvions vraiment planifier un travail pour qu'il s'exécute toutes les 3 secondes, dbo.SomeProcedure s'exécuterait en effet à 10 h 00 et 10 h 03, et ainsi de suite. La plus précise devrait être la suivante:

    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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.