资源描述
按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,Oracle,的,Memory,管理,Oracle,的,Instance,結構,SGA,DataBase,Buffer Cache,Other,(Large pool,Cursors),Shared,Pool,Redo Log,Buffer,Background,Process,DBWR,LGWR,PMON,CKPT,SMON,Oracle,的,Memory,管理,SGA(System Global Area):,系統全域區,在多人使用的環境下,SGA,的資料可分享給線上所有使用者使用,所以,SGA,也稱為,Shared Global Area,SGA,的設定參數,SGA_MAX_SIZE(,在起始參數檔),用以設定,SGA,的總大小,如以,DataBase,執行效能考量,此參數理應盡可能設大,參數值盡可能不要超過實體,Memory,大小,否則會用到硬碟上的虛擬,Memory,反而會導致效能低落,參數值大小必須大於,SGA,相關區域參數值的總和,Oracle,的,Memory,管理,SGA,包含下列幾個區域,DataBase,Buffer Cache,資料快取緩衝區,Redo Log Buffer,重置日誌緩衝區,Shared Pool,共享區,其他,如,Large Pool,及,Cursors,等,SGA,的相關參數修改,在,Oracle 8i,之前版本,修改後必須重新啟動資料庫才會生效,Oracle 9i,提供一新技術稱,dynamic SGA,可以動態配置記憶體的大小,Oracle,的,Memory,管理,DataBase,Buffer Cache,資料快取緩衝區,用來存放讀取自資料檔案的資料區塊複本,或是使用者曾經處理過的資料。,其用途在於有效降低存取資料時造成磁碟讀寫動作,以提昇資料存取效能,資料快取緩衝區包含兩種緩衝區串列,Write List:,存放,dirty buffer,之複本,會在適當時機寫入磁碟,Dirty buffer,是用來存放“己修改但尚未寫入磁碟的資料”的緩衝區,LRU List:,包含,free buffer、dirty buffer,及,pinned buffer,Free buffer:,空白(可用)的緩衝區,Pinned buffer:,已被使用中的緩衝區,Oracle,的,Memory,管理,DataBase,Buffer Cache,的運作原理,當使用者向,Oracle,送出查詢請求,Oracle,會先在資料快取緩衝區內尋找該資料。如找到稱之為,cache hit,直接從記憶體讀出資料,否則稱之為,cache miss,Oracle,才會從磁碟上的資料檔讀出資料區塊放入緩衝區後,使用者才從緩衝區讀取資料。,當磁碟上的資料區塊讀出,要放入資料快取緩衝區內時,系統必須確定緩衝區內有,free,buffer,供存放,此時,oracle,便會開始掃描,LRU List,如能,順利找到,free buffer,Oracle,就會將,資料區塊放入此,free buffer,中,再將其移到,LRU List,的,MRU,端。,LRU,(,Least Recently Used),端:較不常使用的,MRU(Most Recently Used),端:最近使用的,Oracle,的,Memory,管理,LRU List,的,掃描原則,從,LRU,端掃到,MRU,端,如發現,dirty buffer,就將它移到,Write List,當掃到,free buffer,或,掃描的緩衝區數目超過臨界值,就會停止掃描動作,當,LRU List,真的沒有,free buffer,Oracle,便會通知資料庫寫入器(,DataBase,Write,DBWR),背景處理程序將部份的,dirty buffers,先寫入磁碟,然後從,LRU List,的,LRU,端清除緩衝區,以騰出,free buffer,Oracle,的,Memory,管理,LRU List,與,LRU,的演算法則,當記憶體的可用空間不足時,緩衝區盡可能保留使用者最常用的資料,優先清除“較不常使用的資料”,並釋放空間,LRU List,State 0:,State 1:,State 2:,A ,B A ,MRU,端,LRU,端,State m:,State n:,M,A,E D,B C,N,M,A ,E D,B,Oracle,的,Memory,管理,設定資料快取緩衝區大小,在,Oracle 8i,之前的版本,DataBase,Buffer Cache,的大小等於,DB_BLOCK_SIZE*DB_BLOCK_BUFFERS,DB_BLOCK_SIZE:,資料區塊(,data block),單位大小,以,Bytes,計;預設為8192(8,k),DB_BLOCK_BUFFERS:,緩衝區數目;預設2048(個),Oracle 8i,的,DB_BLOCK_SIZE,參數值在資料庫建立後就不可再修改,Oracle 9i,支援多重資料區塊大小,除了預設的,DB_BLOCK_SIZE,之外,DBA,可另外設定其他大小的資料區塊,Oracle,的,Memory,管理,Redo Log Buffer,重置日誌緩衝區,記錄資料庫內所有資料異動的詳細資訊,稱為,redo entries。,系統會在適當時機呼叫,LGWR,背景處理程序,將,redo entries,內的資訊寫入磁碟內的,Redo Log Files,以便日後執行復原(,Recovery),動作,LOG_BUFFER,參數可用來設定,Redo Log Buffer,的大小,單位為,Bytes;,預設為作業系統(,RH7.2 512),資料區塊的四倍,若重置日誌緩衝區設大一點,可減少,Redo Log Files,的讀寫動作,可提昇系統效能,但亦不宜太大(會浪費),Oracle,的,Memory,管理,Shared Pool,共享區,當使用者把,SQL,指令送至,Oracle,資料庫後,系統會先解析語法是否正確。解析時所需的系統資訊以及解析後的結果,就存放在,Shared Pool,共享區內。當有其他使用者用到相同的,SQL,指令,即可共享已解析好的資訊,達到提昇,SQL,指令的執行速度,SHARED_POOL_SIZE,參數可設定共享區的大小,32-,bit,作業系統下;預設值為8(,M),64-,bit,作業系統下;預設值為64(,M),Oracle,的,Memory,管理,Shared Pool,共享區的組成;主要分兩類,Library Cache(,函式快取緩衝區):包含,Shared SQL Area(,共享,SQL,區),Private SQL Area(,私有,SQL,區),PL/SQL Program Area(PL/SQL,程式單元區),解析後的結果及資訊即是存放在,Shared SQL Area,內,Dictionary Cache(,資料字典緩衝區):包含,Table、View、Column,及,DataType,等,使用者的相關系統管理權限及物件存取權限,Oracle,在解析,SQL,語句時所需的系統資訊即是存放在此,
展开阅读全文