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