進(jìn)程結(jié)構(gòu)
進(jìn)程是操作系統(tǒng)中的一種機(jī)制,它可執(zhí)行一系列的操作步。在有些操作系統(tǒng)中使用作業(yè)(JOB)或任務(wù)(TASK)的術(shù)語。一個進(jìn)程通常有它自己的專用存儲區(qū)。ORACLE進(jìn)程的體系結(jié)構(gòu)設(shè)計使性能最大。
ORACLE實(shí)例有兩種類型:單進(jìn)程實(shí)例和多進(jìn)程實(shí)例。
單進(jìn)程ORACLE(又稱單用ORACLE)是一種數(shù)據(jù)庫系統(tǒng),一個進(jìn)程執(zhí)行全部ORACLE代碼。由于ORACLE部分和客戶應(yīng)用程序不能分別以進(jìn)程執(zhí)行,所以O(shè)RACLE的代碼和用戶的數(shù)據(jù)庫應(yīng)用是單個進(jìn)程執(zhí)行。
在單進(jìn)程環(huán)境下的ORACLE 實(shí)例,僅允許一個用戶可存取。例如在MS-DOS上運(yùn)行ORACLE 。
多進(jìn)程ORACLE實(shí)例(又稱多用戶ORACLE)使用多個進(jìn)程來執(zhí)行ORACLE的不同部分 ,對于每一個連接的用戶都有一個進(jìn)程。
在多進(jìn)程系統(tǒng)中,進(jìn)程分為兩類:用戶進(jìn)程和ORACLE進(jìn)程。當(dāng)一用戶運(yùn)行一應(yīng)用程序,如PRO*C程序或一個ORACLE工具(如SQL*PLUS),為用戶運(yùn)行的應(yīng)用建立一個用戶進(jìn)程。ORACLE進(jìn)程又分為兩類:服務(wù)器進(jìn)程和后臺進(jìn)程。服務(wù)器進(jìn)程用于
處理連接到該實(shí)例的用戶進(jìn)程的請求。當(dāng)應(yīng)用和ORACELE是在同一臺機(jī)器上運(yùn)行,而不再通過網(wǎng)絡(luò),一般將用戶進(jìn)程和它相應(yīng)的服務(wù)器進(jìn)程組合成單個的進(jìn)程,可降低系統(tǒng)開銷。然而,當(dāng)應(yīng)用和ORACLE運(yùn)行在不同的機(jī)器上時,用戶進(jìn)程經(jīng)過一個分離服務(wù)器進(jìn)程與ORACLE通信。它可執(zhí)行下列任務(wù):
對應(yīng)用所發(fā)出的SQL語句進(jìn)行語法分析和執(zhí)行。
從磁盤(數(shù)據(jù)文件)中讀入必要的數(shù)據(jù)塊到SGA的共享數(shù)據(jù)庫緩沖區(qū)(該塊不在緩沖區(qū)時)。
將結(jié)果返回給應(yīng)用程序處理。
系統(tǒng)為了使性能最好和協(xié)調(diào)多個用戶,在多進(jìn)程系統(tǒng)中使用一些附加進(jìn)程,稱為后臺進(jìn)程。在許多操作系統(tǒng)中,后臺進(jìn)程是在實(shí)例啟動時自動地建立。一個ORACLE實(shí)例可以有許多后臺進(jìn)程,但它們不是一直存在。后臺進(jìn)程的名字為:
DBWR 數(shù)據(jù)庫寫入程序;
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ù)器。
每個后臺進(jìn)程與ORACLE數(shù)據(jù)庫的不同部分交互。
下面對后臺進(jìn)程的功能作簡單介紹:
DBWR進(jìn)程:該進(jìn)程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負(fù)責(zé)緩沖存儲區(qū)管理的一個ORACLE后臺進(jìn)程。當(dāng)緩沖區(qū)中的一緩沖區(qū)被修改,它被標(biāo)志為“弄臟”,DBWR的主要任務(wù)是將“弄臟”的緩沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈”。由于緩沖存儲區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被用戶進(jìn)程弄臟,未用的緩沖區(qū)的數(shù)目減少。當(dāng)未用的緩沖區(qū)下降到很少,以致用戶進(jìn)程要從磁盤讀入塊到內(nèi)存存儲區(qū)時無法找到未用的緩沖區(qū)時,DBWR將管理緩沖存儲區(qū),使用戶進(jìn)程總可得到未用的緩沖區(qū)。
ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:
當(dāng)一個服務(wù)器進(jìn)程將一緩沖區(qū)移入“弄臟”表,該弄臟表達(dá)到臨界長度時,該服務(wù)進(jìn)程將通知DBWR進(jìn)行寫。該臨界長度是為參數(shù)DB-BLOCK-WRITE-BATCH的值的一半。
當(dāng)一個服務(wù)器進(jìn)程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區(qū)時,沒有查到未用的緩沖區(qū),它停止查找并通知DBWR進(jìn)行寫。出現(xiàn)超時(每次3秒),DBWR 將通知本身。當(dāng)出現(xiàn)檢查點(diǎn)時,LGWR將通知DBWR.在前兩種情況下,DBWR將弄臟表中的塊寫入磁盤,每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK-WRITE-BATCH所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個弄臟緩沖區(qū)。
新聞熱點(diǎn)
疑難解答
圖片精選