由淺入深講解Oracle數(shù)據(jù)庫(kù)進(jìn)程的相關(guān)概念
Database buffer cache主要用于存儲(chǔ)數(shù)據(jù)文件中的數(shù)據(jù)塊
數(shù)據(jù)庫(kù)高速緩存的數(shù)據(jù)塊是高速緩存與數(shù)據(jù)文件進(jìn)行信息交換的基本單位。在Oracle數(shù)據(jù)庫(kù)8i以前,數(shù)據(jù)塊大小只有一種,而Oracle數(shù)據(jù)庫(kù)9i以后支持2K,4K,8KB,16KB及32KB五種。
用命令SQL>SHOW PARAMETER DB可以顯示當(dāng)前數(shù)據(jù)庫(kù)的BUFFER CACHE
數(shù)據(jù)庫(kù)緩存和特點(diǎn)如下:
<1>.根據(jù)最近最少使用LRU.
<2>. 由DB_BLOCK_SIZE來(lái)指定大小.
<3>.ORACLE使用時(shí)是以塊大小為單位進(jìn)行數(shù)據(jù)存取的.
還包含以下一些獨(dú)立的子緩存:
<1>.DB_CACHE_SIZE.
<2>.DB_KEEP_CACHE_SIZE.
<3>.DB_RECYCLE_CACHE_SIZE.
注:可以用Alter system set db_cache_advice=on;設(shè)置成根據(jù)系統(tǒng)的建議來(lái)指定大小。
REDO LOG FILE主要是用于重做日志
用命令SQL>SHOW PARAMETER LOG_BUFFER。
SQL>ALTER SYSTEM SET LOG_BUFFER_SIZE=60M。
用來(lái)顯示或修改重做日志緩沖區(qū)的一些信息。
命令SQL>achive log list 可以查看數(shù)據(jù)庫(kù)當(dāng)前的歸檔模式。
LARGE POOL:
與JAVA POOL一樣,都是作為系統(tǒng)可選的內(nèi)存結(jié)構(gòu),由SGA來(lái)配置。
JAVA POOL:
當(dāng)安裝或使用JAVA時(shí)才用到.
ORACLE內(nèi)存進(jìn)程包括兩個(gè),一個(gè)是SGA,一個(gè)是PGA.
(1).SGA在ORACLE實(shí)例啟動(dòng)時(shí)分配,是ORACLE實(shí)例的一個(gè)基本組件.
(2).PGA是在當(dāng)服務(wù)器進(jìn)程啟動(dòng)時(shí)分配的.
進(jìn)程結(jié)構(gòu):
<1>.USER PROCESS.用于用戶與ORACLE SERVER交互的進(jìn)程.
USER PROCESS必須與ORACLE建立連接后才可使用,不可與ORACLE SERVER交互.
<2>.SERVER PROCESS.
SERVER PROCESS在用戶與服務(wù)之間建立連接后,為執(zhí)行用戶命令的一個(gè)進(jìn)程.
<3>.BACKGROUND PROCESS.
后臺(tái)進(jìn)程:DATABASE WRITER (DBWn)用來(lái)把DATA BUFFER CACHE中的臟數(shù)據(jù)寫回到數(shù)據(jù)庫(kù)中.
(注:臟數(shù)據(jù)是被改變的數(shù)據(jù).)
在以下情況下它會(huì)寫數(shù)據(jù)庫(kù):
<1>.在發(fā)生CHECKPOINT同步.
<2>.臟數(shù)據(jù)達(dá)到閥值.
<3>.DATABASE BUFFER CACHE 自由空間太少了.
<4>.TIMEOUT (3秒鐘.)
<5>.RAC PING REQUEST.
<6>.TABLESPACE OFFLINE.
<7>.TABLESPACE READONLY.
<8>.TABLE DROP OR TABLE TRUNCATE (表數(shù)據(jù)清空或表結(jié)構(gòu)刪除).
<9>.TABLESPACE BEGIN BACKUP.
由SGA (包含DATABASE BUFFER CACHE,BACKGROUND PROCESS)-----> [ DBWn ]----> {data files,
control files, redo log file} ---->由此過(guò)程改變數(shù)據(jù)庫(kù)中的數(shù)據(jù).
LOG WRITER (LGWR) 日志寫進(jìn)程
在Oracle環(huán)境中
<1>.當(dāng)COMMIT的時(shí)候.
<2>.當(dāng)三分之一空間滿時(shí).
<3>.當(dāng)日志有1MB需要重做時(shí).
<4>.每3秒
<5>.BEFORE DBWn WRITES.(寫數(shù)據(jù)前先寫日志).
REDO LOG BUFFER----->LGWR--->DBWn
|--------------------------------------> REDO LOG FILES
SYSTEM MONITOR (SMON)系統(tǒng)監(jiān)控進(jìn)程
主要任務(wù):
(1).啟動(dòng)過(guò)程(假定DATABASE重啟時(shí))如果需要RECOVERY,則此進(jìn)程會(huì)負(fù)責(zé)打開數(shù)據(jù)庫(kù),及回滾沒(méi)有
提交的事務(wù);以及rolls forward changes in the redo logs..這些統(tǒng)稱為:instance recovery.
(2).對(duì)每3秒就對(duì)系統(tǒng)自由空間的整理.(COALESCES FREE SPACE EVER 3 SEC.)
(3).清空臨時(shí)段空間(DEALLOCATES TEMPORARY SEGMENTS).
這個(gè)過(guò)程也是在系統(tǒng)啟動(dòng)過(guò)程中完成的.
PROCESS MONITOR (PMON) 進(jìn)程監(jiān)控進(jìn)程
主要用于回滾異常終止的或被用戶強(qiáng)制終止的事務(wù).
<1>.rolling back the transaction.
<2>.releasing locks.釋放鎖.
<3>.releasing other resources.
<4>.restarts dead dispatchers.重啟死掉的調(diào)度器.(在共享服務(wù)器中用).
PMON (:Include in SGA)----------------------->PGA
CHECKPOINT (CKPT) 檢查點(diǎn)進(jìn)程
用來(lái)在數(shù)據(jù)庫(kù)里實(shí)現(xiàn)同步,實(shí)現(xiàn)之前會(huì)強(qiáng)制將臟數(shù)據(jù)從內(nèi)在里寫到物理文件里.
<1>.會(huì)啟動(dòng)DBWn來(lái)寫臟數(shù)據(jù)(SIGNALLING DBWn at CKPT.)
<2>.完后會(huì)更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即
CHECKPOINT的信息.
<3>.在ORACLE中,正常情況下,所有文件必須同期性地同步;靠CHECKPOINT來(lái)完成.
CKPT(作為后臺(tái)進(jìn)程包含在實(shí)例中)------------------DATABASE (data files,control files,redo log files.) | |______DBWn |________LGWR
Archive PROCESS (ARCn) :歸檔進(jìn)程(可選進(jìn)程),當(dāng)設(shè)置歸檔模式后,可用來(lái)自動(dòng)備份在線日志,(歸檔日志是重做日志的備份.)
<1>.Automatically archives online redo logs when archiverlog mode is set.
(設(shè)置歸檔模式后,將自動(dòng)備份在線日志)
在處理SQL語(yǔ)句時(shí),注意以下過(guò)程:
<1>.用以下進(jìn)程連接到實(shí)例.
------------------用戶進(jìn)程(USER PROCESS).
------------------服務(wù)器進(jìn)程(SERVER PROCESS).
<2>.Oracle服務(wù)器進(jìn)程組件的使用依賴于SQL語(yǔ)句的種類.
[1].查詢語(yǔ)句會(huì)返回行.
[2].DML語(yǔ)句會(huì)記錄這種改變.
[3].COMMIT保證了事務(wù)的RECOVERY.
<3>.并不是所有的SQL語(yǔ)句中所有的后臺(tái)進(jìn)程都會(huì)參與.
結(jié)論:
Oracle Server. Oracle服務(wù)器進(jìn)程包含一些文件,進(jìn)程和內(nèi)存,在執(zhí)行一條SQL語(yǔ)句時(shí),并非所有這些都會(huì)用上,有些進(jìn)程用于提高數(shù)據(jù)庫(kù)的性能;一些用于當(dāng)發(fā)生軟件或硬件異常時(shí)恢復(fù)數(shù)據(jù)庫(kù);或應(yīng)用于完成其他一些維護(hù)數(shù)據(jù)庫(kù)的任務(wù).ORACLE服務(wù)器包含ORACLE實(shí)例和ORACLE數(shù)據(jù)庫(kù).
Oracle Instance: Oracle實(shí)例是用于聯(lián)系后臺(tái)進(jìn)程和內(nèi)在之間的活動(dòng),對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存取前必須先啟動(dòng)實(shí)例,每當(dāng)實(shí)例啟動(dòng)時(shí),SGA就被分配給它并啟動(dòng)了一些后臺(tái)進(jìn)程.后臺(tái)進(jìn)程執(zhí)行10秒操作并監(jiān)控有些進(jìn)程以提供更好的性能.和可靠性.
Oracle Database: 數(shù)據(jù)庫(kù)包含了系統(tǒng)文件,也稱數(shù)據(jù)庫(kù)文件,其提供了用以存儲(chǔ)數(shù)據(jù)庫(kù)信息的實(shí)際物理存儲(chǔ)區(qū)域,用數(shù)據(jù)文件保證了數(shù)據(jù)一致性,并在當(dāng)實(shí)例發(fā)生失敗時(shí)恢復(fù)數(shù)據(jù)庫(kù)。
