oracle 11g 自動記憶體管理(其三)

flywiththewind發表於2015-11-06

ORACLE 11g 自動記憶體管理:
在oracle 11g中,使用一個引數memory_target就能夠實現SGA和PGA元件依據工作負荷進行自動記憶體分配。oracle推薦使用自動記憶體管理簡化記憶體分配。

oracle 11g依然支援手工記憶體分配:
1:oracle 11g使用memory_target來支援記憶體自動分配。
2:使用sga_target和pga_target引數來設定SGA和PGA,資料庫會在這兩個元件中自我最佳化。
3:你也可以手工設定SGA中的各個元件。比如db_cache_size,shared_pool_size等元件。

oracle 11g中新的記憶體初始化引數:
有兩個新的關鍵的記憶體初始化引數memory_target(這個引數設定分配給例項的記憶體數)和memory_max_size(這個引數是可選的,設定例項能夠分配的最大記憶體,設定的是memory_target的上限值)。
memory_max_size引數是靜態,然而memory_target是動態的。因此你可以調整memory_target引數值的大小,但上限是memory_max_size。
對自動記憶體管理的配置有兩種情況,在建立資料庫時或者是建立資料庫後。
1:在資料庫建立期間設定自動記憶體管理:如果是手工建庫,那麼你只需要設定好如下類似初始化引數即可:
memory_target = 1000m
memory_max_target = 1500m
如果是採用DBCA建立資料庫,如果是建立新庫並且是高階安裝,你能選擇自動記憶體管理選項。如果是選擇基本安裝,那麼預設就是自動記憶體管理。
2:在資料庫建立後:你可以在資料庫建立後新增memory_max_target和memory_target.雖然memory_target是一個動態引數,但是當資料庫執行時,你不能交換到自動記憶體管理。必須重啟資料庫將引數應用到例項啟動過程才行。
 <wbr>
實現自動記憶體管理,有下列原則:
MEMORY_TARGET 設定為非零值時:
1:如果設定了SGA_TARGET 和 PGA_AGGREGATE_TARGET,則會分別將它們當作 SGA大小和 PGA 大小的最小   值。MEMORY_TARGET 可以將 SGA_TARGET PGA_AGGREGATE_TARGET 的值作為 MEMORY_MAX_SIZE。

2:如果設定了 SGA_TARGET 但未設定PGA_AGGREGATE_TARGET,則仍會自動最佳化這兩個引數。PGA_AGGREGATE_TARGET 將初始化為以下值:(MEMORY_TARGET -SGA_TARGET)。

3:如果設定了 PGA_AGGREGATE_TARGET 但未設定 SGA_TARGET,則仍會自動最佳化這兩個引數。SGA_TARGET 將初始化為值 min(MEMORY_TARGET -PGA_AGGREGATE_TARGET, SGA_MAX_SIZE(如果使用者已設定)),系統將自動最佳化子元件。

4:如果未設定任何引數,則無需最小值或預設值即可自動最佳化這兩個引數。有這樣一個策略:在初始化過程中,將伺服器的總記憶體按固定比率分配給SGA 和 PGA。該策略將在啟動時分配 60% 的記憶體給SGA,40% 的記憶體給 PGA。如果未設定 MEMORY_TARGET,或者將其顯式設定為 0(11g 中的預設值為 0):

5:如果設定了 SGA_TARGET,則系統僅自動最佳化 SGA 的子元件大小。PGA 的自動最佳化與是否顯式設定 PAG 無關。但是,不會自動最佳化整個SGA (SGA_TARGET) 和 PGA (PGA_AGGREGATE_TARGET),即 SGA 和PGA 不會自動增長或收縮。如果既未設定SGA_TARGET,又未設定 PGA_AGGREGATE_TARGET,則遵從當前的策略:自動最佳化PGA,但不自動最佳化SGA;必須顯式設定部分子元件的引數(對於SGA_TARGET)。

6: 如果僅設定了 MEMORY_MAX_TARGET,則使用文字初始化檔案進行手動設定時,MEMORY_TARGET 預設為 0。SGA 和 PGA 的自動最佳化行為預設情況下與 10g R2 中的相同。

7:如果 SGA_MAX_SIZE 不是使用者設定的,則在使用者設定了 MEMORY_MAX_TARGET 的情況下,系統會在內部將其設定為 MEMORY_MAX_TARGET(與使用者是否設定SGA_TARGET 無關)。<wbr><wbr>
 <wbr>

在有些場合,如果你使用自動記憶體管理給例項分配記憶體,可能會遇到下列錯誤,比如linux上:

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
這是因為/dev/shm沒有設定正確的值,確保這個值至少等於sga_max_size引數值。
[oracle@node1 dbs]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       14G  9.4G  3.2G  75% /
/dev/sda1              99M   14M   81M  15% /boot
none                  2.0G  702M  1.4G  35% /dev/shm
可以看到該值為2G。
可以透過/etc/fstab來更改該值:
預設情況下該檔案相關內容如下:
[oracle@node1 dbs]$ cat /etc/fstab |grep shm
none                    /dev/shm                tmpfs   defaults       0 0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
可以將該值修改為如下:
none                    /dev/shm                tmpfs   defaults,size=2G        0 0
然後重啟系統即可解決問題。

轉自:http://blog.chinaunix.net/uid-16728139-id-3172139.html
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
<!-- 正文結束 --&gt

相關文章