Sql-Server

我正在使用 SQL Server 代理來安排非數據庫任務 - 這是一個壞主意嗎?

  • June 25, 2019

由於我是一名 DBA(在許多情況下是事實上的系統管理員),SQL Server 幾乎安裝在我必須經常使用的每台伺服器上。我最近意識到,我幾乎在所有情況下都使用 SQL 代理作為作業調度程序,而不是原生的 Windows 任務調度程序。

從我的角度來看,SQL 代理比原生 Windows 任務計劃程序有很多優勢:

  • 遠端(從我的工作站)啟動/停止/監控任務
  • 共享計劃(而不是每個任務單獨執行)
  • 多步驟和控制流
  • 不同類型的任務
  • 失敗/完成警報
  • 可以配置為不同的使用者
  • (適度)描述性錯誤消息,而不僅僅是錯誤程式碼

但是,我無法擺脫這種不好的做法的感覺——SQL 代理應該只保留用於與數據庫相關的任務,並且我應該讓作業系統級別的任務在 Windows 任務計劃程序中執行,儘管我不喜歡它的可用性。

以這種方式依賴 SQL Agent 可以嗎?如果沒有,我是否應該考慮使用第三方 Windows 任務計劃程序來獲得我正在尋找的某些功能?

就我個人而言,我認為最大的警告將是保持工作清單井井有條的困難。據我所知,您無法創建文件夾來組織工作,因此大量工作會很麻煩。不過,我不能 100% 確定這一點,因為我的伺服器都沒有超過十幾個工作。Server 2008 及更高版本的任務計劃程序允許更輕鬆的組織、IMO,並且通常比以前的版本具有更好的功能。我確信第三方應用程序做得更好。如果我不得不使用 Server 2003 的任務調度程序或at.exe.

我能想到的第二個警告可能會在 SQL 伺服器上施加過多的負載。Agent 是一個小程序,但執行一個冗長或複雜的任務很容易消耗大量資源。SQL 引擎無法使用這些資源。由於 SQL 引擎被程式為佔用大約 80% 的可用系統記憶體,因此這可能是一個問題。

第三,備份可能是個問題。您不僅需要備份文件系統,還需要備份 msdb 數據庫以允許恢復作業(或使用某些東西將任務腳本寫入文本文件)。這為災難恢復增加了一層複雜性。

最後,您不希望僅僅為了執行 SQL Server 代理而為 SQL Server 許可證付費。如果數據庫停用,您將需要製定遷移 SQL Server 代理的計劃。

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