ORACLE 10G 後臺程式

gaopengtttt發表於2008-11-19
後臺程式包括:

1)Focused Background Processes
2)Utility Background Processes

1)Focused Background Processes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PMON:

1)connection在不正常終止時,pmon負責釋放資源,rollback未提交的事務
2)監控後臺程式,如果某些後臺程式不正常終止,則會重啟它(比如dispatcher),或者直接終止例項(比如lgmr終止時)
3)例項啟動時,pmon負責註冊例項到監聽上,當例項啟動時,pmon程式會檢查預設監聽器是否啟動,如果使用非預設的監聽器,需要設定
local_listener引數。
 

SMON:

1)clean up臨時空間:真正的臨時段不需要clean up,但某些操作,比如create index產生的臨時段當create index的session不正常終止時,此時需要smon來清理。
2)Coalesces free space:如果使用字典表空間,smon負責將連續的空閒extent合併。
3)Recovers transactions active against unavailable files: 這個過程和例項啟動時進行的instance crash recovery(自動前滾和回滾)相似,只不過由於例項啟動時某些檔案無法訪問,而例項啟動後的某個時間這些檔案可以訪問時,smon就會對其執行recover;
4)Performs instance recovery of a failed node in : 當rac的某個節點失敗時,某個剩餘的節點會開啟失敗節點對應的redo log,進行recover;
5)Cleans up OBJ$: obj$是個底層的資料字典,包括所有的物件資訊,很多時候,某些物件被刪除時,由smon程式來clean up 該檢視;
6)Shrinks rollback segments:如果設定了optimal size引數,smon程式負責執行回滾段的自動收縮
7)"Offlines" rollback segments:當使用者offline某個回滾段,但此時該回滾斷有active trancsaction,這是回滾段的狀態其實是pending offline,而smon程式會定期的檢查該回滾段的事務是否完成,完成即將其變為offline
8)還有很多其它任務。
 
RECO:Distributed Database Recovery


1)reco有個主要工作,就是recover那些兩階段提交的但由於網路或其它原因造成狀態為prepared 的掛起事務。

  兩階段提交的概念:
  A 2PC is a distributed protocol that allows for a modification that affects many disparate databases to be committed automically. It attempts to close the window for distributed failure as much as possible before committing. In a 2PC between N databases, one of the databases—typically (but not always) the one the client logged into initially—will be the coordinator. This one site will ask the other
N-1 sites if they are ready to commit. In effect, this one site will go to the N-1 sites and ask them to be prepared to commit. Each of the N-1 sites reports back its “prepared state” as YES or NO. If any one of the sites votes NO, the entire transaction is rolled back. If all sites vote YES,then the site coordinator broadcasts a message to make the commit permanent on each of the N-1 sites.
  關於2pc的中文帖子說明:
 http://flyhorse2k.spaces.live.com/blog/cns!9C7106D3DF7B09DE!178.entry

2)當某些節點反饋yes給事務協調器可以提交時,但事務協調器還未正式發出可以提交的最後指示時,由於網路的原因,這些節點失去了和事務協調節點的聯絡,此時這些事務就成為了an in-doubt distributed transaction。此時,RECO就負責定期的聯絡事務協調器,當聯絡到時,就會提交或者回滾這些事務了。

3)對於某些大的事務,如果使用reco的成本比較高,可以人為的干涉來處理掉這些事務
SQL>  select local_tran_id,global_tran_id,state from dba_2pc_pending;
SQL>  rollback force "";

CKPT: Checkpoint Process

1)CKPT程式不是做checkpoint(A checkpoint is the writing of dirty (modified) blocks from the buffer cache to disk)的,而是在發生checkpoint時,修改資料檔案頭的。 

2)在oracle8以前,CKPT的任務可以由LGWR程式來執行,因此CKPT程式可選,但從8.0開始,CKPT程式是必須的,LGWR也減少了執行負擔。

DBWR: Database Block Writer

1)負責將dirty buffer寫入到datafile中,目的是騰出sga空間和advance checkpoint
2)Advance checkpoint後,在做instance recover時,就從online redo file的新位置做為起點位置做恢復。
3)當發生log switch時,會出發checkpoint
4)當online log file 需要被重用時,checkpoint還沒有做完的話,警告檔案裡面會有checkpoint note complete的警告
5)如果dbwr的效能低下,我們會發現很多free buffer waits和write complete waits的等待
6)可以配置多個dbwr程式,比如dbw1,dbw2,...dbw9,...dbwj,最多20個,引數為db_writer_processes,這可以利用多個CPU的並行處理功能
7)如果作業系統支援AIO,dbwr就可以不用等待作業系統寫完,而繼續下一個dbwr請求。
8)如果作業系統不支援AIO,可以利用dbwr slaves來模擬,引數為dbwr_io_slaves


LGWR: Log Writer

1)將redo log buffer寫入到redo log file中
2)3s,commit,redo log buffer 1/3滿時,都會觸發lgwr寫
3)因此redo log buffer不需要太大
4)lgwr採用sequenctial地寫入,不像dbwr是scatter的寫入,因此lgwr的效能要高很多。


ASMBAutomatic Storage Manangement Background

1)當使用ASM儲存database file時,啟用該程式
2)該程式負責與ASM例項進行通訊

RBAL:Reblance

1)當使用ASM儲存database file時,啟用該程式
2)該程式負責當從ASM disk group中增加或減少disk時,rebalance資料。

LMON:Lock monitor

1)RAC下的程式
2)負責監控RAC叢集中的例項是否fail
3)當RAC中例項增加或減少時,負責重新配置lock和其他資源

LMD:Lock mananger daemon

1)RAC下的程式
2)將global cache service(keep he block buffer consistent between instances)的鎖請求傳送給LMSn控制的佇列中

LMSn:Lock manager

1)RAC下的程式
2)主要目的是透過cache-to-cache的方式,保證gloabal cache service
3)每個Instance可以配置最多10g LMSn

LCK0:Lock

1)RAC下的程式
2)作用和LMD類似,但它不僅處理data block buffer的請求,也處理其它的global resource

DIAG:Diagnosability daemon

1)RAC下的程式
2)監控各個例項是否health,並且在發生fail時,進行capture


2)Utility Background Processes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CJQ0 and Jnnn Processes:Job Queue

1)當配置job_queue_processes時,會有Jnnn和CJQ0程式
2)Jnnn程式最多可有1000個
3)Jnnn程式在job之間是共享的,但同時每個Jnnn只能執行一個job,並且它使用的記憶體是在UGA中
4)物化試圖的重新整理一般要用到job
5)streams一般用到AQ
6)CJQ0,做為jnnn的coordinator,它來控制jnnn的啟動和關閉
7)Jnnn程式只會在有job需要處理時才會啟動

QMNC and Qnnn Processes:Job Queue

1)用於AQ功能
2)Qnnn處理每個message queue,QMNC做為Qnnn的coordinator
3)如果配置了aq_tm_processes,就會啟動QMNC和Qnnn程式,不論有沒有queue要處理,Qnnn都會全部啟動

EMNn:Event Monitor Processes

1)用於AQ功能
2)用於監控queue,向訂購者反饋訊息


MMAN:Memory Manager

1)當使用自動管理記憶體功能時,MMAN負責處理sga各元件的記憶體動態分配,包括有default buffer pool,shared pool,java pool,large pool.


MMON,MMNL,Mnnn:Manageability Monitors

1)用於AWR(autmatic workload repository)
2)MMNL負責將SGA中的統計資訊寫入到表中
3)MMON監控資料庫效能,進行自動調優
4)Mnnn屬於MMON的幫手,幫助進行調優工作


CTWR:Change Tracking Processes

1)負責維護new change tracking file

RVWR:Recovery Writer

1)負責維護flash recovery area中的before images資料


還有一些其他的utility process,比如為服務的,為streams服務的,為data pump服務的等等......



從程式包括:

1)I/O slaves
2)Parallel query Slaves


I/O Slaves

1)如果作業系統不支援AIO,可以利用io slaves模擬aio
2)backup_tape_io_slaves為rman服務,設定為true的話,rman會根據需要自動啟動一些slaves來完成與tape的相關讀寫操作
3)dbwr_io_slaves為dbwr使用,當設定dbwr_io_slave大於0時,lgwr和arch會使用他們自己的slaves(最多4個)
4)dbwr的從程式為I1nn,lgwr的從程式為I2nn

Parallel Query Slaves

1)當執行某些語句時,會產生很多執行計劃,這些執行其實可以並行執行,然後合併成一個輸出結果
2)可以利用並行查詢功能來實現並行
3)產生的並行查詢程式名為Pnnn

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-498009/,如需轉載,請註明出處,否則將追究法律責任。

相關文章