如要讓數據庫進行自動管理則管理員需要預先定義一些可預測的管理任務以及這些任務發送的條件當滿足這些指定的條件則數據庫會自動運行管理員指定的操作使用自動管理來處理日常事務則讓管理員可以抽出時間去關注其他的事情如數據庫優化等等更加具有價值的作業
計劃就是自動化管理組件的一個成員計劃指定了作業運行的時間多個作業可以根據一個計劃運行;多個計劃也可以應用到一個作業但是這個時間跟我們普通上的幾點幾分又有差異這個時間不僅指特定的日期或者時間而且還可以表示特定的時間如當SQL Server代理啟動的時候或者服務器的CPU使用率處於定義的空閒狀態水平時也就是說這裡指的時間計劃也可以實現一定的條件狀態控制簡而言之計劃作業就是定義使得作業在沒有哦能夠互交互情況下開始運行的條件包括具體的日期或者特定的在狀況通過為作業創建新計劃或者將現有的計劃添加到作業可以將作業計劃設置為自動運行不過在設置自動執行計劃的時候需要注意一個問題即一次只能夠運行一個作業實例如果在作業按計劃運行時嘗試手工運行該作業則SQL Server代理將拒絕這個請求另外即使計劃未啟用作業仍可以為響應警報而運行或者由用戶手動運行如果作業計劃未啟用則任何使用該計劃的作業都不會啟用該計劃
一 計劃觸發的時間與事件
上面筆者說過計劃可以基於特定的時間與事件而觸發那麼這些具體的時間與事件是什麼呢?筆者平時用到的最多的就是如下幾種情況
一是特定的日期和時間運行一次這個計劃時間在數據庫備份的時候特別有用大家都知道數據庫備份會占用比較多的系統資源如果在數據庫服務器使用高峰期(如白天上班時間)進行 備份的話那麼會對用戶的訪問造成比較大的影響為此筆者就把數據庫備份的時間放在晚上點之後這個時段相對來說很少有用戶會訪問數據庫此時管理員就可以利用計劃功能讓其在每天的點之後進行數據庫備份這就是基於特定的日期和時間計劃的典型應用
二是安重復執行的計劃運行這個跟上面講的特定日期和時間運行一次比較類似只是上面的情況只運行一次而這個按重復執行計劃運行則是指會重復運行多次如每天晚上點都進行數據庫備份等等在實際工作中特定日期和時間運新一次往往只是針對一些特殊的情況如今天剛對數據庫結構進行了比較大的更改如添加了幾張表或者視圖此時就需要對數據庫進行一次完全備份如故不急於進行備份的話則就可以建立一個在特定的日期和時間運行的數據庫完全備份計劃讓其在午後進行數據庫備份但是對於常規的數據庫備份則需要采取這個按重復執行計劃運行
三是當計算機的CPU使用率處於定義的空閒狀態水平時也就是說數據庫服務器當前的CPU使用率比較低可以執行其他一些比較復雜的管理任務如有些數據庫系統在設計的時候有一個庫存補貨點作業當庫存低於安全庫存的時候系統就會自動生成一張物料請購單來滿足安全庫存的需要由於這張表設計到的物料比較多會占用比較多的系統資源故可以設置每天運行一次而運行的時間就定在CPU使用率比較低的時候如此就可以減少對其他作業造成的負面影響
二 CPU空閒計劃的典型應用
其他的幾種計劃類型不少數據庫管理員已經非常了解筆者今天想談的是CPU空閒計劃的應用這個計劃如果應用的好的話可以大大提高數據庫的性能如果要想利用好這個功能 則需要回答如下兩個問題
一是什麼作業需要使用CPU空閒計劃?這個問題比較難回答從理論上來說任何作業都可以采用CPU空閒計劃在自動執行只是他們帶來的效果不同有的作業即使采用了CPU空閒計劃也不能夠帶來很大的性能改善簡單的來說一些占用CPU資源比較大的作業采用CPU空間計劃規則來自動執行可以取得比較好的效果如數據庫有時候需要重新生成索引這項工作會占用比較多的CPU資源而且隨著數據量的增多這個CPU使用率也會越來越高為此如果可以把重新生成索引的作業放在CPU空閒時間來進行的話那麼對於提高數據庫的性能效果是比較明顯的總之當某個作業比較復雜可能需要占用到比較多的CPU或者內存資源的話則可以采用這個CPU空閒計劃
二是什麼時候CPU是空閒的?空閒是一個相對的標准有時會CPU使用率%以下可以定義為空閒;而有時候CPU使用率只有不到%就是空閒這要根據服務器的配置已經所部屬的應用來考慮所以管理員在采用CPU空閒計劃之前先要對服務器進行觀測一定時間采用性能監視器等工具來監視服務器流量並收集相關的統計信息然後利用收集到的信息來分析CPU空閒的標准並在數據庫中進行相關的設置將 CPU 空閒條件定義為一個百分比在該百分比以下CPU 使用率必須持續指定的時間然後設置持續時間長度如果 CPU 使用率在指定時間內低於指定的百分比則 SQL Server 代理將啟動具有 CPU 空閒時間計劃的所有作業如管理員認為CPU使用率在%以下可以運行重建索引的作業即當這個重建索引作業運行時CPU使用率在可以忍受的范圍之內此時就可以把CPU的空閒率標准設置為%而且這個低於%的CPU使用率必須要持續一段時間如這個低於%的CPU持續時間很短那麼系統仍然不會認為這個CPU是出於空閒狀態這個持續時間最好能夠參考具體作業的執行時間若重建索引作業所需要的時間等等
三 如何停止計劃的自動執行?
有些時間我們可能並不需要自動執行計劃如在數據庫設計的時候管理員並不需要這些自動執行的計劃為此需要把他們暫時停止此時有哪些方法可以做到這一點呢?
一是可以把計劃與作業剝離計劃與作業是兩個獨立的內容如數據庫完全備份與計劃時間就是相互獨立的如果設置好了數據庫完全備份的策略但是沒有把計劃時間與這個作業進行關聯的話則數據庫完全備份不會自動執行此時如果需要執行這個作業的話則就要進行手工啟動故當管理員暫時不想要某個計劃的時候可以把計劃作業剝離即在作業中去掉這個時間計劃即可
二是禁用作業或者計劃當管理員不需要某個作業自動運行的時候可以把這個計劃或者作業進用掉禁用計劃或者禁用作業都會讓某個作業停止自動運行但是他們仍然有微小的差異如禁止計劃的話只是這個這個作業停止自動運行但是管理員仍然可以手工執行它可是禁用作業的話則系統不僅不會自動運行而且管理員還不能夠手工執行它這就好像給這個作業設置了終身監禁為此為了避免這種情況的發生筆者是建議最好采用禁用計劃而不是禁用作業如此的話在必要的時候管理員還可以手工啟動該作業來應急另外如果這個計劃將來仍然需要采用的話筆者不建議把計劃與作業剝離的方式來停止計劃的自動執行;而是建議這種禁用計劃的方式來完成不然的話下次需要的時候仍然需要把計劃與作業關聯反而會增加工作量
另外如果這個測試計劃以後再也不用時有兩種處理方法一是把計劃直接刪除這個是最徹底的方法但是不會留下任何歷史紀錄二是先把計劃跟作業玻璃然後再禁用這個計劃這雖然比較麻煩一點而且會在數據庫中留下垃圾數據但是卻可以保留歷史紀錄這可能會對數據庫的後續維護帶來一定的幫助到底不用的計劃是刪除還是禁用沒有一個統一的標准還是需要根據數據庫管理員的操作習慣來判斷
無論采取哪種方式管理員都需要注意兩點內容一是必須顯示的重新啟動已禁用的計劃如果管理員只是更改了已禁用的計劃策略並不會重新啟動這個計劃而需要管理員手工的啟動二是即使計劃未啟用作業仍可以為響應警報而運行或者由用戶手動運行如果作業計劃未啟用則任何使用該計劃的作業都不會啟用該計劃
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22479.html