在上表輸入你的結果。 如果你不仔細,SQLServer作業有可能影響性能 事實上每個SQLServer都運行一個或更多日常的作業。更可能運行很多每周一次的作業。不幸的是,大多數DBA創建了作業,然後就忘掉了它們,當然除非作業出了問題。但如果作業沒出現問題,一天一天的運行下去的話,大多數作業都會被忘掉。就像任何應用程序可能影響SQLServer性能一樣,作業也有可能。那些有設計得不好的代碼的作業,或者在糟糕的時間運行的作業,能引起SQLServer重大的損傷。因此,將SQLServer作業作為性能監控的一部分指很重要的。 本節將著眼於如何分辨,糾正潛在的與作業相關的性能問題。 運行了任何不必要的作業嗎? 創建一個完成特定任務的作業是很容易的,然而當任務不再需要時忘掉移除它們也是經常發生的事。例如,你也許需要創建一個作業去從幾個表裡每晚移動數據到另一個表裡,用來產生報表。但如果報表不再有用,也就不再有任何需要運行的作業,所以應該移除它們以減少開銷。問題是在作業和報表之間沒有直接連接,所以如果報表不再有用,很容易忘記移除作業。作為監控的一部分,檢查運行在服務器上的每一個作業,看看作業是否真的需要。如果不需要就移除它。 沿著這個思路,看看有重復的作業沒有。例如,我曾經看到DBA新手使用維護向導在SQLServer裡創建了作業,而沒有真正意識到它們做了什麼。然後他們又手工添加了一些與維護向導創建的一個或更多作業相同的作業。同樣的事情做了兩次大量的浪費了SQLServer的資源。 作業調度是在服務器不忙的時候嗎? 當你檢查SQLServer裡的每一個作業時,看看它們的運行時間。要是作業不必要運行在特定的時間,盡量在SQLServer不忙的時候調度,如晚上或周末,取決於你的環境。如果你不能確認SQLServer什麼時候是空閒的,用性能監視器做一個超過一周的監控日志。這將提供給足夠的數據以分辨出能運行非時間敏感的作業的空閒時間。 同一台服務器上的SQLServer作業有交迭嗎? 這個問題比大多數DBA意識到的要大得多,特別是當SQLServer有很多很多的作業時。當SQLServer上有很多活動時,如果作業能盡可能的隨時間分布則是理想的,不要所有的作業都在同一刻運行。例如,如果你的SQLServer有10個數據庫,你要為每個數據庫創建備份的作業,更好的方法是一次運行一個,而不是在同一時間運行所有的作業。雖然你能通過企業管理器查看作業運行的時長,但沒有一個容易的方法來一個接一個(給每一個作業足夠的時間去完成)的手工調度作業,以便它們不產生交迭。這也能做到,但對於有大量作業的服務器來說,你也許需要一個表格來列出所有的作業。作為一個選擇你可以考慮使用第三方工具如SQL Sentry(www.SQLSentry.Net),它允許你可視化地管理和查看你所有的作業,以確保這些作業沒有交迭。所以當你進行作業監控的時候,檢查看看作業交迭情況,假定這是可能的。如果它們的確交迭了,盡量重新調度它們以禁止交迭,盡可能分散負載到大量空閒的時間。 任何非SQLServer的作業有交迭嗎? 除了SQLServer作業外,你的服務器上也許有一些非SQLServer的作業。有些例子包括碎片整理或磁帶備份作業而不是使用SQLServer調度。既然這些不使用SQLServer調度,它們也容易被忘記,你也許同時終止了一些作業的運行,就像終止SQLServer作業的運行一樣。和SQLServer作業一樣,如果你能在不同時間調度這些作業而不是在SQLServer作業運行的時候則是理想的。如果你需要這樣做,在上面討論的表格裡加入這些作業。 作業運行的TSQL是最優化的嗎? 就像應用程序、腳本裡的代碼一樣,運行在作業裡的TSQL也是需要優化的一部分。TSQL代碼的優化將在其他地方做介紹,任何有關的索引也應該被添加以便幫助作業代碼更有效率的運行。所以對於每一個有TSQL代碼的作業來說,你應該通過查詢分析器運行它來查看執行計劃,查找潛在的問題,也可以通過索引向導,查找潛在的索引以提升性能。 檢查作業運行了多長時間嗎? 我已經提過你能使用企業管理器來查看任何作業運行的時長。但我沒有提及的是最好隨時檢查看看這個時長是否有大量的變化。例如,一個特定的作業正常情況下運行2分鐘,但你發現一周有一次,在星期天,同樣的作業花費了15分鐘。作業時長發生了重大的改變是一個好的跡象表明作業和其他在SQLServer上運行的進程有沖突。如果你發現有這類問題,你需要更仔細的調查並分辨出出了什麼問題,然後糾正它。 目前的作業有替代方法嗎? 僅僅因為有作業要運行並不意味著它是手邊完成任務的最好方法。評估每一個作業,然後決定是否有更好的方法來完成同樣的工作。例如,或許寫TSQL代碼每晚執行導入比使用目前的DTS包更有效率。或者也許你正運行的作業,使用另外的調度程序去脫離SQLServer運行能更好。但記住關鍵的是,你目前的作業常常不是唯一的解決方法,有更好的可用的能減少服務器開銷的解決方法,如果你花時間考慮一下的話。