【TUNE_ORACLE】Oracle資料庫與HugePages(二)HugePages配置和限制

Attack_on_Jager發表於2021-03-23

說明

相關文章連結:

Oracle資料庫與HugePages(一)HugePages概念和優勢: http://blog.itpub.net/69992972/viewspace-2763625/

Oracle資料庫與HugePages(二)HugePages配置和限制: http://blog.itpub.net/69992972/viewspace-2764357/

Oracle資料庫與HugePages(三)HugePages常見問題和解決辦法: http://blog.itpub.net/69992972/viewspace-2764597/

Oracle資料庫與HugePages(四)如何禁用透明大頁: http://blog.itpub.net/69992972/viewspace-2764784/


Hugepages配置限制

HugePages有以下限制:

1. 必須取消MEMORY_TARGET和MEMORY_MAX_TARGET初始化引數的設定。例如,要取消資料庫例項的引數設定,可以使用ALTER SYSTEM RESET命令。

2.  自動記憶體管理(AMM)和HugePages是不相容的。當使用AMM時,整個SGA記憶體是透過在/dev/shm 下建立檔案分配的當Oracle資料庫使用AMM分配SGA時,不會保留HugePages。要在Oracle資料庫11g及以上版本上使用HugePages,必須禁用AMM。

3. 如果在32位環境中使用VLM(Very Large Memory),則不能將HugePages用於資料庫緩衝區快取。可以將HugePages用於SGA的其他部分,如shared_pool、large_pool等。VLM(buffer cache)的記憶體分配是使用共享記憶體檔案系統(ramfs/tmpfs/shmfs)完成的。記憶體檔案系統不保留或使用HugePages。

4.  在系統啟動後,HugePages不受分配或釋放的約束,除非系統管理員透過修改可用頁面的數量或修改池大小來更改HugePages配置。如果在系統啟動期間沒有在記憶體中保留所需的空間,則HugePages分配失敗。

5.  確保正確配置了HugePages,因為如果應用程式沒有使用足夠多的HugePages, HugePages將不會被使用,但任然佔用記憶體空間,此時會使用其他非 HugePages的記憶體,因此系統可能會耗盡記憶體。

6. 如果在例項啟動時沒有足夠的HugePages,並且初始化引數use_large_pages被設定為only,那麼資料庫將無法啟動,並且一個警報日誌訊息將提供關於HugePages的必要資訊。

 

如何在Linux上使用HugePages

要使Oracle資料庫能夠在Linux上使用large pages(有時稱為HugePages),需要設定vm.nr_hugepages核心引數,用於指定要保留的HugePages的數量。 必須指定足夠的HugePages來容納資料庫例項的整個SGA(一般比SGA大十幾兆就夠了,多了會浪費記憶體空間,但是本人在工作中發現極少部分系統的SGA大小波動,有時會導致多十幾兆也不夠用,導致 HugePages失效發生記憶體洩漏,因此把 HugePages多設定128M就再沒發生過記憶體洩漏。要確定所需的引數值,需將例項的SGA大小除以大頁的大小,然後將結果四捨五入到最接近的整數。

要確定預設的HugePages大小,執行以下命令:

# grep Hugepagesize /proc/meminfo

例如,如果/proc/meminfo列出的HugePages大小為2 MB,而例項的總SGA大小為1.6 GB,那麼設定vm.nr_hugepages核心引數為820 (1.6 GB / 2 MB = 819.2)。

 

如何在Linux上配置HugePages

1.執行以下命令來確定核心是否支援HugePages:

$ grep Huge /proc/meminfo

2.在/etc/security/limit .conf檔案中編輯memlock設定。memlock設定以KB為單位指定, 當啟用HugePages記憶體時,最大鎖定記憶體限制應該至少設定為當前RAM的90% ,當禁用HugePages記憶體時,應該至少設定為3145728 KB (3 GB)。例如,如果你安裝了64 GB的記憶體,那麼新增以下條目來增加最大的鎖定記憶體地址空間:

*   soft   memlock    60397977

*   hard   memlock    60397977

也還可以將memlock的值設定得高於SGA要求。

3.再次以oracle使用者身份登入,執行ulimit -l命令,驗證新的memlock設定:

$ ulimit - l

60397977

4.執行以下命令顯示Hugepagesize變數的值:

$ grep Hugepagesize /proc/meminfo

5.執行hugepages_settings.sh指令碼來計算hugepages配置的值

6.將以下條目新增到/etc/sysctl.conf檔案中,其中的值是HugePages值

vm.nr_hugepages =<value>

7.重新啟動OS和例項

8.執行以下命令檢查可用的hugepages(1 or 2 page空閒):

$ grep Huge /proc/meminfo

注意:如果不能使用nr_hugepages去設定HugePages分配,那麼可用記憶體可能會被分割。需重新啟動伺服器,以便使Hugepages分配生效。


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

相關文章