11g AMM和/dev/shm

myownstars發表於2012-04-09

11g開始支援AMM即自動記憶體管理,該功能需要用到/dev/shm

以前對此瞭解甚少,蒐羅一些相關資料作如下總結:

 

什麼是tmpfs

tmpfs是一種基於記憶體的檔案系統,類似oraclebuffer cache,當OS經歷大量的I/O讀寫操作時,可以顯著提高效能;

預設情況下,tmpfsmount/dev/shm目錄。

為防止tmpfs使用了全部VM,有時候要限制其大小。要建立一個最大為32 MBtmpfs檔案系統,鍵入:

# mount tmpfs /dev/shm -t tmpfs -o size=32m

新增到 /etc/fstab,應該是這樣:

tmpfs /dev/shm tmpfs size=32m 0 0

 

tmpfs相對於ramfs而言,增加了幾項功能,如size limit,交換分割槽支援等等。 tmpfs可以透過 "mount -o remount size=..."來線上調整大小;當該檔案系統的檔案數 太多,Size不夠的時候,還可以將一些暫時不用的檔案SWAP到交換分割槽上去,因此比 Ramfs更加靈活。

Linux檔案系統中的某些目錄,諸如:/tmp /var/tmp等等用來存放臨時檔案,因此我們 可以將tmpfs掛載到這些目錄中,這樣一來一旦系統關機,這些臨時檔案都會統統消失, 不會再系統中留下無用檔案。此外,現在的很多軟體可能會透過共享記憶體的方式來進行 IPC,近期的Linux核心可以透過將tmpfs掛載到/dev/shm,從而透過/dev/shm來提供共享 記憶體。

 

什麼是/dev/shm

/dev/shm linux下的一塊共享記憶體結構(是TMPFS型別)。預設最大為記憶體的一半大小.其實它的實際大小可以設定為(實體記憶體的一半+swap).好多人都把它和swap給混淆了,這是兩個不同的概念.但它並不會真正的佔用這塊記憶體,如果/dev/shm/下沒有任何檔案,它佔用的記憶體實際上就是0位元組;如果它最大為1G,裡頭放有100M檔案,那剩餘的900M仍然可為其它應用程式所使用,但它所佔用的100M記憶體,是絕不會被系統回收重新劃分的。 

/dev/shm用來儲存程式間通訊時的一些共享資料結構..例如Oracle11GASMM(Automatic Shared Memory Management)就用/dev/shm進行通訊和資料共享. DBA在進行11G配置時需要考慮MEMORY_MAX_TARGETMEMORY_TARGET引數不能大於/dev/shm.否則在資料庫啟動時有可能會產生ORA-00845.

/dev/shm通常在實體記憶體足夠時,會在記憶體中進行資料交換,如果實體記憶體缺乏時,會用swap進行資料交換. 支援動態線上調整.在我們需要時可以增加或縮減它的大小.

 

注意事項

配置時必須滿足memory_max_target <= /dev/shm,否則啟動時會報告ora-00845錯誤;

因為每個後臺程式都需要訪問/dev/shm檔案,必須對oracle使用者分配足夠多的檔案描述符,否則會出現ora-27123錯誤;

若使用dedicated方式連線,每個客戶端連線也都需要訪問/dev/shm下的共享記憶體段,即至少需要memory_target/granule size個檔案描述符,且還需要相應datafile的檔案描述符,直到連線退出才釋放;

 

驗證

開啟oracle之前,/dev/shm為空

$ ls -l /dev/shm

total 0

$ lsof -n | grep /dev/shm

啟動oracle

SQL> show parameter memory_target

NAME           TYPE        VALUE

-------------- ----------- ------

memory_target  big integer 808M

SQL> show parameter memory_max_target

  NAME              TYPE          VALUE

 ----------------- ------------- ------

 memory_max_target  big integer  808M

再次檢查/dev/shm

UNIX> ls -l /dev/shm/* | wc -l

           203

UNIX> lsof -n | grep /dev/shm | wc -l

            4872

/dev/shm目錄下只有203個檔案,卻生成了4872個檔案描述符;兩者分別遵循以下公式

檔案數目=memory_target/granule size(4M)=808/4 =203;

檔案描述符=檔案數目*後臺程式數 = 203*24=4872

 

 

注:pga不會儲存於/dev/shm

http://blog.oracle48.nl/oracle-11g-amm-memory_target-memory_max_target-and-dev_shm/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-720689/,如需轉載,請註明出處,否則將追究法律責任。

相關文章