每個 SQL Server 實例通常運行數十個排程作業(備份、索引維護、ETL、報表產生等)。DBA 常「設定後就忘記」,但設計不良或排程不當的作業會嚴重拖垮資料庫效能。本文提供系統性的 8 項檢查清單,助您主動發現並解決作業相關效能隱憂。
現象:報表已停用,但產生報表的每夜 ETL 作業仍在跑;維護精靈建立的作業與手動建立的重疊。
行動:
原則:非即時性作業(備份、索引維護、資料匯入)應排在 CPU/IO 閒置時段(通常深夜或週末)。
工具:使用 效能監視器 (PerfMon) 記錄一週以上的 Processor\% Processor Time、PhysicalDisk\% Disk Time,識別固定低載時段。
風險:10 個資料庫同時備份會造成 IO 風暴、CPU 爭用、鎖升級。
策略:
常見衝突:磁帶備份、磁碟重組、防毒掃描、Windows Update 重啟。
對策:將 OS 層級作業納入同一排程總表,確保與 SQL 作業錯峰。
檢查清單:
預警指標:平常 2 分鐘的作業,突然跑 15 分鐘(通常在特定日期如週日)。
原因:鎖爭用、統計資料過期導致計畫劣化、同時段有其他大型作業、磁碟 IO 瓶頸。
做法:建立基準線,設定閾值告警(如:執行時間超過平均值 3 倍發送通知)。
| 傳統作業 | 潛在替代方案 | 優勢 |
|---|---|---|
| T-SQL 批次匯入 | SSIS 封裝 / BULK INSERT / bcp | 平行處理、錯誤處理、資料流轉換內建 |
| Agent 作業執行維護 | Ola Hallengren 維護腳本 | 社群標準、參數化、支援 Availability Groups |
| 自訂備份作業 | 維護計畫 / 第三方備份工具 (Redgate, Veeam) | 壓縮、加密、雲端儲存、即時還原驗證 |
| 輪詢式資料同步 | Service Broker / Change Tracking / CDC | 事件驅動、低延遲、減少輪詢開銷 |
建議每季執行一次完整健檢,記錄下列指標:
SELECT
j.name AS JobName,
j.enabled,
h.run_date,
h.run_time,
h.run_duration,
h.run_status, -- 0=失敗 1=成功 2=重試 3=取消
j.date_created,
j.date_modified
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE h.step_id = 0 -- 僅看作業整體結果
ORDER BY h.run_date DESC, h.run_time DESC;
結合 PerfMon 數據與查詢存儲,即可建立「作業-資源-效能」三位一體的監控視野,讓 SQL Server Agent 真正成為穩定生產環境的守護者,而非隱形效能殺手。