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?

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.