Oracle中的后臺進(jìn)程
為了使多數(shù)用戶獲得最佳的性能體驗(yàn),Oracle系統(tǒng)中融合了一些后臺進(jìn)程(background processes)
漱办。常見的后臺進(jìn)程包含 DBWn
、LGWR
执虹、CKPT
丝格、SMON
、PMON
碴萧、RECO
乙嘀、ARCn
、QUNn
及其他一些后臺進(jìn)程破喻。
Oracle數(shù)據(jù)庫由數(shù)據(jù)庫
和實(shí)例
兩部分組成虎谢,一個實(shí)例總是擁有多個后臺進(jìn)程,且后臺進(jìn)程總是伴隨實(shí)例的啟動而啟動低缩。通過 V$BGPROCESS
視圖可以查看實(shí)例的所有后臺進(jìn)程的相關(guān)信息嘉冒。
圖為多進(jìn)程體系架構(gòu)下的Oracle實(shí)例的后臺進(jìn)程
SMON監(jiān)控進(jìn)程
SMON(System Monitor Process, 系統(tǒng)監(jiān)控進(jìn)程)
主要負(fù)責(zé)實(shí)例啟動(Instance Startup)階段的實(shí)例恢復(fù)(Instance Recovery)。同時咆繁,還負(fù)責(zé)清理內(nèi)存中不再使用的臨時區(qū)段(temporary segments),并合并由字典管理的表空間中的連續(xù)的空閑數(shù)據(jù)塊顶籽。
在實(shí)例運(yùn)行過程中玩般,因?yàn)槲募x取(file-read)或數(shù)據(jù)文件離線(offline)所產(chǎn)生數(shù)據(jù)庫的異常,這將導(dǎo)致在實(shí)例進(jìn)行恢復(fù)時所有唄中斷的事務(wù)都會被忽略掉礼饱。而這些被忽略的異常將會通過SMON
進(jìn)程啟動時在表空間中或文件重新在線后進(jìn)行恢復(fù)坏为。
SMON 是一個周期性執(zhí)行的進(jìn)程,在實(shí)例運(yùn)行過程中镊绪,SMON 后臺進(jìn)程會被定期喚醒匀伏,并且其他進(jìn)程需要時也可以調(diào)用SMON進(jìn)程。
在一些實(shí)時應(yīng)用集群(例如蝴韭,Oracle RAC)中够颠,一個實(shí)例的SMON可以為故障的CPU或?qū)嵗M(jìn)行故障恢復(fù)。
-
主要功能
- 系統(tǒng)啟動階段的實(shí)例恢復(fù)
- 清理不再使用的臨時區(qū)段
- 合并表空間中連續(xù)區(qū)域的空閑數(shù)據(jù)塊
- 安裝/打開數(shù)據(jù)庫
- 恢復(fù)被異常中斷的事務(wù)(表空間/數(shù)據(jù)文件等恢復(fù)正常時)
PMON監(jiān)控進(jìn)程
PMON(Process Monitor Process, 進(jìn)程監(jiān)控進(jìn)程)
負(fù)責(zé)清理內(nèi)存中存儲區(qū)域(數(shù)據(jù)庫高速緩沖區(qū)榄鉴,Database Buffer Cache)中的緩存并釋放用戶進(jìn)程正在使用的資源履磨。并且在用戶進(jìn)程異常退出后進(jìn)行恢復(fù)操作蛉抓。
與SMON相同,PMON同樣是一個周期性的后臺監(jiān)控進(jìn)程剃诅。PMON后臺進(jìn)程會定期檢查實(shí)例中的調(diào)度進(jìn)程和用戶進(jìn)程是否正常巷送,當(dāng)監(jiān)控進(jìn)程檢查到非正常退出的進(jìn)程后,PMON進(jìn)程會嘗試重啟該進(jìn)程矛辕,但是被Oracle標(biāo)記/終止的進(jìn)程則PMON不會嘗試去啟動這些進(jìn)程笑跛。
PMON進(jìn)程會被周期性的喚醒,并且當(dāng)其他進(jìn)程需要時可以調(diào)用/喚醒PMON后臺進(jìn)程聊品。
當(dāng)PMON進(jìn)程異常退出時飞蹂,數(shù)據(jù)庫/實(shí)例也會發(fā)生崩潰并退出,直到PMON后臺進(jìn)程恢復(fù)服務(wù)后杨刨,數(shù)據(jù)庫/實(shí)例方可提供正常服務(wù)晤柄。
-
主要功能
- 釋放用戶進(jìn)程所持有的資源
- 清理內(nèi)存中不被使用的緩存信息
- 將數(shù)據(jù)庫服務(wù)注冊到監(jiān)聽(TNS)中
- 監(jiān)控后臺核心進(jìn)程(恢復(fù)異常的核心進(jìn)程)