Sql-Server

擁有一個連續執行的代理作業的實例還是在一天中多次啟動該作業更好?

  • February 29, 2020

我有一個 SQL 查詢,我需要每天執行大約 12 個小時。這是一個非常簡單的查詢,將一些數據記錄到一個獨立的表中。現在我一直讓它在我的本地 SSMS 客戶端WHILE循環中執行,我習慣WAITFOR DELAY '00:00:01'在每次迭代之間暫停 1 秒。

如果我想將其移動到代理作業中,最好安排作業在這 12 小時內每 1 秒執行一次,還是保持查詢原樣並在早上觸發一次作業,以便查詢管理如何它經常執行。(要記住的一件事是,查詢通常足夠快,以至於它的執行時間是亞秒級的,但很少需要幾秒鐘才能完成執行。)

我想根本問題是,有一個連續執行 12 小時的工作,還是一個執行大約 43,000 次(每秒一次,持續 12 小時)的工作更好?

每次作業啟動時都會有一定的成本——在 msdb 上讀取和寫入以跟踪狀態和調度計算、創建會話等。所以從效率的角度來看,最好循環執行它。這也將使它更接近每秒執行,因為當作業開始時,作業需要一些時間才能真正到達執行程式碼的點。因此,如果有任何事情導致作業實際到達執行程式碼點時隨機延遲 0.25 秒,那麼您可能在程式碼執行之間存在顯著差距。我認為(如果我錯了請有人糾正我)它必須經歷整個登錄過程,因此由於網路問題可能會導致身份驗證過程延遲。

在循環中執行它的缺點是您必須處理程式碼中的任何錯誤。如果作業每秒執行一次,您可以在作業上配置失敗通知,如果有問題,您會收到一封電子郵件。如果它在循環中執行,您將需要在程式碼中處理錯誤和通知,並監視作業以確保它正在執行。

引用自:https://dba.stackexchange.com/questions/260834