基礎知識1——例項程式結構

與刃爭鋒發表於2014-01-06
例項程式結構

例項後臺程式在啟動例項時啟動,終止例項時終止執行.先介紹5個歷史悠久的後臺程式.
系統監視器SMON(system monitor),程式監視器PMON(process monitor),資料庫寫入器DBWn(database writer),日誌寫入器LGWR(log writer),檢查點程式CKPT(checkpoint process)

新版本中引入了可管理性監視器MMON(manageability monitor)和記憶體管理器MMAN(memory manager)兩個重要的程式.archive程式ARCn和recoverer程式RECO,還有些RAC需要的程式.


此圖概括了幾個關鍵程式與SGA記憶體結構的典型互動情況.伺服器程式是客戶端—伺服器連線的伺服器端的代表,而客戶端元件由使用者會話和使用者程式組成.伺服器程式與資料檔案互動,將資料塊讀取到緩衝區快取中.可用DML修改,弄髒緩衝區快取中的塊.變更向量被複制到迴圈的日誌緩衝區,由日誌寫入器程式LGWR幾乎實時轉儲到聯機重做日誌檔案.如果配置了歸檔日誌模式,歸檔程式ARCn就將聯機重做日誌檔案複製到歸檔位置.最後幾個條件導致資料庫寫入器程式DBWn將髒塊寫入某個資料檔案.

討論程式之前,要明確一下:linux和unix平臺,oracle程式都是獨立的作業系統程式,每個程式都有編號.windows平臺整個例項只有一個作業系統程式(oracle.exe),oracle程式作為此程式中的獨立執行緒執行.



SMON(system monitor):起初是安裝和開啟資料庫.SMON通過查詢和驗證資料庫控制檔案來安裝資料庫,此後通過查詢和驗證所有資料檔案和聯機日誌檔案開啟資料庫.開啟資料庫並使資料庫處於使用狀態後,SMON就負責執行各種內部管理任務,如合併資料檔案中的可用空間.

PMON(process monitor):使用者會話是連線到伺服器程式的使用者程式.伺服器程式在此會話建立時啟動,在會話結束時銷燬. PMON監視所有伺服器程式,並檢測會話中的任何問題,如果會話異常終止,PMON將銷燬伺服器程式,將PGA記憶體返回給作業系統的空閒記憶體池,並回滾任何正在進行的未完成事務.

DBWn:注意!會話通常並不將資料寫入磁碟,會話將資料或資料的更改寫入資料庫緩衝區快取,有資料庫寫入器負責將緩衝區寫入磁碟.一個例項可以有多個DBWn,最多不超過20個,DBW0開始到DBWn,預設8個CPU一個DBWn.
DBWn根據極懶演算法執行寫入:儘可能少.以下四種情況DBWn將執行寫操作:沒有任何可用緩衝區,髒緩衝區過多,3秒超時和遇到檢查點.
唯一絕對需要檢查點的情況是:關閉資料庫,關閉例項,檢查點將所有髒緩衝區寫入磁碟

LGWR:將日誌緩衝區的內容寫到磁碟上的聯機日誌檔案中.當會話對資料庫緩衝區快取中的塊執行任何更改時,在其將更改應用到塊之前,會將要應用的變更向量寫出到日誌緩衝區中. 3中情況下LGWR將轉儲日誌緩衝區:會話發出commit,日誌緩衝區佔用1/3,DBWn要寫入髒緩衝區.
導致LGWR執行寫入3秒超時存在,但實際是DBWR有3秒超時,因為LGWR總是先於DBWn執行寫入,於是LGWR也就有了3秒超時.

CKPT:一段時間間隔過後,就需要設定檢查點,便於例項失敗後快速回復,這些檢查點由CKPT發起. 

何時出現完全檢查點?有序關閉資料庫時,或手動輸入請求這麼做.


MMON:10g引入,是資料庫的自我檢視自我調整功能的支援程式.它從SGA中定期捕獲統計資料(預設1小時1次),並寫入導資料字典,可無限期儲存它們(預設是存8天).
每次MMON收集一組統計資料(叫快照)時,它還啟動automatic database diagnostic monitor(ADDM).ADDM工具觀察兩個快照(預設是當前和先前的快照),並得出有關效能的觀察結果和建議.MMON還持續監視資料庫和例項,來確定是否發出警報.

MMNL(manageability monitor light):是MMON的輔助程式.有時MMON的預訂活動不足,比如MMON根據排程安排將SGA中收集的統計資訊轉儲到資料庫中:預設每小時1此.如果在MMON預訂執行轉儲前,用於手機此資訊的記憶體緩衝區變滿,MMNL將擔當起轉出資料的職責.

MMAN(memory manager):10g引入,支援記憶體分配的自動管理. 

ARCn:雖然此程式是可選的,但建議一定要使用它.數量在1~30之間,名為ARC0,ARC1.變更向量都寫出到日誌緩衝區,然後LGWR寫到磁碟上
的聯機重做日誌檔案,但聯機日誌檔案大小和數量不變,總會變滿,LGWR會用更多的重做資料覆蓋聯機重做日誌檔案,配置歸檔日誌模式
會將重做日誌不斷儲存下來,便於資料庫恢復.

大多數生產環境資料庫都是在歸檔日誌模式下執行,這說明ARCn自動啟動,而且在ARCn成功將聯機日誌檔案成功歸檔到歸檔日誌檔案前,不允許LGWR重寫相應的聯機日誌檔案.

RECO(recoverer process):RECO程式是啟用分散式選項時才會存在的程式,而且DISTRIBUTED\-TRANSACTIONS引數大於0.當然,分散式事務在絕大多數系統中是預設安裝的,因此說,總是能在資料庫例項中看到這個程式.RECO程式能夠自動解決分散式事務中的故障.一個結點的RECO後臺程式能夠自動連線到包含錯誤的分散式事務的其他資料庫中,在解決了所有的故障後,將這個全域性事務從2pc_pending等相關的表中刪除.當資料庫伺服器的RECO後臺程式試圖同一遠端伺服器建立通訊時,如果遠端伺服器不可用,或者網路連線不能建立,
RECO將在一定時間間隔後自動重連.


select program from v$process order by program
--------------------
PSEUDO
oracle@ (ARC0)
oracle@ (ARC1)
oracle@ (CJQ0)           --管理定期執行的排程作業
oracle@ (CKPT)
oracle@ (DBRM)          --資料庫資源管理器(database resource manager)負責設定資源計劃以及與資源管理器相關的任務. 
oracle@ (DBW0)
oracle@ (DIA0)           --診斷程式0負責掛起檢測和解析死鎖. 
oracle@ (DIAG)           --診斷程式執行診斷轉儲,並執行oradebug命令(oradebug是研究例項問題的工具)
oracle@ (D000)          --排程程式,將SQL呼叫傳送到共享的伺服器程式Snnn(如果已啟用共享伺服器機制)
oracle@ (J000)           --管理定期執行的排程作業
oracle@ (LCK0)
oracle@ (LGWR)
oracle@ (LMD0)
oracle@ (LMON)
oracle@ (LMS0)
oracle@ (LMS1)
oracle@ (MMAN)
oracle@ (MMNL)
oracle@ (MMON)
oracle@ (PMON)
oracle@ (PSP0)
oracle@ (PZ99)
oracle@ (QMNC)          --佇列管理器協調器(queue manager coordinator)監視資料庫中的佇列,分配Qnnn程式使訊息 入隊或出隊.
oracle@ (RECO)
oracle@ (SMON)
oracle@ (TNS V1-V3)
oracle@ (TNS V1-V3)
oracle@ (TNS V1-V3)
oracle@ (TNS V1-V3)
oracle@ (q000)          --佇列管理器協調器(queue manager coordinator)監視資料庫中的佇列,分配Qnnn程式使訊息 入隊或出隊.
oracle@ (q001)          --佇列管理器協調器(queue manager coordinator)監視資料庫中的佇列,分配Qnnn程式使訊息 入隊或出隊. 




確定哪些程式正在執行,每個程式數量

select program from v$session order by program;
select program from v$process order by program

linux/unix平臺
> ps -ef|grep oracle|wc -l


 


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

相關文章