時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
進(jìn)程結(jié)構(gòu)
進(jìn)程是操作系統(tǒng)中的一種機(jī)制,它可執(zhí)行一系列的操作步。在有些操作系統(tǒng)中使用作業(yè)(JOB)或任務(wù)(TASK)的術(shù)語(yǔ)。一個(gè)進(jìn)程通常有它自己的專用存儲(chǔ)區(qū)。ORACLE進(jìn)程的體系結(jié)構(gòu)設(shè)計(jì)使性能最大。
ORACLE實(shí)例有兩種類型:?jiǎn)芜M(jìn)程實(shí)例和多進(jìn)程實(shí)例。
單進(jìn)程O(píng)RACLE(又稱單用ORACLE)是一種數(shù)據(jù)庫(kù)系統(tǒng),一個(gè)進(jìn)程執(zhí)行全部ORACLE代碼。由于ORACLE部分和客戶應(yīng)用程序不能分別以進(jìn)程執(zhí)行,所以O(shè)RACLE的代碼和用戶的數(shù)據(jù)庫(kù)應(yīng)用是單個(gè)進(jìn)程執(zhí)行。
在單進(jìn)程環(huán)境下的ORACLE 實(shí)例,僅允許一個(gè)用戶可存取。例如在MS-DOS上運(yùn)行ORACLE 。
多進(jìn)程O(píng)RACLE實(shí)例(又稱多用戶ORACLE)使用多個(gè)進(jìn)程來(lái)執(zhí)行ORACLE的不同部分 ,對(duì)于每一個(gè)連接的用戶都有一個(gè)進(jìn)程。
在多進(jìn)程系統(tǒng)中,進(jìn)程分為兩類:用戶進(jìn)程和ORACLE進(jìn)程。當(dāng)一用戶運(yùn)行一應(yīng)用程序,如PRO*C程序或一個(gè)ORACLE工具(如SQL*PLUS),為用戶運(yùn)行的應(yīng)用建立一個(gè)用戶進(jìn)程。ORACLE進(jìn)程又分為兩類:服務(wù)器進(jìn)程和后臺(tái)進(jìn)程。服務(wù)器進(jìn)程用于
處理連接到該實(shí)例的用戶進(jìn)程的請(qǐng)求。當(dāng)應(yīng)用和ORACELE是在同一臺(tái)機(jī)器上運(yùn)行,而不再通過(guò)網(wǎng)絡(luò),一般將用戶進(jìn)程和它相應(yīng)的服務(wù)器進(jìn)程組合成單個(gè)的進(jìn)程,可降低系統(tǒng)開(kāi)銷。然而,當(dāng)應(yīng)用和ORACLE運(yùn)行在不同的機(jī)器上時(shí),用戶進(jìn)程經(jīng)過(guò)一個(gè)分離服務(wù)器進(jìn)程與ORACLE通信。它可執(zhí)行下列任務(wù):
對(duì)應(yīng)用所發(fā)出的SQL語(yǔ)句進(jìn)行語(yǔ)法分析和執(zhí)行。
從磁盤(數(shù)據(jù)文件)中讀入必要的數(shù)據(jù)塊到SGA的共享數(shù)據(jù)庫(kù)緩沖區(qū)(該塊不在緩沖區(qū)時(shí))。
將結(jié)果返回給應(yīng)用程序處理。
系統(tǒng)為了使性能最好和協(xié)調(diào)多個(gè)用戶,在多進(jìn)程系統(tǒng)中使用一些附加進(jìn)程,稱為后臺(tái)進(jìn)程。在許多操作系統(tǒng)中,后臺(tái)進(jìn)程是在實(shí)例啟動(dòng)時(shí)自動(dòng)地建立。一個(gè)ORACLE實(shí)例可以有許多后臺(tái)進(jìn)程,但它們不是一直存在。后臺(tái)進(jìn)程的名字為:
DBWR 數(shù)據(jù)庫(kù)寫(xiě)入程序;
LGWR 日志寫(xiě)入程序;
CKPT 檢查點(diǎn);
SMON 系統(tǒng)監(jiān)控;
PMON 進(jìn)程監(jiān)控;
ARCH 歸檔;
RECO 恢復(fù);
LCKn 封鎖;
Dnnn 調(diào)度進(jìn)程;
Snnn 服務(wù)器。
每個(gè)后臺(tái)進(jìn)程與ORACLE數(shù)據(jù)庫(kù)的不同部分交互。
下面對(duì)后臺(tái)進(jìn)程的功能作簡(jiǎn)單介紹:
DBWR進(jìn)程:該進(jìn)程執(zhí)行將緩沖區(qū)寫(xiě)入數(shù)據(jù)文件,是負(fù)責(zé)緩沖存儲(chǔ)區(qū)管理的一個(gè)ORACLE后臺(tái)進(jìn)程。當(dāng)緩沖區(qū)中的一緩沖區(qū)被修改,它被標(biāo)志為"弄臟",DBWR的主要任務(wù)是將"弄臟"的緩沖區(qū)寫(xiě)入磁盤,使緩沖區(qū)保持"干凈"。由于緩沖存儲(chǔ)區(qū)的緩沖區(qū)填入數(shù)據(jù)庫(kù)或被用戶進(jìn)程弄臟,未用的緩沖區(qū)的數(shù)目減少。當(dāng)未用的緩沖區(qū)下降到很少,以致用戶進(jìn)程要從磁盤讀入塊到內(nèi)存存儲(chǔ)區(qū)時(shí)無(wú)法找到未用的緩沖區(qū)時(shí),DBWR將管理緩沖存儲(chǔ)區(qū),使用戶進(jìn)程總可得到未用的緩沖區(qū)。
ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫(xiě)入磁盤:
當(dāng)一個(gè)服務(wù)器進(jìn)程將一緩沖區(qū)移入"弄臟"表,該弄臟表達(dá)到臨界長(zhǎng)度時(shí),該服務(wù)進(jìn)程將通知DBWR進(jìn)行寫(xiě)。該臨界長(zhǎng)度是為參數(shù)DB-BLOCK-WRITE-BATCH的值的一半。
當(dāng)一個(gè)服務(wù)器進(jìn)程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區(qū)時(shí),沒(méi)有查到未用的緩沖區(qū),它停止查找并通知DBWR進(jìn)行寫(xiě)。出現(xiàn)超時(shí)(每次3秒),DBWR 將通知本身。當(dāng)出現(xiàn)檢查點(diǎn)時(shí),LGWR將通知DBWR.在前兩種情況下,DBWR將弄臟表中的塊寫(xiě)入磁盤,每次可寫(xiě)的塊數(shù)由初始化參數(shù)DB-BLOCK-WRITE-BATCH所指定。如果弄臟表中沒(méi)有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個(gè)弄臟緩沖區(qū)。
如果DBWR在三秒內(nèi)未活動(dòng),則出現(xiàn)超時(shí)。在這種情況下DBWR對(duì)LRU表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫(xiě)入磁盤。每當(dāng)出現(xiàn)超時(shí),DBWR查找一個(gè)新的緩沖區(qū)組。每次由DBWR查找的緩沖區(qū)的數(shù)目是為寢化參數(shù)DB-BLOCK-WRITE-BATCH的值的二倍。如果數(shù)據(jù)庫(kù)空運(yùn)轉(zhuǎn),DBWR最終將全部緩沖區(qū)存儲(chǔ)區(qū)寫(xiě)入磁盤。
在出現(xiàn)檢查點(diǎn)時(shí),LGWR指定一修改緩沖區(qū)表必須寫(xiě)入到磁盤。DBWR將指定的緩沖區(qū)寫(xiě)入磁盤。
在有些平臺(tái)上,一個(gè)實(shí)例可有多個(gè)DBWR。在這樣的實(shí)例中,一些塊可寫(xiě)入一磁盤,另一些塊可寫(xiě)入其它磁盤。參數(shù)DB-WRITERS控制DBWR進(jìn)程個(gè)數(shù)。
LGWR進(jìn)程:該進(jìn)程將日志緩沖區(qū)寫(xiě)入磁盤上的一個(gè)日志文件,它是負(fù)責(zé)管理日志緩沖區(qū)的一個(gè)ORACLE后臺(tái)進(jìn)程。LGWR進(jìn)程將自上次寫(xiě)入磁盤以來(lái)的全部日志項(xiàng)輸出,LGWR輸出:
當(dāng)用戶進(jìn)程提交一事務(wù)時(shí)寫(xiě)入一個(gè)提交記錄。
每三秒將日志緩沖區(qū)輸出。
當(dāng)日志緩沖區(qū)的1/3已滿時(shí)將日志緩沖區(qū)輸出。
當(dāng)DBWR將修改緩沖區(qū)寫(xiě)入磁盤時(shí)則將日志緩沖區(qū)輸出。
LGWR進(jìn)程同步地寫(xiě)入到活動(dòng)的鏡象在線日志文件組。如果組中一個(gè)文件被刪除或不可用,LGWR 可繼續(xù)地寫(xiě)入該組的其它文件。
日志緩沖區(qū)是一個(gè)循環(huán)緩沖區(qū)。當(dāng)LGWR將日志緩沖區(qū)的日志項(xiàng)寫(xiě)入日志文件后,服務(wù)器進(jìn)程可將新的日志項(xiàng)寫(xiě)入到該日志緩沖區(qū)。LGWR 通常寫(xiě)得很快,可確保日志緩沖區(qū)總有空間可寫(xiě)入新的日志項(xiàng)。
注意:有時(shí)候當(dāng)需要更多的日志緩沖區(qū)時(shí),LWGR在一個(gè)事務(wù)提交前就將日志項(xiàng)寫(xiě)出,而這些日志項(xiàng)僅當(dāng)在以后事務(wù)提交后才永久化。
ORACLE使用快速提交機(jī)制,當(dāng)用戶發(fā)出COMMIT語(yǔ)句時(shí),一個(gè)COMMIT記錄立即放入日志緩沖區(qū),但相應(yīng)的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時(shí)才將它們寫(xiě)入數(shù)據(jù)文件。當(dāng)一事務(wù)提交時(shí),被賦給一個(gè)系統(tǒng)修改號(hào)(SCN),它同事務(wù)日志項(xiàng)一
起記錄在日志中。由于SCN記錄在日志中,以致在并行服務(wù)器選項(xiàng)配置情況下,恢復(fù)操作可以同步。
CKPT進(jìn)程:該進(jìn)程在檢查點(diǎn)出現(xiàn)時(shí),對(duì)全部數(shù)據(jù)文件的標(biāo)題進(jìn)行修改,指示該檢查點(diǎn)。在通常的情況下,該任務(wù)由LGWR執(zhí)行。然而,如果檢查點(diǎn)明顯地降低系統(tǒng)性能時(shí),可使CKPT進(jìn)程運(yùn)行,將原來(lái)由LGWR進(jìn)程執(zhí)行的檢查點(diǎn)的工作分離出來(lái),由CKPT進(jìn)程實(shí)現(xiàn)。對(duì)于許多應(yīng)用情況,CKPT進(jìn)程是不必要的。只有當(dāng)數(shù)據(jù)庫(kù)有許多數(shù)據(jù)文件,LGWR在檢查點(diǎn)時(shí)明顯地降低性能才使CKPT運(yùn)行。CKPT進(jìn)程不將塊寫(xiě)入磁盤,該工作是由DBWR完成的。
初始化參數(shù)CHECKPOINT-PROCESS控制CKPT進(jìn)程的使能或使不能。缺省時(shí)為FALSE,即為使不能。
SMON進(jìn)程:該進(jìn)程實(shí)例啟動(dòng)時(shí)執(zhí)行實(shí)例恢復(fù),還負(fù)責(zé)清理不再使用的臨時(shí)段。在具有并行服務(wù)器選項(xiàng)的環(huán)境下,SMON對(duì)有故障CPU或?qū)嵗M(jìn)行實(shí)例恢復(fù)。SMON進(jìn)程有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時(shí)可以被調(diào)用。
PMON進(jìn)程:該進(jìn)程在用戶進(jìn)程出現(xiàn)故障時(shí)執(zhí)行進(jìn)程恢復(fù),負(fù)責(zé)清理內(nèi)存儲(chǔ)區(qū)和釋放該進(jìn)程所使用的資源。例:它要重置活動(dòng)事務(wù)表的狀態(tài),釋放封鎖,將該故障的進(jìn)程的ID從活動(dòng)進(jìn)程表中移去。PMON還周期地檢查調(diào)度進(jìn)程(DISPATCHER)和服務(wù)器進(jìn)程的狀態(tài),如果已死,則重新啟動(dòng)(不包括有意刪除的進(jìn)程)。
PMON有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時(shí)可以被調(diào)用。
RECO進(jìn)程:該進(jìn)程是在具有分布式選項(xiàng)時(shí)所使用的一個(gè)進(jìn)程,自動(dòng)地解決在分布式事務(wù)中的故障。一個(gè)結(jié)點(diǎn)RECO后臺(tái)進(jìn)程自動(dòng)地連接到包含有懸而未決的分布式事務(wù)的其它數(shù)據(jù)庫(kù)中,RECO自動(dòng)地解決所有的懸而不決的事務(wù)。任何相應(yīng)于已處理的懸而不決的事務(wù)的行將從每一個(gè)數(shù)據(jù)庫(kù)的懸掛事務(wù)表中刪去。
當(dāng)一數(shù)據(jù)庫(kù)服務(wù)器的RECO后臺(tái)進(jìn)程試圖建立同一遠(yuǎn)程服務(wù)器的通信,如果遠(yuǎn)程服務(wù)器是不可用或者網(wǎng)絡(luò)連接不能建立時(shí),RECO自動(dòng)地在一個(gè)時(shí)間間隔之后再次連接。
RECO后臺(tái)進(jìn)程僅當(dāng)在允許分布式事務(wù)的系統(tǒng)中出現(xiàn),而且DISTRIBUTED – TRANSACTIONS參數(shù)是大于0。
ARCH進(jìn)程:該進(jìn)程將已填滿的在線日志文件拷貝到指定的存儲(chǔ)設(shè)備。當(dāng)日志是為ARCHIVELOG使用方式、并可自動(dòng)地歸檔時(shí)ARCH進(jìn)程才存在。
LCKn進(jìn)程:是在具有并行服務(wù)器選件環(huán)境下使用,可多至10個(gè)進(jìn)程(LCK0,LCK1……,LCK9),用于實(shí)例間的封鎖。
Dnnn進(jìn)程(調(diào)度進(jìn)程):該進(jìn)程允許用戶進(jìn)程共享有限的服務(wù)器進(jìn)程(SERVER PROCESS)。沒(méi)有調(diào)度進(jìn)程時(shí),每個(gè)用戶進(jìn)程需要一個(gè)專用服務(wù)進(jìn)程(DEDICATEDSERVER PROCESS)。對(duì)于多線索服務(wù)器(MULTI-THREADED SERVER)可支持多個(gè)用戶進(jìn)程。如果在系統(tǒng)中具有大量用戶,多線索服務(wù)器可支持大量用戶,尤其在客戶_服務(wù)器環(huán)境中。
在一個(gè)數(shù)據(jù)庫(kù)實(shí)例中可建立多個(gè)調(diào)度進(jìn)程。對(duì)每種網(wǎng)絡(luò)協(xié)議至少建立一個(gè)調(diào)度進(jìn)程。數(shù)據(jù)庫(kù)管理員根據(jù)操作系統(tǒng)中每個(gè)進(jìn)程可連接數(shù)目的限制決定啟動(dòng)的調(diào)度程序的最優(yōu)數(shù),在實(shí)例運(yùn)行時(shí)可增加或刪除調(diào)度進(jìn)程。多線索服務(wù)器需要SQL*NET版本2或更后的版本。在多線索服務(wù)器的配置下,一個(gè)網(wǎng)絡(luò)接收器進(jìn)程等待客戶應(yīng)用連接請(qǐng)求,并將每一個(gè)發(fā)送到一個(gè)調(diào)度進(jìn)程。如果不能將客戶應(yīng)用連接到一調(diào)度
進(jìn)程時(shí),網(wǎng)絡(luò)接收器進(jìn)程將啟動(dòng)一個(gè)專用服務(wù)器進(jìn)程。該網(wǎng)絡(luò)接收器進(jìn)程不是ORACLE實(shí)例的組成部分,它是處理與ORACLE有關(guān)的網(wǎng)絡(luò)進(jìn)程的組成部分。在實(shí)例啟動(dòng)時(shí),該網(wǎng)絡(luò)接收器被打開(kāi),為用戶連接到ORACLE建立一通信路徑,然后每一個(gè)調(diào)度進(jìn)程把連接請(qǐng)求的調(diào)度進(jìn)程的地址給予于它的接收器。當(dāng)一個(gè)用戶進(jìn)程作連
接請(qǐng)求時(shí),網(wǎng)絡(luò)接收器進(jìn)程分析請(qǐng)求并決定該用戶是否可使用一調(diào)度進(jìn)程。如果是,該網(wǎng)絡(luò)接收器進(jìn)程返回該調(diào)度進(jìn)程的地址,之后用戶進(jìn)程直接連接到該調(diào)度進(jìn)程。有些用戶進(jìn)程不能調(diào)度進(jìn)程通信(如果使用SQL*NET以前的版本的用戶),網(wǎng)絡(luò)接收器進(jìn)程不能將如此用戶連接到一調(diào)度進(jìn)程。在這種情況下,網(wǎng)絡(luò)接收器建立一個(gè)專用服務(wù)器進(jìn)程,建立一種合適的連接。
關(guān)鍵詞標(biāo)簽:Oracle進(jìn)程結(jié)構(gòu)
相關(guān)閱讀
熱門文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索
人氣排行 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法