HugePages與AMM不相容:ORA-00845: MEMORY_TARGET not supported on this system

tolywang發表於2014-05-07

參考文件:   HugePages on Oracle Linux 64-bit (文件 ID 361468.1)


     注意這裡所說的 AMM 指的是  Automatic Memory Management  ,  不要和 ASMM (Automatic Shared Memory Management ) 混淆了。 ASMM和HugePage是相容的。

AMM :   設定 MEMORY_TARGET / MEMORY_MAX_TARGET  , 動態管理SGA和PGA,不支援 LINUX x86-64 Hugepages 。
ASMM :    在SGA 主要 buffer 中動態分配記憶體大小 。 是支援 LINUX x86-64 Hugepages的 。

如果使用了大記憶體和SGA,那麼HugePage對提高資料庫效能就非常重要。比如  資料庫SGA大小超過8G,就需要配置HugePages。那麼如果OS使用的是Linux x86-64系統,就需要先禁用AMM , 即設定 MEMORY_TARGET / MEMORY_MAX_TARGET都為 0 。預設情況下ASM instance 也是使用AMM的,但因為ASM 例項不需要大SGA,所以對ASM 例項使用HugePages意義不大。 如果使用AMM,所有的SGA 記憶體都是在/dev/shm 下分配的,在分配SGA時不會使用HugePage。這也是AMM 與HugePage不相容的原因。

----   設定hugepage

第一步: 設定memlock

在/etc/security/limits.conf檔案中新增memlock的限制,注意該值略微小於實際物理 記憶體的大小。 比如實體記憶體是64GB,可以設定為如下:
*   soft  memlock    60397977
*   hard   memlock    60397977

如果這裡的值超過了SGA的需求,也沒有不利的影響。
The parameters will be set by default on:
   Oracle Linux with oracle-validated package (See Document 437743.1) installed.
   Oracle Exadata DB compute nodes


第二步: 驗證memlock

以Oracle product owner賬號登入,使用如下命令檢視引數值:
$ ulimit -l
60397977
第三步:  11g中檢視引數use_large_pages,預設值是TRUE。並確認沒有設定AMM 。
第四步:  Use the script hugepages_settings.sh in Document 401749.1 to calculate the recommended value for the vm.nr_hugepages kernel parameter. e.g.:  

第五步 : Edit the file /etc/sysctl.conf and set the vm.nr_hugepages parameter there:
...
vm.nr_hugepages = 1496
This will make the parameter to be set properly with each reboot.

第六步 :  Stop all the database instances and reboot the server

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

相關文章