查詢 SQL Agent 排程執行問題時,發現一個狀況:使用 Log File Viewer 查詢作業記錄(Job History Log),大部分排程的執行歷程都是空的(如下圖),只有少數幾個排程有內容:
研究後學到一件事-SQL Agent Job History 有預設筆數限制,預設值為所有排程作業總共 1000 筆,每項排程作業最多 100 筆。在我們的排程作業中,有幾個排程每兩分鐘或五分鐘就執行一次,很快把 1000 筆配額用光光,因而產生作業記錄只剩下高頻率排程的記錄,超過一天的記錄全部被擠掉消失無蹤。
因此,當 SQL Agent 的排程數量多、步驟複雜或頻率較高,為避免出事無記錄可追,就應調整設定。查到一篇不錯的文章:Check your SQL Agent history settings before it’s too late!,其中有計算公式:
每項作業最大歷程記錄筆數 = 執行次數 * (最大步驟數 + 1)
歷程記錄資料量 = 記錄筆數 * 1.5KB
還有一種務實做法是把上限拉大或取消上限,實際跑一陣子再由 msdb.dbo.sysjobhistory 實測筆數大小,進而依保留期間決定上限及要準備空間,可以估算得更精確。
總之,使用 SQL Agent 排程記得事先規劃記錄空間,不要等遇到事故才發現行車記錄器記憶卡被蓋掉,可就欲哭無淚了。
【延伸閱讀】