Làm cách nào để lên lịch công việc trong máy chủ Sql 2008 trong thời gian dưới 10 giây?


8

Tôi muốn chạy một công việc cứ sau 3 giây, tuy nhiên trong SQL Server 2008, chúng tôi không thể xác định khoảng thời gian dưới 10 giây.

Công việc được sử dụng để chèn / cập nhật thông tin khách truy cập và thông tin phân đoạn vào cơ sở dữ liệu được theo dõi bởi tìm kiếm google.

Có tối đa khoảng 100 hàng được chèn trong 2 hoặc 3 giây. Công việc đó chèn và cập nhật bảng trong cơ sở dữ liệu. Có cách nào để lên lịch sử dụng cấu hình lập lịch công việc sp không?

Câu trả lời:


12

Tạo một công việc được lên kế hoạch để bắt đầu mỗi phút. Có công việc làm một cái gì đó như:

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

Điều này sẽ không sinh ra cùng một công việc lặp đi lặp lại vô tận mỗi phút cho đến khi kết thúc thời gian?
Brandon

Không, bất kỳ công việc nhất định chỉ có thể có một phiên bản duy nhất chạy tại bất kỳ thời điểm nào.
Max Vernon

Nếu công việc thất bại hoặc bị dừng lại, nó sẽ khởi động lại sau khoảng 1 phút.
Max Vernon

1
À được rồi. Tôi đã tự hỏi nếu đó là trường hợp nhưng tôi đã không có cơ hội để thử nó. Tiếp tục, không có gì để xem ở đây.
Brandon

1
đáng lưu ý rằng bạn cần nói với vòng lặp để thoát nếu bạn muốn bước công việc viết thành công hoặc thất bại vào nhật ký.
Peter Vandivier

4

Tôi không nghĩ câu trả lời này là đúng. Lý do là như sau: giả sử dbo.SomeProcedure sẽ chạy trong 2 giây và nó bắt đầu lúc 10:00:00, sau khi Proc này kết thúc, nó sẽ đợi thêm 3 giây nữa trước khi khởi động lại, tức là lúc 10:00:02 , nó kết thúc và nó sẽ không bắt đầu cho đến 10:00:05. Mặc dù nếu chúng ta thực sự có thể lên lịch cho một công việc để chạy cứ sau 3 giây, thì dbo.SomeProcedure thực sự sẽ chạy vào lúc 10:00:00 và 10:00:03, và cứ thế tiếp tục. Chính xác hơn nên là như sau:

    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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.