Oracle數(shù)據(jù)庫(kù)中歸檔進(jìn)程ARCH的詳細(xì)闡述
我們大家都知道當(dāng)我們重做相關(guān)日志文件管理Oracle數(shù)據(jù)庫(kù)中會(huì)有歸檔和非歸檔兩種不同模式。在對(duì)日志進(jìn)行切換時(shí),如果你不對(duì)原來(lái)的日志文件歸檔的話,而是直接覆蓋的話,就叫做非歸檔模式。相反,在寫(xiě)入下一個(gè)日志文件的時(shí)候,會(huì)先對(duì)目標(biāo)日志文件進(jìn)行歸檔,這就叫做歸檔模式。
歸檔進(jìn)程ARCH就是負(fù)責(zé)在重做日志文件切換后將已經(jīng)寫(xiě)滿的重做日志文件復(fù)制到歸檔日志文件中,以防止循環(huán)寫(xiě)入重做日志文件時(shí)將其覆蓋。所以說(shuō),只有數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式時(shí),這個(gè)ARCH進(jìn)程才會(huì)被啟動(dòng)。在任何一中操作模式下,重做日志文件都會(huì)被循環(huán)使用。
所以當(dāng)LGWR進(jìn)程在進(jìn)行日志切換,需要用到下一個(gè)日志文件時(shí),則數(shù)據(jù)庫(kù)會(huì)被暫時(shí)的掛起,進(jìn)行目標(biāo)日志文件的歸檔工作。直到這個(gè)目標(biāo)重做日志文件歸檔完畢后,數(shù)據(jù)庫(kù)才會(huì)恢復(fù)正常。所以說(shuō),歸檔日志的操作,有時(shí)候也會(huì)影響數(shù)據(jù)庫(kù)的性能,特別是當(dāng)需要進(jìn)行頻繁的大批量數(shù)據(jù)更改的時(shí)候。
那么有什么方法可以提高歸檔作業(yè)的效率呢?筆者如下一些建議可供數(shù)據(jù)庫(kù)管理員參考。
一是可以增加歸檔進(jìn)程的個(gè)數(shù)。在默認(rèn)情況下,一個(gè)例程只會(huì)啟動(dòng)一個(gè)歸檔進(jìn)程ARCH。當(dāng)ARCH進(jìn)程正在歸檔一個(gè)重做日志文件時(shí),任何其他的進(jìn)程都不能夠訪問(wèn)這個(gè)重做日志文件。如果在Oracle數(shù)據(jù)庫(kù)中,可以根據(jù)需要啟動(dòng)多個(gè)歸檔進(jìn)程ARCH。
在Oracle數(shù)據(jù)庫(kù)中,啟動(dòng)多個(gè)歸檔進(jìn)程時(shí)分為手工與自動(dòng)兩個(gè)方式。為了提高重做日志文件歸檔的速度,當(dāng)用戶進(jìn)程發(fā)生比較長(zhǎng)時(shí)間的等待時(shí), LGWR進(jìn)程會(huì)根據(jù)時(shí)機(jī)情況來(lái)自動(dòng)啟動(dòng)多個(gè)歸檔進(jìn)程。在Oracle數(shù)據(jù)庫(kù)中其最多可以啟動(dòng)十個(gè)歸檔進(jìn)程。另外如果數(shù)據(jù)庫(kù)管理員在部署數(shù)據(jù)庫(kù)的時(shí)候,估計(jì)日志歸檔作業(yè)會(huì)影響到數(shù)據(jù)庫(kù)的性能,就可以手工來(lái)啟動(dòng)多個(gè)歸檔進(jìn)程。
這是通過(guò)初始化參數(shù)LOG_ARCHIVE_MAX_PROCESSES確定的。可以將這個(gè)參數(shù)設(shè)置為大于1 的數(shù)值(注意不能夠超過(guò)9個(gè)歸檔進(jìn)程)。如此的話,數(shù)據(jù)庫(kù)在創(chuàng)建例程的時(shí)候就會(huì)啟動(dòng)多個(gè)歸檔進(jìn)程。不過(guò)筆者還是傾向于讓數(shù)據(jù)庫(kù)系統(tǒng)來(lái)自動(dòng)管理這個(gè)進(jìn)程。
數(shù)據(jù)庫(kù)管理員***不要干涉。另外需要注意,這個(gè)ARCH歸檔進(jìn)程個(gè)數(shù)與DBWR進(jìn)程個(gè)數(shù)的區(qū)別。默認(rèn)情況下,DBWR進(jìn)程也只有一個(gè)。為了提高數(shù)據(jù)庫(kù)的性能,可以根據(jù)情況增加這個(gè)DBWR進(jìn)程的個(gè)數(shù)。不過(guò)其增加時(shí)受到CPU數(shù)量的限制,即一個(gè)DBWR進(jìn)程需要使用一個(gè)獨(dú)立的CPU。
如果想啟動(dòng)三個(gè)DBWR進(jìn)程的話,就必須采用3個(gè)CPU處理器。而對(duì)于ARCH歸檔進(jìn)程來(lái)說(shuō),則沒(méi)有這個(gè)限制。即使只有一個(gè)CPU處理器,其也可以啟動(dòng)三個(gè)甚至更多的ARCH進(jìn)程。
二是增加重做日志文件來(lái)延長(zhǎng)歸檔日志進(jìn)程啟動(dòng)的時(shí)間間隔。通常情況下,只有當(dāng)前一個(gè)重做日志文件寫(xiě)滿、需要進(jìn)行日志切換的時(shí)候,才會(huì)觸發(fā)這個(gè)ARCH歸檔日志進(jìn)程。所以如果重做文件比較大,其日志切換的時(shí)間間隔就會(huì)延長(zhǎng)。則ARCH歸檔日志進(jìn)程的啟動(dòng)時(shí)間間隔業(yè)會(huì)比較長(zhǎng)。
所以說(shuō),通過(guò)調(diào)整重做日志文件的大小,可以延長(zhǎng)歸檔進(jìn)程啟動(dòng)的時(shí)間間隔。從而降低因?yàn)闅w檔進(jìn)程啟動(dòng)而對(duì)數(shù)據(jù)庫(kù)性能造成的負(fù)面影響。
三是在數(shù)據(jù)庫(kù)初始化的過(guò)程中,可能需要導(dǎo)入大量的數(shù)據(jù)。此時(shí)會(huì)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行大量的插入、刪除、更新等操作,從而導(dǎo)致重做日志文件切換頻繁。這就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)需要頻繁啟動(dòng)ARCH歸檔進(jìn)程。數(shù)據(jù)庫(kù)大量的更新操作、重做日志文件(LGWR進(jìn)程)、歸檔重做日志文件(ARCH)進(jìn)程之間就形成了一條無(wú)形的鏈條。
由于“蝴蝶效應(yīng)”,從而降低了數(shù)據(jù)庫(kù)的性能。為此在必要的時(shí)候,需要砍斷這跟鏈條,以提高數(shù)據(jù)庫(kù)的性能。如可以在數(shù)據(jù)大量導(dǎo)入、更新、刪除的時(shí)候,不往日志文件中插入記錄,或者臨時(shí)增加重做日志文件的空間。如此的話,在進(jìn)行這些操作時(shí)就可以避免進(jìn)行重做日志切換或者延長(zhǎng)重做日志切換的時(shí)間間隔。
從而ARCH歸檔日志進(jìn)程也可以避免或者延長(zhǎng)其時(shí)間間隔,從而提高數(shù)據(jù)庫(kù)的性能。當(dāng)數(shù)據(jù)庫(kù)初始化完成之后,再將其恢復(fù)過(guò)來(lái)。這些臨時(shí)性的調(diào)整雖然比較麻煩,但是卻可以提高數(shù)據(jù)庫(kù)的性能。為此筆者認(rèn)為這是值得的。
可見(jiàn)以上兩個(gè)進(jìn)程在Oracle數(shù)據(jù)庫(kù)中其作用雖然有限,但是卻跟數(shù)據(jù)庫(kù)的性能息息相關(guān)。在日常操作中,靈活使用這個(gè)兩個(gè)進(jìn)程的特性,就可以提高某些操作的速度。這比通過(guò)優(yōu)化SQL語(yǔ)句等方法來(lái)提高數(shù)據(jù)庫(kù)性能要簡(jiǎn)單的多。為此筆者建議各位數(shù)據(jù)庫(kù)管理員,這兩個(gè)進(jìn)程雖然小,但是其作用不可忽視。數(shù)據(jù)庫(kù)管理員要對(duì)這兩個(gè)進(jìn)程引起重視。
【編輯推薦】