進程結構
進程是操作系統中的一種機制,它可執行一系列的操作步。在有些操作系統中使用作業(JOB)或任務(TASK)的術語。一個進程通常有它自己的專用存儲區。ORACLE進程的體系結構設計使性能最大。
ORACLE實例有兩種類型:單進程實例和多進程實例。
單進程ORACLE(又稱單用ORACLE)是一種數據庫系統,一個進程執行全部ORACLE代碼。由於ORACLE部分和客戶應用程序不能分別以進程執行,所以ORACLE的代碼和用戶的數據庫應用是單個進程執行。
在單進程環境下的ORACLE 實例,僅允許一個用戶可存取。例如在MS-DOS上運行ORACLE 。
多進程ORACLE實例(又稱多用戶ORACLE)使用多個進程來執行ORACLE的不同部分 ,對於每一個連接的用戶都有一個進程。
在多進程系統中,進程分為兩類:用戶進程和ORACLE進程。當一用戶運行一應用程序,如PRO*C程序或一個ORACLE工具(如SQL*PLUS),為用戶運行的應用建立一個用戶進程。ORACLE進程又分為兩類:服務器進程和後台進程。服務器進程用於
處理連接到該實例的用戶進程的請求。當應用和ORACELE是在同一台機器上運行,而不再通過網絡,一般將用戶進程和它相應的服務器進程組合成單個的進程,可降低系統開銷。然而,當應用和ORACLE運行在不同的機器上時,用戶進程經過一個分離服務器進程與ORACLE通信。它可執行下列任務:
對應用所發出的SQL語句進行語法分析和執行。
從磁盤(數據文件)中讀入必要的數據塊到SGA的共享數據庫緩沖區(該塊不在緩沖區時)。
將結果返回給應用程序處理。
系統為了使性能最好和協調多個用戶,在多進程系統中使用一些附加進程,稱為後台進程。在許多操作系統中,後台進程是在實例啟動時自動地建立。一個ORACLE實例可以有許多後台進程,但它們不是一直存在。後台進程的名字為:
DBWR 數據庫寫入程序;
LGWR 日志寫入程序;
CKPT 檢查點;
SMON 系統監控;
PMON 進程監控;
ARCH 歸檔;
RECO 恢復;
LCKn 封鎖;
Dnnn 調度進程;
Snnn 服務器。
每個後台進程與ORACLE數據庫的不同部分交互。
下面對後台進程的功能作簡單介紹:
DBWR進程:該進程執行將緩沖區寫入數據文件,是負責緩沖存儲區管理的一個ORACLE後台進程。當緩沖區中的一緩沖區被修改,它被標志為“弄髒”,DBWR的主要任務是將“弄髒”的緩沖區寫入磁盤,使緩沖區保持“干淨”。由於緩沖存儲區的緩沖區填入數據庫或被用戶進程弄髒,未用的緩沖區的數目減少。當未用的緩沖區下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區時無法找到未用的緩沖區時,DBWR將管理緩沖存儲區,使用戶進程總可得到未用的緩沖區。
ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內存中的數據塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄髒的緩沖區寫入磁盤:
當一個服務器進程將一緩沖區移入“弄髒”表,該弄髒表達到臨界長度時,該服務進程將通知DBWR進行寫。該臨界長度是為參數DB-BLOCK-WRITE-BATCH的值的一半。
當一個服務器進程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區時,沒有查到未用的緩沖區,它停止查找並通知DBWR進行寫。出現超時(每次3秒),DBWR 將通知本身。當出現檢查點時,LGWR將通知DBWR.在前兩種情況下,DBWR將弄髒表中的塊寫入磁盤,每次可寫的塊數由初始化參數DB-BLOCK-WRITE-BATCH所指定。如果弄髒表中沒有該參數指定塊數的緩沖區,DBWR從LUR表中查找另外一個弄髒緩沖區。