(1)用戶進(jìn)程(User Process)與服務(wù)器端進(jìn)程(Server process) 用戶進(jìn)程是用戶用來(lái)與Oracle服務(wù)器交互的,其運(yùn)行于客戶端,當(dāng)用戶運(yùn)行某個(gè)工具(如SQL*Plus)時(shí)創(chuàng)建,當(dāng)用戶退出上述工具時(shí)結(jié)束,由上圖可以看出用戶進(jìn)程并不是直接與Oracle實(shí)例或者是數(shù)據(jù)庫(kù)交互而是通過(guò)Oracle server process進(jìn)行的。Oracle服務(wù)器端進(jìn)程是用戶進(jìn)程與Oracle核心的橋梁,用戶進(jìn)程通過(guò)服務(wù)器端進(jìn)程操作實(shí)例(instance)最終影響數(shù)據(jù)庫(kù),如用戶發(fā)出一條SQL語(yǔ)句,會(huì)首先交由服務(wù)器端進(jìn)程然后才會(huì)傳至實(shí)例。
(2)實(shí)例(Instance) 實(shí)例由兩部分組成:一組Oracle進(jìn)程和SGA。SGA全稱為System Global Area是一塊巨大的共享內(nèi)存區(qū)域,他被看作是Oracle數(shù)據(jù)庫(kù)的一個(gè)大緩沖池,這里的數(shù)據(jù)可以被Oracle的各個(gè)進(jìn)程共用。SGA本身又由其他的模塊組成,
1:共享池(Shared Pool) 共享池是SGA中最關(guān)鍵的內(nèi)存片段,特別是在性能和可伸縮性上。一個(gè)太小的共享池會(huì)扼殺性能,使系統(tǒng)停止,太大的共享池也會(huì)有同樣的效果,將會(huì)消耗大量的 CPU來(lái)管理這個(gè)共享池。不正確的使用共享池只會(huì)帶來(lái)災(zāi)難。共享池主要又可以分為以下兩個(gè)部分:
<1>SQL語(yǔ)句緩沖(Library Cache): 當(dāng)一個(gè)用戶提交一個(gè)SQL語(yǔ)句,Oracle會(huì)將這句SQL進(jìn)行分析(parse),這個(gè)過(guò)程類似于編譯,會(huì)耗費(fèi)相對(duì)較多的時(shí)間。在分析完這個(gè)SQL,Oracle會(huì)把他的分析結(jié)果給保存在 Shared pool的Library Cache中,當(dāng)數(shù)據(jù)庫(kù)第二次執(zhí)行該SQL時(shí),Oracle自動(dòng)跳過(guò)這個(gè)分析過(guò)程,從而減少了系統(tǒng)運(yùn)行的時(shí)間。這也是為什么第一次運(yùn)行的SQL比第二次運(yùn)行的SQL要慢一點(diǎn)的原因。
<2>數(shù)據(jù)字典緩沖區(qū)(Data Dictionary Cache):ORACLE特地為數(shù)據(jù)字典準(zhǔn)備的一塊緩沖池,供ORACLE內(nèi)部使用.
2:塊緩沖區(qū)高速緩存(Database Buffer Cache):這些緩沖是對(duì)應(yīng)所有數(shù)據(jù)文件中的一些被使用到的數(shù)據(jù)塊。讓他們能夠在內(nèi)存中進(jìn)行操作。在這個(gè)級(jí)別里沒(méi)有系統(tǒng)文件,用戶數(shù)據(jù)文件,臨時(shí)數(shù)據(jù)文件,回滾段文件之分。也就是任何文件的數(shù)據(jù)塊都有可能被緩沖。數(shù)據(jù)庫(kù)的任何修改都在該緩沖里完成,并由DBWR進(jìn)程將修改后的數(shù)據(jù)寫入磁盤。