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