Oracle SMON進(jìn)程中系統(tǒng)監(jiān)視進(jìn)程SMON
在Oracle中有很多的東西值得我們大家學(xué)習(xí)的地方,在這里我們主要描述的是Oracle SMON進(jìn)程,也包括介紹歸檔進(jìn)程ARCH等相關(guān)方面的內(nèi)容。在Oracle數(shù)據(jù)庫中有兩個(gè)進(jìn)程非常的渺小,但是其作用卻是非常的巨大。由于其比較小而往往被數(shù)據(jù)庫管理員所忽視。
筆者這次就給大家提醒提醒,不要忽視了這兩個(gè)進(jìn)程的作用。如果利用的好的話,會(huì)減少系統(tǒng)管理員不少的工作。
Oracle SMON進(jìn)程中系統(tǒng)監(jiān)視進(jìn)程SMON
這個(gè)進(jìn)程對(duì)于Oracle數(shù)據(jù)庫來說,可以利用一句話來概括,即人小鬼大。其負(fù)責(zé)的內(nèi)容并不是很多,但是對(duì)于數(shù)據(jù)的安全與數(shù)據(jù)庫的性能卻有很關(guān)鍵的作用。如隨著表空間中的數(shù)據(jù)不斷的建立、刪除、更新等等,在表空間中難免會(huì)產(chǎn)生碎片。由于這些碎片的存在,數(shù)據(jù)庫的性能會(huì)逐漸的降低。而現(xiàn)在系統(tǒng)監(jiān)視進(jìn)程SMON的作用,就可以解決這些碎片。
Oracle SMON進(jìn)程會(huì)將各個(gè)表空間的空閑碎片合并在一起,讓數(shù)據(jù)庫系統(tǒng)更加容易分配。從而提高數(shù)據(jù)庫的性能。另外,在數(shù)據(jù)庫運(yùn)行的過程中,會(huì)因?yàn)閿嚯娀蛘咂渌脑蚨l(fā)生故障。此時(shí)由于數(shù)據(jù)高速緩存中的臟緩存塊還沒有來得及寫入到數(shù)據(jù)文件中,從而導(dǎo)致數(shù)據(jù)的丟失。
在數(shù)據(jù)庫啟動(dòng)的時(shí)候,系統(tǒng)監(jiān)視進(jìn)程OracleSMON會(huì)在下一次啟動(dòng)例程的時(shí)候,自動(dòng)讀取重做日志文件并對(duì)數(shù)據(jù)庫進(jìn)行恢復(fù)。也就是說,進(jìn)行將已提交的事物寫入數(shù)據(jù)文件(已經(jīng)寫入到日志文件中而沒有寫入到數(shù)據(jù)文件中的數(shù)據(jù))、回退未提交的事務(wù)操作。可見,Oracle SMON進(jìn)程是一個(gè)比較小但是卻非常重要的角色。
在管理這個(gè)進(jìn)程的時(shí)候,筆者認(rèn)為主要需要注意兩個(gè)問題。一是其啟動(dòng)的時(shí)機(jī)。一般情況下,例程重新啟動(dòng)的時(shí)候,會(huì)啟動(dòng)這個(gè)系統(tǒng)監(jiān)視進(jìn)程。然后在這個(gè)例程運(yùn)行期間,這個(gè)進(jìn)程也會(huì)被系統(tǒng)定期的喚醒,然后其會(huì)檢查是否有工作需要其完成。最重要的是,在有需要的時(shí)候,數(shù)據(jù)庫管理員可以通過其他進(jìn)程來啟動(dòng)這個(gè)OracleSMON系統(tǒng)系統(tǒng)監(jiān)視進(jìn)程,來完成一些特定的工作。
第二需要注意表空間配置對(duì)這個(gè)進(jìn)程的影響。在表空間管理中,有一個(gè)參數(shù)叫做PCTINCREASE。如果將這個(gè)參數(shù)設(shè)置為0的話,則這個(gè)SMON系統(tǒng)監(jiān)視進(jìn)程對(duì)于這個(gè)表空間的作用就要打折扣了。在設(shè)置為0的情況下,SMON進(jìn)程就不會(huì)對(duì)這個(gè)表空間中的空閑碎片進(jìn)行整理、合并操作。
也就是說,需要數(shù)據(jù)庫管理員通過數(shù)據(jù)的導(dǎo)出導(dǎo)入等手工操作,才能夠解決表空間的碎片問題。顯然這會(huì)增加數(shù)據(jù)庫管理員的工作量。為此筆者建立,除非有特別的需要,不要將這個(gè)參數(shù)設(shè)置為0。讓Oracle SMON進(jìn)程自動(dòng)對(duì)表空間中的碎片進(jìn)行管理,自動(dòng)合并表空間中的空閑碎片。
不過如果某個(gè)表空間這個(gè)參數(shù)設(shè)置為0的話,不會(huì)影響到系統(tǒng)監(jiān)視進(jìn)程的其他用途,如不會(huì)影響到在例程非正常關(guān)閉時(shí)對(duì)數(shù)據(jù)的恢復(fù)操作。即即使這個(gè)參數(shù)設(shè)置為0 ,在有需要的時(shí)候其仍然可以利用重做日志文件中的記錄來恢復(fù)相關(guān)的數(shù)據(jù)。
歸檔進(jìn)程ARCH
在重做日志文件管理中有歸檔與非歸檔兩種模式。在日志進(jìn)行切換時(shí),如果不對(duì)原先的日志文件進(jìn)行歸檔,而直接覆蓋的話,就叫做非歸檔模式。相反,在寫入下一個(gè)日志文件的時(shí)候,會(huì)先對(duì)目標(biāo)日志文件進(jìn)行歸檔,這就叫做歸檔模式。
歸檔進(jìn)程ARCH就是負(fù)責(zé)在重做日志文件切換后將已經(jīng)寫滿的重做日志文件復(fù)制到歸檔日志文件中,以防止循環(huán)寫入重做日志文件時(shí)將其覆蓋。所以說,只有數(shù)據(jù)庫運(yùn)行在歸檔模式時(shí),這個(gè)ARCH進(jìn)程才會(huì)被啟動(dòng)。
在任何一中操作模式下,重做日志文件都會(huì)被循環(huán)使用。所以當(dāng)LGWR進(jìn)程在進(jìn)行日志切換,需要用到下一個(gè)日志文件時(shí),則數(shù)據(jù)庫會(huì)被暫時(shí)的掛起,進(jìn)行目標(biāo)日志文件的歸檔工作。直到這個(gè)目標(biāo)重做日志文件歸檔完畢后,數(shù)據(jù)庫才會(huì)恢復(fù)正常。所以說,歸檔日志的操作,有時(shí)候也會(huì)影響數(shù)據(jù)庫的性能,特別是當(dāng)需要進(jìn)行頻繁的大批量數(shù)據(jù)更改的時(shí)候。
以上的相關(guān)內(nèi)容就是對(duì)Oracle SMON進(jìn)程中系統(tǒng)監(jiān)視進(jìn)程SMON的介紹,望你能有所收獲。
【編輯推薦】