【ASK_ORACLE】LOCK_SGA引數失效的解決辦法

Attack_on_Jager發表於2021-07-22

實驗環境

搭建平臺:VMware Workstation

OS:RHEL 6.10

Grid&DB:Oracle 11.2.0.4


問題描述

在Oracle啟動時設定了引數LOCK_SGA為“TRUE”,想把SGA固定到記憶體中,但是引數不生效。

使用命令“ipcs -m”檢查我們可以看到該段未鎖定在記憶體中( status未顯示“locked”):

# ipcs -m

------ Shared Memory Segments --------

###此處省略部分輸出###

key            shmid    owner  perms  bytes              nattch       status

0xf7fff118 458758  oracle   600      42815455232 1353

 

並且從啟動OS的跟蹤日誌就可以看到SHM_LOCK是由Oracle程式設定的:

10068 shmctl(196610, IPC_64|IPC_RMID, 0) = 0

10068 shmget( 0xf7fff118, 42815455232, IPC_CREAT|IPC_EXCL|SHM_HUGETLB|0600) = 458758

10068 shmctl(458758, IPC_64| SHM_LOCK, 0) = 0

 

解決辦法

排查發現OS配置了HugePages,在這種情況下,段不能被鎖定或解鎖,並且OS核心永遠不會設定鎖定標誌。因為HugePages已經把SGA固定在記憶體中了。

所以, 只需要刪除HugePages的配置引數並重啟OS就能解決

注:

如何配置 HugePages可參考文件(刪除裡面的引數並重啟即可): http://blog.itpub.net/69992972/viewspace-2764357/

完成前面的步驟後再次執行“ipcs -m”發現status變成“locked”,說明引數生效:

# ipcs -m

------ Shared Memory Segments --------

###此處省略部分輸出###

key            shmid    owner  perms  bytes               nattch   status

0xf7fff118 458758  oracle   600      42815455232  1353    locked


注:

1. 在Linux和AIX上,把Oracle(需要10gR2及更高版本)的初始化引數PRE_PAGE_SGA 和LOCK_SGA設定為“TRUE”可以將SGA固定到記憶體中且不產生swap。但是HugePages已經使SGA固定到記憶體中且不產生swap,因此不需要這些引數來再次使SGA固定。

2. 本人推薦使用 HugePages來固定SGA


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

相關文章