文章出自:也找不到源地址在哪了,總之感謝作者的分享
Oracle中最易忽視的兩個重要進程
在Oracle資料庫中有兩個進程非常的渺小,但是其作用卻是非常的巨大。由於其比較小而往往被資料庫管理員所忽視。筆者這次就給大家提醒提醒,不要忽視了這兩個進程的作用。如果利用的好的話,會減少系統管理員不少的工作。
一、系統監視進程SMON
這個進程對於Oracle資料庫來說,可以利用一句話來概括,即人小鬼大。其負責的內容並不是很多,但是對於資料的安全與資料庫的效能卻有很關鍵的作用。如隨著資料表空間中的資料不斷的建立、刪除、更新等等,在資料表空間中難免會產生片段。由於這些片段的存在,資料庫的效能會逐漸的降低。而現在系統監視 進程SMON的作用,就可以解決這些片段。SMON進程會將各個資料表空間的空閑片段合并在一起,讓資料庫系統更加容易分配。從而提高資料庫的效能。另外,在資料庫啟動並執行過程中,會因為斷電或者其他的原因而發生故障。此時由於資料快取中的髒緩衝塊還沒有來得及寫入到資料檔案中,從而導致資料的丟失。在資料 庫啟動的時候,系統監視進程SMON會在下一次啟動常式的時候,自動讀取重做記錄檔並對資料庫進行恢複。也就是說,進行將已提交的事物寫入資料檔案(已 經寫入到記錄檔中而沒有寫入到資料檔案中的資料)、回退未提交的事務操作。可見,SMON進程在Oracle資料庫中是一個比較小但是卻非常重要的角 色。
在管理這個進程的時候,筆者認為主要需要注意兩個問題。一是其啟動的時機。一般情況下,常式重新啟動的時候,會啟動這個系統監視進程。然後在這個常式運行期間,這個進程也會被系統週期性喚醒,然後其會檢查是否有工作需要其完成。最重要的是,在有需要的時候,資料庫管理員可以通過其他進程來啟動這 個SMON系統系統監視進程,來完成一些特定的工作。
第二需要注意資料表空間配置對這個進程的影響。在資料表空間管理中,有一個參數叫做PCTINCREASE。如果將這個參數設定為0的話,則這個 SMON系統監視進程對於這個資料表空間的作用就要打折扣了。在設定為0的情況下,SMON進程就不會對這個資料表空間中的空閑片段進行整理、合併作業。也就是說,需要資料庫管理員通過資料的匯出匯入等手工操作,才能夠解決資料表空間的片段問題。顯然這會增加資料庫管理員的工作量。為此筆者建立,除非有特別的需要, 不要將這個參數設定為0。讓SMON進程自動對錶空間中的片段進行管理,自動合并資料表空間中的空閑片段。不過如果某個資料表空間這個參數設定為0的話,不會影響 到系統監視進程的其他用途,如不會影響到在常式非正常關閉時對資料的恢複操作。即即使這個參數設定為0 ,在有需要的時候其仍然可以利用重做記錄檔中的記錄來恢複相關的資料。
二、歸檔進程ARCH
在重做記錄檔管理中有歸檔與非歸檔兩種模式。在日誌進行切換時,如果不對原先的記錄檔進行歸檔,而直接覆蓋的話,就叫做非歸檔模式。相反,在寫入下一個記錄檔的時候,會先對目標記錄檔進行歸檔,這就叫做歸檔模式。歸檔進程ARCH就是負責在重做記錄檔切換後將已經寫滿的重做記錄檔複製到歸檔記錄檔中,以防止迴圈寫入重做記錄檔時將其覆蓋。所以說,只有資料庫運行在歸檔模式時,這個ARCH進程才會被啟動。在任何一中操作模式下,重做記錄檔都會被迴圈使用。所以當LGWR進程在進行日誌切換,需要用到下一個記錄檔時,則資料庫會被暫時的掛起,進行目標記錄檔的歸檔工作。直到這個目標重做記錄檔歸檔完畢後,資料庫才會恢複正常。所以說,歸檔日誌的操作,有時候也會影響資料庫的效能,特別是當需要進行頻繁的大批量資料更改的時 候。
那麼有什麼方法可以提高歸檔作業的效率呢?筆者如下一些建議可供資料庫管理員參考。
一是可以增加歸檔進程的個數。在預設情況下,一個常式只會啟動一個歸檔進程ARCH。當ARCH進程正在歸檔一個重做記錄檔時,任何其他的進 程都不能夠訪問這個重做記錄檔。如果在Oracle資料庫中,可以根據需要啟動多個歸檔進程ARCH。在Oracle資料庫中,啟動多個歸檔進程時分為 手工與自動兩個方式。為了提高重做記錄檔歸檔的速度,當使用者進程發生比較長時間的等待時, LGWR進程會根據時機情況來自動啟動多個歸檔進程。在Oracle資料庫中其最多可以啟動十個歸檔進程。另外如果資料庫管理員在部署資料庫的時候,估計日誌歸檔作業會影響到資料庫的效能,就可以手工來啟動多個歸檔進程。這是通過初始化參數LOG_ARCHIVE_MAX_PROCESSES確定的。可以將這個參數設定為大於1 的數值(注意不能夠超過9個歸檔進程)。如此的話,資料庫在建立常式的時候就會啟動多個歸檔進程。不過筆者還是傾向於讓資料庫系統來自動管理這個進程。資料庫管理員最好不要幹涉。另外需要注意,這個ARCH歸檔進程個數與DBWR進程個數的區別。預設情況下,DBWR進程也只有一個。為了提高資料庫的性 能,可以根據情況增加這個DBWR進程的個數。不過其增加時受到CPU數量的限制,即一個DBWR進程需要使用一個獨立的CPU。如果想啟動三個DBWR 進程的話,就必須採用3個CPU處理器。而對於ARCH歸檔進程來說,則沒有這個限制。即使只有一個CPU處理器,其也可以啟動三個甚至更多的ARCH進 程。
二是增加重做記錄檔來延長歸檔日誌進程啟動的時間間隔。通常情況下,只有當前一個重做記錄檔寫滿、需要進行日誌切換的時候,才會觸發這個 ARCH歸檔日誌進程。所以如果重做檔案比較大,其日誌切換的時間間隔就會延長。則ARCH歸檔日誌進程的啟動時間間隔業會比較長。所以說,通過調整重做記錄檔的大小,可以延長歸檔進程啟動的時間間隔。從而降低因為歸檔進程啟動而對資料庫效能造成的負面影響。
三是在資料庫初始化的過程中,可能需要匯入大量的資料。此時會對資料庫中的資料進行大量的插入、刪除、更新等操作,從而導致重做記錄檔切換頻繁。這就會導致資料庫需要頻繁啟動ARCH歸檔進程。資料庫大量的更新操作、重做記錄檔(LGWR進程)、歸檔重做記錄檔(ARCH)進程之間就形成了一條無形的鏈條。由於“蝴蝶效應”,從而降低了資料庫的效能。為此在必要的時候,需要砍斷這跟鏈條,以提高資料庫的效能。如可以在資料大量匯入、更新、刪除的時候,不往記錄檔中插入記錄,或者臨時增加重做記錄檔的空間。如此的話,在進行這些操作時就可以避免進行重做日誌切換或者延長重做日誌切換的時 間間隔。從而ARCH歸檔日誌進程也可以避免或者延長其時間間隔,從而提高資料庫的效能。當資料庫初始化完成之後,再將其恢複過來。這些臨時性的調整雖然比較麻煩,但是卻可以提高資料庫的效能。為此筆者認為這是值得的。
可見以上兩個進程在Oracle資料庫中其作用雖然有限,但是卻跟資料庫的效能息息相關。在日常操作中,靈活使用這個兩個進程的特性,就可以提高某些操作的速度。這比通過最佳化SQL語句等方法來提高資料庫效能要簡單的多。為此筆者建議各位元據庫管理員,這兩個進程雖然小,但是其作用不可忽視。資料庫管理員要對這兩個進程引起重視。