有效使用SQL Server的自動管理功能

iSQlServer發表於2009-03-31

如要讓資料庫進行自動管理,則管理員需要預先定義一些可預測的管理任務以及這些任務傳送的條件。當滿足這些指定的條件,則資料庫會自動執行管理員指定的操作。使用自動管理來處理日常事務,則讓管理員可以抽出時間去關注其他的事情,如資料庫優化等等更加具有價值的作業。

計劃就是自動化管理元件的一個成員。計劃指定了作業執行的時間。多個作業可以根據一個計劃執行;多個計劃也可以應用到一個作業。但是這個時間跟我們普通上的幾點幾分又有差異。這個時間不僅指特定的日期或者時間,而且還可以表示特定的時間。如當SQL Server代理啟動的時候或者伺服器的CPU使用率處於定義的空閒狀態水平時。也就是說,這裡指的時間計劃也可以實現一定的條件狀態控制。簡而言之,計劃作業就是定義使得作業在沒有哦能夠互互動情況下開始執行的條件,包括具體的日期或者特定的在狀況。通過為作業建立新計劃或者將現有的計劃新增到作業可以將作業計劃設定為自動執行。不過在設定自動執行計劃的時候,需要注意一個問題。即一次只能夠執行一個作業例項。如果在作業按計劃執行時嘗試手工執行該作業,則SQL Server代理將拒絕這個請求。另外,即使計劃未啟用,作業仍可以為響應警報而執行,或者由使用者手動執行。如果作業計劃未啟用,則任何使用該計劃的作業都不會啟用該計劃。

一、 計劃觸發的時間與事件。

上面筆者說過,計劃可以基於特定的時間與事件而觸發。那麼這些具體的時間與事件是什麼呢?筆者平時用到的最多的就是如下幾種情況。

一是特定的日期和時間執行一次。這個計劃時間在資料庫備份的時候特別有用。大家都知道,資料庫備份會佔用比較多的系統資源。如果在資料庫伺服器使用高峰期(如白天上班時間)進行備份的話,那麼會對使用者的訪問造成比較大的影響。為此筆者就把資料庫備份的時間放在晚上12點之後。這個時段相對來說,很少有使用者會訪問資料庫。此時管理員就可以利用計劃功能,讓其在每天的12點之後進行資料庫備份。這就是基於特定的日期和時間計劃的典型應用。

二是安重複執行的計劃執行。這個跟上面講的特定日期和時間執行一次比較類似。只是上面的情況只執行一次。而這個按重複執行計劃執行則是指會重複執行多次。如每天晚上12點都進行資料庫備份等等。在實際工作中,特定日期和時間運新一次往往只是針對一些特殊的情況。如今天剛對資料庫結構進行了比較大的更改,如新增了幾張表或者檢視,此時就需要對資料庫進行一次完全備份。如故不急於進行備份的話,則就可以建立一個在特定的日期和時間執行的資料庫完全備份計劃,讓其在午後進行資料庫備份。但是對於常規的資料庫備份,則需要採取這個按重複執行計劃執行。

三是當計算機的CPU使用率處於定義的空閒狀態水平時。也就是說,資料庫伺服器當前的CPU使用率比較低,可以執行其他一些比較複雜的管理任務。如有些資料庫系統在設計的時候,有一個庫存補貨點作業。當庫存低於安全庫存的時候,系統就會自動生成一張物料請購單,來滿足安全庫存的需要。由於這張表設計到的物料比較多,會佔用比較多的系統資源。故可以設定每天執行一次,而執行的時間就定在CPU使用率比較低的時候。如此就可以減少對其他作業造成的負面影響。

二、 CPU空閒計劃的典型應用。

其他的幾種計劃型別,不少資料庫管理員已經非常瞭解。筆者今天想談的是CPU空閒計劃的應用。這個計劃如果應用的好的話,可以大大提高資料庫的效能。如果要想利用好這個功能,則需要回答如下兩個問題。

一是什麼作業需要使用CPU空閒計劃?這個問題比較難回答。從理論上來說,任何作業都可以採用CPU空閒計劃在自動執行。只是他們帶來的效果不同。有的作業即使採用了CPU空閒計劃,也不能夠帶來很大的效能改善。簡單的來說,一些佔用CPU資源比較大的作業,採用CPU空間計劃規則來自動執行,可以取得比較好的效果。如資料庫有時候需要重新生成索引,這項工作會佔用比較多的CPU資源。而且隨著資料量的增多,這個CPU使用率也會越來越高。為此,如果可以把重新生成索引的作業,放在CPU空閒時間來進行的話,那麼對於提高資料庫的效能效果是比較明顯的。總之當某個作業比較複雜,可能需要佔用到比較多的CPU或者記憶體資源的話,則可以採用這個CPU空閒計劃。

二是什麼時候CPU是空閒的?空閒是一個相對的標準。有時會CPU使用率30%以下可以定義為空閒;而有時候CPU使用率只有不到60%,就是空閒。這要根據伺服器的配置已經所部屬的應用來考慮。所以管理員在採用CPU空閒計劃之前,先要對伺服器進行觀測一定時間,採用效能監視器等工具來監視伺服器流量並收集相關的統計資訊。然後利用收集到的資訊來分析CPU空閒的標準,並在資料庫中進行相關的設定。將 CPU 空閒條件定義為一個百分比,在該百分比以下,CPU 使用率必須持續指定的時間。然後,設定持續時間長度。如果 CPU 使用率在指定時間內低於指定的百分比,則 SQL Server 代理將啟動具有 CPU 空閒時間計劃的所有作業。如管理員認為CPU使用率在35%以下可以執行重建索引的作業,即當這個重建索引作業執行時CPU使用率在可以忍受的範圍之內,此時就可以把CPU的空閒率標準設定為35%。而且這個低於35%的CPU使用率必須要持續一段時間。如這個低於35%的CPU持續時間很短,那麼系統仍然不會認為這個CPU是出於空閒狀態。這個持續時間最好能夠參考具體作業的執行時間。若重建索引作業所需要的時間等等。

三、 如何停止計劃的自動執行?

有些時間我們可能並不需要自動執行計劃。如在資料庫設計的時候,管理員並不需要這些自動執行的計劃。為此需要把他們暫時停止。此時有哪些方法可以做到這一點呢?

一是可以把計劃與作業剝離。計劃與作業是兩個獨立的內容。如資料庫完全備份與計劃時間就是相互獨立的。如果設定好了資料庫完全備份的策略,但是沒有把計劃時間與這個作業進行關聯的話,則資料庫完全備份不會自動執行。此時如果需要執行這個作業的話,則就要進行手工啟動。故當管理員暫時不想要某個計劃的時候,可以把計劃作業剝離,即在作業中去掉這個時間計劃即可。

二是禁用作業或者計劃。當管理員不需要某個作業自動執行的時候,可以把這個計劃或者作業進用掉。禁用計劃或者禁用作業都會讓某個作業停止自動執行,但是他們仍然有微小的差異。如禁止計劃的話,只是這個這個作業停止自動執行,但是管理員仍然可以手工執行它。可是禁用作業的話,則系統不僅不會自動執行,而且管理員還不能夠手工執行它。這就好像給這個作業設定了終身監禁。為此,為了避免這種情況的發生,筆者是建議最好採用禁用計劃而不是禁用作業。如此的話,在必要的時候管理員還可以手工啟動該作業來應急。另外,如果這個計劃將來仍然需要採用的話,筆者不建議把計劃與作業剝離的方式來停止計劃的自動執行;而是建議這種禁用計劃的方式來完成。不然的話,下次需要的時候仍然需要把計劃與作業關聯,反而會增加工作量。

另外,如果這個測試計劃以後再也不用時,有兩種處理方法。一是把計劃直接刪除。這個是最徹底的方法,但是不會留下任何歷史紀錄。二是先把計劃跟作業玻璃,然後再禁用這個計劃。這雖然比較麻煩一點,而且會在資料庫中留下垃圾資料。但是卻可以保留歷史紀錄。這可能會對資料庫的後續維護帶來一定的幫助。到底不用的計劃是刪除還是禁用,沒有一個統一的標準。還是需要根據資料庫管理員的操作習慣來判斷。

無論採取哪種方式,管理員都需要注意兩點內容。一是必須顯示的重新啟動已禁用的計劃。如果管理員只是更改了已禁用的計劃策略,並不會重新啟動這個計劃,而需要管理員手工的啟動。二是即使計劃未啟用,作業仍可以為響應警報而執行,或者由使用者手動執行。如果作業計劃未啟用,則任何使用該計劃的作業都不會啟用該計劃。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-582429/,如需轉載,請註明出處,否則將追究法律責任。

相關文章