進(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)程ORACLE(又稱單用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)程ORACLE實(shí)例(又稱多用戶ORACLE)使用多個(gè)進(jìn)程來執(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)行,而不再通過網(wǎng)絡(luò),一般將用戶進(jìn)程和它相應(yīng)的服務(wù)器進(jìn)程組合成單個(gè)的進(jìn)程,可降低系統(tǒng)開銷。然而,當(dāng)應(yīng)用和ORACLE運(yùn)行在不同的機(jī)器上時(shí),用戶進(jìn)程經(jīng)過一個(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ù)寫入程序;
LGWR 日志寫入程序;
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ū)寫入數(shù)據(jù)文件,是負(fù)責(zé)緩沖存儲(chǔ)區(qū)管理的一個(gè)ORACLE后臺(tái)進(jìn)程。當(dāng)緩沖區(qū)中的一緩沖區(qū)被修改,它被標(biāo)志為“弄臟”,DBWR的主要任務(wù)是將“弄臟”的緩沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈”。由于緩沖存儲(chǔ)區(qū)的緩沖區(qū)填入數(shù)據(jù)庫(kù)或被用戶進(jìn)程弄臟,未用的緩沖區(qū)的數(shù)目減少。當(dāng)未用的緩沖區(qū)下降到很少,以致用戶進(jìn)程要從磁盤讀入塊到內(nèi)存存儲(chǔ)區(qū)時(shí)無法找到未用的緩沖區(qū)時(shí),DBWR將管理緩沖存儲(chǔ)區(qū),使用戶進(jìn)程總可得到未用的緩沖區(qū)。
ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:
當(dāng)一個(gè)服務(wù)器進(jìn)程將一緩沖區(qū)移入“弄臟”表,該弄臟表達(dá)到臨界長(zhǎng)度時(shí),該服務(wù)進(jìn)程將通知DBWR進(jìn)行寫。該臨界長(zhǎng)度是為參數(shù)DB-BLOCK-WRITE-BATCH的值的一半。
當(dāng)一個(gè)服務(wù)器進(jìn)程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區(qū)時(shí),沒有查到未用的緩沖區(qū),它停止查找并通知DBWR進(jìn)行寫。出現(xiàn)超時(shí)(每次3秒),DBWR 將通知本身。當(dāng)出現(xiàn)檢查點(diǎn)時(shí),LGWR將通知DBWR.在前兩種情況下,DBWR將弄臟表中的塊寫入磁盤,每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK-WRITE-BATCH所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個(gè)弄臟緩沖區(qū)。
新聞熱點(diǎn)
疑難解答
圖片精選