Oracle進程

來着TOM的《oracle 編程藝術 9i,10g,11g》數據庫

 

PMON編程

 PMON,進程監視。PMON主要有3個用途:安全

 1,在進程非正常中斷後,作清理工做。例如:dedicated server失敗了或者由於一些緣由被殺死,這是PMON的工做分兩種。第一,是對dedicated server所作的工做進行恢復或撤銷。第二:是釋放dedicated server佔用的資源。PMON會把失敗進程的未提交的工做進行rollback,釋放鎖,釋放SGA空間session

 2,在進程abort後,PMON進行清理工做。PMON會監視oracle其餘的後臺進程,並在須要的時候對它們進行重建。若是shared server或者dispatcher失敗後,PMON會介入其中,並在清理完失敗進程後,重建一個shared server或dispatcher。例如:在數據庫進行寫日誌的時候LGWR進程失敗,這是個很嚴重的錯誤。解決這種問題最安全的方法是當即中斷實例,並恢復。oracle

 3,PMON的第三個用途是,向Oracle TNS listener註冊實例信息。在實例啓動的時候,PMON會查詢oracle的默認端口(1521端口)是否處於工做狀態。若是這個端口已經處於工做狀態,那麼該實例就能夠啓動,PMON把實例的相關信息告訴listener,包括服務名、實例的信息等。若是listener沒有啓動,PMON就會按期的嘗試去鏈接listener。這裏要注意若是oracle沒有是默認的1521端口,而是使用其餘的端口時,PMON和listener的鏈接過程和使用1521端口仍是很類似的,除了,在使用非默認端口時,listener的地址要在參數LOCAL_LISTENER中指定。異步

 

SMONasync

 SMON,系統監視。SMON的工做以下:性能

 1,清理臨時空間。優化

 2,聚合空閒空間。若是使用dictionary-managed 方式來管理表空間,SMON就要負責把空閒的extent聚合成大的空閒extent。這種狀況只有在表空間的管理方式是dictionary-managed ,且參數PCTINCREASE被設置成非零值的時候纔會發生。spa

 3,對不可用文件的事務恢復。在數據庫啓動的時候,SMON會恢復失敗的事務,這些事務是在實例恢復或crash恢復的時候被跳過的。例如:在磁盤上某哥文件不可用了,在這個文件又從新可用後,SMON會恢復它。

 4,在RAC的單節點故障上進行實例恢復。在RAC 環境下,若是cluster(簇羣)中有一個實例失敗了(如:實例所在的機器掛掉了),在這個cluster上的其餘的節點會打開失敗實例的redo log,並恢復失敗實例

 5,清理OBJ$。OBJ$是個低級別的數據字典,它幾乎包含了數據庫中全部的objects的entry。多數時候,有的entries的objects已經被刪除了,或者當前的entry表明的再也不是最新的objects。SMON就負責刪除這些entry信息了

 6,收縮undo segments。SMON會自動把rollback segment收縮到最優的大小

 7,離線rollback segments。DBA可能須要把一個處於active狀態的事務的rollback segment離線。此時若是事務正在使用這個已經離線的rollback segment,那麼這個segment並未真的離線,而是被標記爲「pending offline"。在後臺,SMON會一直嘗試離線這個segment,直到成功。

 此外,SMON還會刷新視圖DBA_TAB_MONITORING的統計信息等。SMON會消耗大量的CPU。SMON會按期地,或被其餘後臺進程喚醒,來執行清理工做。

 

CKPT

 CKPT,檢查點進程。CKPT進程並不像它的名字說的那樣進行checkpoint,執行checkpoint是DBWn的工做。它只是來更新數據文件頭的。oracle8.0以前,CKPT只是一個可選的進程。但oracle8.0以後,CKPT進程就進程被打開。過去更新數據文件頭的checkpoint 信息是LGWR的工做,然而,隨着數據庫文件的增長,LGWR的負擔也變得愈來愈重。若是LGWR要更新100,甚至1000哥文件頭,那麼就會有不少的session等待很長時間去commit。全部CKPT就把這個工做承擔下來了

 

DBWn

 DBWn,數據寫進程。DBWn負責把緩衝區的髒數據寫到磁盤上。在oracle發生switch log files的時候,會發生checkpoint。checkpoint發生後,在redo log中的數據就能夠被覆蓋了。若是在redo log被填滿,且要從新利用redo log 來存放新的數據時,而此時checkpoint還爲完成,oracle就會返回」checkpoint not complete「。

 DBWn的性能至關重要。若是DBWn寫數據的速度不夠快,這樣釋放出空閒buffer的速度也就不會快。那麼Free Buffer Waits 和Write Complete Waits的值就會很快的增加。

 oracle能夠配置多達36個DBW進程。從DBW0到DBW35.多數系統只有一個DBW進程,但在多CPU系統中就可能不止一個DBW進程了。這樣作的目的是分散寫數據的負擔,保證SGA中有足夠的空閒空間。

 優化狀況下,DBW是經過異步(asynchronous)I/O向磁盤寫數據的。經過異步I/O,DBW先把blocks組成一個batch(一捆),再把batch遞交給OS,DBW不會等待OS把batch寫入到磁盤,而是返回,繼續收集下一個batch。當OS完成寫後,會異步通知DBW進程,已經把batch成功的寫入到磁盤了。

 最後,DBW進程是分散地把數據寫到磁盤上的。而LGWR是連續寫redo log。分散寫要比連續寫耗時的多。可是,DBW是在後臺進行分散寫的,而LGWR作連續寫是爲了減小用戶等待的時間。

 疑問:TOM說DBWn是把blocks組成一個batch,而後異步交給OS,讓OS寫到磁盤的。爲啥又說DBWn是分散寫數據的,寫數據的活不是OS乾的嗎?

 

LGWR

 LGWR,日誌寫進程。LGWR是把SGA中redo log buffer的信息寫到redo log file的進程。LGWR會在下面狀況發生:

 1,每一個3秒鐘,進行一次LGWR

 2,任何事務進行了commit

 3,當redo log buffer是1/3滿,或者裏面有1MB的數據

 基於以上的緣由,把redo log buffer設置的很大就不必的。

 

ARCn

 ARCn,歸檔進程。ARCn的工做是在LGWR把onlone redo log填滿後,ARCn把redo log file的內容copy到其餘的地方。歸檔日誌能夠用來作media recovery。online redo log 是被用來爲實例失敗的時候,恢復數據文件。而歸檔日誌是被用來在media recovery的時候,恢復數據文件。

相關文章
相關標籤/搜索