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