ORACLE 經常使用的進程

原文鏈接:http://blog.itpub.net/29487349/viewspace-2140679/

PMON

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

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

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

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

 

SMON

SMON,系統監視。SMON的工作如下:

1,清理臨時空間。

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

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的時候,恢復數據文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章