1. 程式人生 > >oracle記憶體引數調整

oracle記憶體引數調整

Oracle 9i引入pga_aggregate_target,可以自動對PGA進行調整;
Oracle 10g引入sga_target,可以自動對SGA進行調整;
Oracle 11g則對這兩部分進行綜合,引入memory_target,可以自動調整所有的記憶體,這就是新引入的自動記憶體管理特性。


檢視每個記憶體元件的配置與實際佔用記憶體的大小,可以檢視下面的v$檢視
v$memory_dynamic_components


alter system set memory_max_target=6g scope=spfile;
alter system set memory_target=5g scope=spfile;
alter system set sga_target=0 scope=spfile;
alter system set pga_aggregate_target=0 scope=spfile;
shutdown immediate;
startup;
/


設定memory_target引數後,實際上Oracle會自動設定並調整以下下兩個引數來分配SGA和PGA的記憶體,這和Oracle10g自動設定sga_target後分配db_cache_size和shared_pool_size的機制是一樣的。


SQL> col ksppinm for a20;
SQL> col ksppstvl for a20;
SQL> select a.ksppinm name,b.ksppstvl value
       from x$ksppi a,x$ksppcv b
     where a.indx = b.indx
       and (a.ksppinm like '%sga_target%' or a.ksppinm like '%pga_aggregate_target%');
  
3.2、討論一下11g中memory_target設定和不設定對SGA/PGA的影響:
3.2.1、如果memory_target設定為非0值 (下面有四種情況來對SGA和PGA的大小進行分配)

 3.2.1.1、sga_target和pga_aggregate_target已經設定大小
如果Oracle中已經設定了引數sga_target和pga_aggregate_target,則這兩個引數將各自被分配為最小值為他們的目標值。
memory_target = sga_target + pga_aggregate_target,大小和memory_max_size一致。

 3.2.1.2、sga_target設定大小,pga_aggregate_target沒有設定大小
那麼pga_aggregate_target初始化值=memory_target-sga_target

 3.2.1.3、sga_target沒有設定大小,pga_aggregate_target設定大小
那麼sga_target初始化值=memory_target-pga_aggregate_target

 3.2.1.4、sga_target和pga_aggregate_target都沒有設定大小
Oracle 11g中對這種sga_target和pag_aggregate_target都沒有設定大小的情況下,Oracle將對這兩個值沒有最小值和預設值。Oracle將根據資料庫執行狀況進行分配大小。但在資料庫啟動是會有一個固定比例來分配:
sga_target = memory_target*60%
pga_aggregate_target = memory_target*40%

    3.2.2、如果memory_target沒有設定或 = 0(在11g中預設為0)
 11g中預設為0則初始狀態下取消了memory_target的作用,完全和10g在記憶體管理上一致,完全向下相容。(也有三種情況來對SGA和PGA的大小進行分配)
 3.2.2.1、sga_target設定值,則自動調節SGA中的shared pool,buffer cache,redo log buffer,java pool,larger pool等記憶體空間的大小。PGA則依賴pga_aggregate_target的大小。sga和pga不能自動增長和自動縮小。
 3.2.2.2、sga_target和pga_aggregate_target都沒有設定
 SGA中的各元件大小都要明確設定,不能自動調整各元件大小。PGA不能自動增長和收縮。
 3.2.2.3、memory_max_target設定而memory_target = 0這種情況先和10g一樣,不做說明。 
 


--以下內容來自oracle官方文件,但是實際測試卻得不到驗證
On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET or MEMORY_MAX_TARGET is specified, the default value of SGA_MAX_SIZE is set to the larger of the two parameters. This causes more address space to be reserved for expansion of the SGA.