ORACLE進程
ORACLE 客戶和伺服器互動過程中的進程分為使用者進程和 ORACLE 進程。當一用戶執行 ORACLE 客戶應用程序,如 PRO*C 程式或一個 ORACLE 工具(如SQL*PLUS),為使用者執行的應用程式建立使用者程序。 ORACLE進程又分為兩類:伺服器進程和後台進程。伺服器進程用於處理連接到該實例的使用者進程的請求。
當應用程式和ORACLE是在同一台機器上運行,而不再透過網絡,一般將用戶進程和它相應的伺服器進程組合成單一的進程,可降低系統開銷。然而,當應用程式和ORACLE運行在不同的機器上時,使用者進程會經過一個分離伺服器進程與ORACLE通訊。它可執行下列任務:
(1) 對應用所發出的SQL語句進行語法分析與執行
(2) 從磁碟資料檔案中讀入必要的資料區塊到SGA的共用資料庫緩衝區(該區塊不在緩衝區時)
(3) 將結果回傳給應用程式處理。
系統為了讓效能最好且協調多個用戶,在多進程系統中使用一些附加進程,稱為後台進程。在許多作業系統中,後台程序是在實例啟動時自動建立。
一個ORACLE實例有多個後台進程,分別為:DBWR(資料庫寫入進程)、LGWR(日誌寫入進程)、CKPT(檢查點進程)、SMON(系統監控進程)、PMON(進程監控進程)、ARCH(歸檔進程)、RECO(恢復進程)。每個後台進程與ORACLE資料庫的不同部分交互,其中前5個進程是必須的,後2個進程是可選的。
下面對後台進程的功能作簡單介紹。
1. DBWR進程
該進程的作用是將緩衝區寫入資料文件,是負責緩衝儲存區管理的一個ORACLE後台進程。當緩衝區中的一緩衝區被修改,它被標誌為“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁碟,使緩衝區保持“乾淨”。
由於緩衝儲存區的緩衝區填入資料庫或被使用者程序弄髒,未使用的緩衝區的數目減少。當未使用的緩衝區下降到很少,以致用戶進程要從磁碟讀入區塊到記憶體存儲區時無法找到未用的緩衝區時,DBWR將管理緩衝存儲區,使用
戶進程總可得到未用的緩衝區。
ORACLE採用LRU(LEAST RECENTLY USED)演算法(最近最少使用演算法)保持記憶體中的資料區塊是最近使用的,使I/O最小。在下列情況下DBWR 要將弄髒的緩衝區寫入磁碟。
(1) 當一個伺服器程序將一緩衝區移入「弄髒」表,該弄髒表達到臨界長度時,該服務程序將通知 DBWR 進行寫入。此臨界長度是為參數DB-BLOCK-WRITE-BATCH的值的一半。
(2) 當一個伺服器程序在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未使用的緩衝區,它停止尋找並通知DBWR進行寫入。
(3) 出現逾時(每次3秒),DBWR 將通知本身。
(4) 當出現檢查點時,LGWR會通知DBWR。
在前兩種情況下,DBWR將弄髒表中的區塊寫入磁碟,每次可寫入的區塊數由初始化參數 DB-BLOCK-WRITE-BATCH 指定。如果弄髒表中沒有該參數指定區塊數的緩衝區,DBWR會從LUR表中尋找另一個弄髒緩衝區。
如果DBWR在三秒內未活動,則出現逾時。在這種情況下DBWR對LRU表查找指定數目的緩衝區,將所找到任何弄髒緩衝區寫入磁碟。如果資料庫空運轉,DBWR最終將全部緩衝區儲存區寫入磁碟。
在出現檢查點時,LGWR指定一修改緩衝區表必須寫入磁碟。 DBWR將指定的緩衝區寫入磁碟。
在有些平台上,一個實例可有多個DBWR。在這樣的實例中,有些區塊可寫入一磁碟,有些區塊可寫入其它磁碟。參數DB-WRITERS控制DBWR進程個數。
2. LGWR程序
該程序將日誌緩衝區寫入磁碟上的一個日誌文件,它是負責管理日誌緩衝區的一個 ORACLE 後台程序。 LGWR 程序將自上次寫入磁碟以來的全部日誌項目輸出。在下列情況下LGWR程序將日誌緩衝區內容寫入磁碟。
(1) 當使用者程序提交一事務時寫入提交記錄。
(2) 每三秒將日誌緩衝區輸出。
(3) 當日誌緩衝區的1/3已滿時將日誌緩衝區輸出。
(4) 當DBWR將修改緩衝區寫入磁碟時則將日誌緩衝區輸出。
LGWR進程同步地寫入活動的鏡像線上日誌檔案群組。如果群組中一個檔案被刪除或不可用,LGWR可繼續地寫入該群組的其它檔案。
日誌緩衝區是一個循環緩衝區。當LGWR將日誌緩衝區的日誌項目寫入日誌檔案後,伺服器程序可將新的日誌項目寫入到該日誌緩衝區。 LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項目。當一事務提交時,
被賦予一個系統修改號(SCN),它同事務日誌項目一起記錄在日誌中。
3. CKPT程序
當該程序被喚醒執行時,對全部資料檔的標題進行修改,指示該檢查點,並通知DBWR將髒資料塊寫入資料檔。
4. SMON程序
此程序的作用是,在ORACLE實例啟動時執行實例恢復,也負責清理不再使用的臨時段。
5. PMON進程
此進程在使用者進程發生故障時執行進程恢復,負責清理私人儲存區並釋放該進程所使用的資源。例如它要重設活動事務表的狀態,釋放封鎖,將該故障的程序的ID從活動行程表移去。
6. RECO進程
該進程是在具有分散式選項時所使用的進程,自動地解決在分散式事務中的故障。
7. ARCH進程
該進程將已填滿的線上日誌檔案拷貝到指定的儲存裝置。當日誌是為ARCHIVELOG使用方式、並可自動歸檔時ARCH進程才存在。
以上就是ORACLE流程內容,更多相關文章請關注PHP中文網(www.php.cn)!