Bagaimana cara menjadwalkan pekerjaan di Sql server 2008 kurang dari 10 detik?

8

Saya ingin menjalankan pekerjaan setiap 3 detik, namun dalam SQL Server 2008 kami tidak dapat menetapkan interval kurang dari 10 detik.

Pekerjaan ini digunakan untuk memasukkan / memperbarui informasi pengunjung, dan informasi segmentasi ke dalam database yang dilacak oleh pencarian google.

Ada sekitar 100 baris yang dimasukkan dalam 2 atau 3 detik. Pekerjaan itu menyisipkan dan memperbarui tabel dalam database. Apakah ada cara untuk menjadwalkannya menggunakan konfigurasi penjadwalan pekerjaan?

Musakkhir Sayyed
sumber

Jawaban:

12

Buat pekerjaan yang dijadwalkan dimulai setiap menit. Mintalah pekerjaan melakukan sesuatu seperti:

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
Max Vernon
sumber
Tidakkah ini hanya akan menelurkan pekerjaan berulang yang sama setiap menit sampai akhir waktu?
Brandon
Tidak, pekerjaan apa pun hanya dapat memiliki satu instance berjalan pada waktu tertentu.
Max Vernon
Jika pekerjaan gagal atau dihentikan, pekerjaan akan dimulai lagi dalam waktu sekitar 1 menit.
Max Vernon
1
Ah baiklah. Saya bertanya-tanya apakah itu yang terjadi tetapi saya tidak memiliki kesempatan untuk mencobanya. Lanjutkan, tidak ada yang bisa dilihat di sini.
Brandon
1
Perlu dicatat bahwa Anda perlu memberitahu loop untuk berhenti jika Anda ingin jobstep menulis keberhasilan atau kegagalan ke log.
Peter Vandivier
4

Saya kira jawaban ini tidak benar. Alasannya adalah sebagai berikut: katakanlah dbo.SomeProcedure akan berjalan selama 2 detik dan mulai pukul 10:00:00 pagi, kemudian setelah proc ini selesai, ia akan menunggu selama 3 detik sebelum memulai kembali lagi, yaitu pada 10:00:02 pagi , selesai, dan tidak akan mulai sampai 10:00:05. Sementara jika kita benar-benar bisa menjadwalkan pekerjaan untuk dijalankan setiap 3 detik, dbo.SomeProcedure memang akan berjalan pada pukul 10:00 pagi dan 10:00:03 pagi, dan seterusnya. Yang lebih akurat adalah sebagai berikut:

    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
jyao
sumber