天天看點

oracle 11g 修改 memory_max_target,關于oracle11G的自動記憶體管理MEMORY_TARGET和MEMORY_MAX_TARGET...

自動記憶體管理是用兩個初始化參數進行配置的:MEMORY_TARGET:動态控制SGA和PGA時,Oracle總共可以使用的共享記憶體大小,這個參數是動态的,是以提供給Oracle的記憶體總量是可以動态增大,也可以動态減小的。它不能超過MEMORY_MAX_TARGET參數設定的大小。預設值是0。MEMORY_MAX_TARGET:這個參數定義了MEMORY_TARGET最大可以達到而不用重新開機執行個體的值,如果沒有設定MEMORY_MAX_TARGET值,預設等于MEMORY_TARGET的值。使用動态記憶體管理時,SGA_TARGET和PGA_AGGREGATE_TARGET代表它們各自記憶體區域的最小設定,要讓Oracle完全控制記憶體管理,這兩個參數應該設定為0。memory_max_target是一個非動态參數,不能在memory範圍動态改變,隻能通過指明 scope=spfile這個條件來達到資料庫在下次啟動後讓改變生效的目的。但是memory_target這個參數是可以動态調節的...也就是說不需要重新啟動DB,就可以讓其生效。MEMORY_MAX_TARGET 是設定Oracle能占OS多大的記憶體空間SGA_MAX_SIZE是Oracle SGA 區最大能占多大記憶體空間10g 的sga_max_size 是動态配置設定 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,是根據Oracle 運作狀況來重新配置設定SGA 各記憶體塊的大小。PGA在10g中需要單獨設定。11g MEMORY_MAX_TARGET 參數包含SGA和PGA兩部分。在手動建立資料庫時,隻需要在建立資料庫之前設定合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化參數。在一個系統上啟用自動記憶體管理其實很簡單,不需要事先做太多的事情,可以使用下面的計算公式來計算:           MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated");下面的查詢語句向你展示有關的資訊,以及如何計算出需要的值:1.SELECT name, valueFROM   v$parameterWHERE  name IN ('pga_aggregate_target', 'sga_target')UNIONSELECT 'maximum PGA allocated' AS name, TO_CHAR(value) AS valueFROM   v$pgastatWHERE  name = 'maximum PGA allocated';2.SELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_targetFROM (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'sga_target') sga,(SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'pga_aggregate_target') pga,(SELECT value FROM v$pgastat WHERE name = 'maximum PGA allocated') max_pga;除現有的用于記憶體管理的V$視圖外,Oracle 11g還新增加了下面4個視圖用于自動記憶體管理:V$MEMORY_CURRENT_RESIZE_OPSV$MEMORY_DYNAMIC_COMPONENTSV$MEMORY_RESIZE_OPSV$MEMORY_TARGET_ADVICE為每個動态元件配置設定的記憶體大小使用視圖V$MEMORY_DYNAMIC_COMPONENTS顯示:SELECT  component, current_size, min_size, max_sizeFROM    v$memory_dynamic_componentsWHERE   current_size != 0;V$MEMORY_CURRENT_RESIZE_OPS和V$MEMORY_RESIZE_OPS分别顯示了元件目前改變大小操作的資訊和上一次改變大小操作的資訊。V$MEMORY_TARGET_ADVICE提供了幫助調整MEMORY_TARGET參數的資訊,它顯示了一段MEMORY_TARGET設定可用的範圍,根據目前的設定,估算完成目前負載所需要的DB Time值。SELECT * FROM v$memory_target_advice ORDER BY memory_size;下面來看看在11g 中Memory_target 設定和不設定對SGA/PGA 的影響:如果Memory_target 設定為非0 值1、sga_target 和 pga_aggregate_target 已經設定大小Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一緻2、sga_target 設定大小, pga_aggregate_target 沒有設定大小pga_aggregate_target初始化值=memory_target-sga_target3、sga_target 沒有設定大小, pga_aggregate_target 設定大小sga_target 初始化值=memory_target-pga_aggregate_target4、sga_target 和 pga_aggregate_target 都沒有設定大小兩個值沒有最小值和預設值,Oracle 将根據資料庫運作狀況進行配置設定大小,但在資料庫啟動是會有一個固定比例來配置設定:sga_target =memory_target *60%pga_aggregate_target=memory_target *40%如果Memory_target 沒有設定為011g 中預設為0 則初始狀态下取消了Memory_target 的作用,完全和10g 在記憶體管理上一緻,完全向下相容。1、SGA_TARGET設定值自動調節SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool等記憶體空間的大小。PGA 則依賴pga_aggregate_target 的大小。2、SGA_target 和PGA_AGGREGATE_TARGET 都沒有設定SGA 中的各元件大小都要明确設定,不能自動調整各元件大小。PGA不能自動增長和收縮3: MEMORY_MAX_TARGET 設定而MEMORY_TARGET =0  這種情況先和10g 一樣。在11g 中可以使用下面看各元件的值:SQL> show parameter targetNAME    TYPEVALUE------------------------------------ ----------- ------------------------------archive_lag_target    integer0db_flashback_retention_target    integer1440fast_start_io_target    integer0fast_start_mttr_target    integer0memory_max_target    big integer 18Gmemory_target    big integer 18Gparallel_servers_target     integer256pga_aggregate_target    big integer 8Gsga_target    big integer 9G如果需要監視Memory_target 的狀況則可以使用下面三個動态試圖:V$MEMORY_DYNAMIC_COMPONENTSV$MEMORY_RESIZE_OPSv$memory_target_advice一張能直覺展現10g和11g的自動記憶體管理的參數之間的關系的參數關系圖:

oracle 11g 修改 memory_max_target,關于oracle11G的自動記憶體管理MEMORY_TARGET和MEMORY_MAX_TARGET...