2011-07-14 22:36:29| 分類(lèi): oracle管理 備份 |字號 訂閱
1.1內存結構
SGA是有所有服務(wù)器進(jìn)程和后臺進(jìn)程共享的內存區域,它有數據高速緩存(database buffer cache)、重做日志緩沖區(redo log buffer)、共享池(shared pool)、大緩沖池(large pool)、java池(java pool)和stream pool等部分組成。當啟動(dòng)例程時(shí),ORACLE會(huì )自動(dòng)分配SGA;當關(guān)閉例程時(shí),ORACLE會(huì )自動(dòng)釋放SGA所占用的空間。PGA是每個(gè)服務(wù)器進(jìn)程或后臺進(jìn)程獨有的內存區域,當啟動(dòng)服務(wù)器進(jìn)程或后臺進(jìn)程時(shí),ORACLE會(huì )自動(dòng)為其分配相應的PGA空間。
1.1.1數據高速緩存
數據高速緩存用于存放從數據文件讀取的數據塊內容,并且數據塊內容會(huì )被存放到相應的緩沖區中。標準數據高速緩存尺寸由參賽DB_CACHE_SIZE定義,標準數據塊尺寸由參數DB_BLOCK_SIZE定義,非標準數據高速緩存尺寸由參數DB_nK_CACHE_SIZE定義
1.緩存區
緩沖區用于存放數據文件的數據塊內容,其尺寸與數據塊尺寸完全相同。按緩沖區使用情況,可以將其劃分為臟緩沖區(dirty buffer)、空閑緩沖區(free buffer)、忙緩沖區(pinned buffer)三種。臟緩沖區是指內容已被修改但尚未寫(xiě)入磁盤(pán)的緩沖區:空閑緩沖區是指不包含任何數據的緩沖區;忙緩沖區是指服務(wù)器進(jìn)程正在訪(fǎng)問(wèn)的緩沖區。
2.數據高速緩存工作原理
oracle采用LRU(least recently used)算法管理數據高速緩存。類(lèi)似于排隊機制,最先入隊的最先出隊,最后入隊的最后出隊。
3.寫(xiě)列表和LRU列表
寫(xiě)列表用于存放臟緩沖區的列表信息,LRU列表用于記載緩沖區訪(fǎng)問(wèn)的先后次序。
1.1.2重做日志緩沖區
重做日志緩沖區用于記載例程變化,其尺寸有初始化參數LOG_BUFFER定義。當執行DML、DDL、DCL操作時(shí),服務(wù)器進(jìn)程會(huì )生成包含變化信息的重做入口(Redo Entries),并將重做入口信息寫(xiě)入重做日志緩沖區,然后才會(huì )修改數據高速緩存。
1.1.3共享池
共享池包括庫高速緩存(Library cache)、數據字典高速緩存(Dictionary cache)、結果緩存(Result cache)、并行執行消息緩沖區和控制結構。尺寸由shared_pool_size定義
1.library cache
library cache包括共享SQL區、共享PL/SQL區和控制結構。它主要用于存放最近執行的SQL語(yǔ)句和PL/SQL程序單元信息,包括SQL語(yǔ)句文本、解析樹(shù)及其執行計劃。
library cache包含很多context area,每個(gè)context area都包含相應的SQL語(yǔ)句的執行計劃,這些context area被稱(chēng)作共享游標。當客戶(hù)端運行SQL語(yǔ)句時(shí),服務(wù)器進(jìn)程首先檢查共享游標是否存在,若存在則按其執行計劃直接執行語(yǔ)句;若不存在則生成SQL語(yǔ)句執行計劃,并將執行計劃存放到相應的context area,然后執行該SQL語(yǔ)句。通過(guò)共享游標,可以最小化SQL語(yǔ)句解析次數,從而提高SQL語(yǔ)句的執行性能。
2.dictionary cache
dictionary cache用于存放數據字典的信息,包括表定義、列定義、權限等信息。當解析SQL語(yǔ)句時(shí),服務(wù)器進(jìn)程會(huì )頻繁地從dictionary cache中訪(fǎng)問(wèn)數據字典
3.result cache
result cache是oracle 11g的新特征,它由SQL查詢(xún)結果緩存和PL/SQL函數結果緩存組成。
1.1.4其他SGA組件
1.large pool
large pool 是SGA可選的內存結構,其尺寸有LARGE_POOL_SIZE確定。LARGE POOL用于為大內存操作提供相對獨立的內存空間,從而提高這些大內存操作的性能。
大內存操作包括:
1)共享服務(wù)器
2)并行查詢(xún)
3)I/O服務(wù)器進(jìn)程
4)備份和轉儲操作
通過(guò)為共享服務(wù)器分配會(huì )話(huà)內存,已及為并行查詢(xún)分配緩沖區,可以使得共享池主要用于共享SQL,從而避免縮減共享池所導致的性能開(kāi)銷(xiāo)。通過(guò)為備份轉儲操作以及I/O服務(wù)器進(jìn)程分配內存,LARGE POOL可以比shared pool更好的滿(mǎn)足大內存請求。
2.java pool
java pool主要用于存放java代碼和數據,其尺寸由java_pool_size定義。如果要在oracle數據庫中安裝java VM,必須配置java pool,其尺寸應該大于20M。
3.streams pool
streams池用于存儲緩沖區隊列消息,并且專(zhuān)門(mén)為ORACLE streams的捕獲進(jìn)程和應用進(jìn)程提供內存,尺寸由streams_pool_size定義。
1.1.5 PGA
PGA用于存放服務(wù)器進(jìn)程和后臺進(jìn)程的數據和控制信息。
所有獨立PGA的集合稱(chēng)為例程PGA,通過(guò)配置pga_aggregate_target,可以控制PGA的尺寸。
PGA由SESSION MEMORY 和 PRIVATE SQL AREA兩部分組成。
1)session memory 用于存放會(huì )話(huà)變量、登錄信息以及其他與會(huì )話(huà)相關(guān)的信息
2)private SQL area 包含綁定變量值、sql執行狀態(tài)、sql工作區等信息,并且sql工作區存放著(zhù)排序操作所產(chǎn)生的臨時(shí)數據。
1.2 使用內存自動(dòng)管理
自動(dòng)內存管理師o(wú)racle 11g的新特征,它使得oracle可以根據性能學(xué)期自動(dòng)調整SGA和PGA尺寸。為了使用自動(dòng)內存管理,不僅需要配置memory_target而且應該將SGA_TARGET和PGA_AGGREGATE_TARGET設置為0.另外memory_max_target可以用于設置目標內存的最大尺寸。
當使用自動(dòng)內存管理時(shí),通過(guò)查詢(xún)動(dòng)態(tài)性能視圖v$memory_target_advice,可以顯示目標內存尺寸的建議信息。
select * from v$memory_target_advice;
4.3使用手工內存管理
聯(lián)系客服