簡體   English   中英

抵消實例之間的SQL Server代理作業計划的開始時間

[英]Offsetting the start time of SQL Server Agent job schedules between instances

我設置了一個代理作業,以從2:00 AM到11:59 PM每兩個小時運行一次日志備份(留有一個窗口來運行完整或差異備份)。 我的50個左右實例中的每一個都設置了類似的工作。 隨着時間的推移,我可能會添加數百個實例(我們為某些客戶托管SQL Server)。 它們都備份到相同的SAN磁盤卷。 這會導致延遲問題,並否則會影響性能。

我想將每個實例的作業運行時間偏移5分鍾,以便實例1將在2:00、4:00等運行,實例2將在2:05、4:05運行等等,實例3會在2:10、4:10等運行它,依此類推。 如果我在每個實例上偏移了作業的開始時間(實例2:00,實例2:05,實例3:2:10等),我是否可以合理地期望得到期望的結果:不能讓所有實例同時運行作業?

如果這與我們剛剛在twitter上進行的對話相同:當您告訴SQL Server代理每n分鍾或每n小時運行一次時,下一次運行將基於開始時間,而不是完成時間。 因此,如果您將實例1上的作業設置為在2:00運行並每2小時運行一次,則第二次運行將在4:00運行,無論第一次運行是花費1分鍾,12分鍾,45分鍾還是其他時間。

有一些警告:

  • 由於內部代理同步,可能會有一些延遲,但是我從來沒有看到超過幾秒鍾的時間
  • 如果在2:00第一次運行時間超過 2小時(但少於4小時),下一次作業運行將在6:00(4:00運行將被忽略,它不能在4運行: 10或4:20以“趕上”)

還有一個建議是添加一個WAITFOR來抵消開始時間(我們應該丟棄隨機的WAITFOR,因為那可能不是您想要的-random <> unique)。 如果要在每個實例上硬編碼一個不同的延遲(1分鍾,2分鍾等),則通過計划來執行此延遲比將步驟添加到所有作業中要簡單得多。 恕我直言。

也許您可以設置一個集中式數據庫來管理“計划”,並在作業運行時讓作業添加/更新一行。 這樣,每個后續服務器都可以啟動可以啟動的“輪詢”作業。 這樣一來,作業中的任何延遲都會導致其他作業等待,因此,在其中一台服務器被拋出時,您的時間安排不會出現差異。

有點偏執,我會添加一個包羅萬象的場景,該場景表示無論如何都要等待“ x”分鍾后才能進行處理,這樣延遲就不會造成足夠多的延遲,以至於作業無法運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM