Linux下安裝oracle數據庫內核參數說明

在安裝數據庫時需要配置以下內核參數:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

引用自:https://docs.oracle.com/cd/E11882_01/install.112/e47689/pre_install.htm#LADBI1187

信號量和共享內存是兩組截然不同的操作系統資源。信號量是Oracle用於進程間通信的系統資源,它們佔用相對較小的內存空間,而共享內存用於包含SGA並且可以佔用大部分物理內存。

aio-max-nr:所有活動異步 I/O 上下文中可允許的最多事件數。默認值爲 65536;
file-max:當前內核可以打開的最大的文件句柄數;
shmmax:以字節爲單位規定內核可允許的最大共享內存段。64位默認值爲 68719476736;32位默認值爲 4294967295。注:但內核支持的值比這個值要多得多,oracle中最小配置爲536870912,64位最大值爲物理內存-1字節,32位最大值爲小於4GB-1個字節的值或4294967295,推薦設置爲物理內存大小的1/2;
shmall:以字節爲單位規定一次在該系統中可以使用的共享內存總量。64位默認值爲4294967296;32位默認值爲 268435456。oracle推薦的最小值爲:2097152,在內存較小時可以使用小於2097152的值,內存較大時(超過8G)需要通過以下公式進行計劃:公式1:memtotal/pagesize。公式2:(SHMMAX/getpagesize()*(SHMMNI/16))。
shmmni:系統範圍內最大共享內存段數量。在 64 位和 32 位架構機器中的默認值都是 4096
sem:即semaphores縮寫。共有四個值與之對應,oracle建議的值爲kernel.sem = 250 32000 100 128 ,分別對應:
SEMMSL | maximum number of semaphores in a semphore set   | 250   |定義每個Oracle數據庫的最大信號量數。|取值範圍1 – 65536
SEMMNS | maximum number of semphores in the system        | 32000 |定義系統上的最大信號量。            |取值範圍1 – 2147483647  
SEMOPM | maximum number of operations per semop(P) call   | 100   |定義每個semop調用的最大操作數。     |取值範圍100
SEMMNI | maximum number of semaphore sets in system       | 128   |定義整個系統中信號量集的最大數量    |取值範圍1 – 32768
規則:
SEMMNI*SEMMSL>=SEMMNS,SEMMNS=系統中每個實例process+10之和+2*max(process)

操作系統與sysctl中kernel.sem參數的對應關係

$ ipcs -ls

------ Semaphore Limits --------
max number of arrays = 128      // SEMMNI
max semaphores per array = 250      // SEMMSL
max semaphores system wide = 32000     // SEMMNS
max ops per semop call = 100    // SEMOP
semaphore max value = 32767

與信號量相關的問題:
問題1:

SQL> startup nomount
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates

[root@prodb linux]# ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 0          root       600        1         
0x00000000 65537      root       600        1         
0x9a31ff94 1507331    oracle     640        154 
本例中154>max number of arrays = 128需要調整SEMMNI值爲200及以上。

問題2:

Getting ORA-600 [OSDEP_INTERNAL] errors while starting up the database:

ORA-00600: internal error code, arguments: [OSDEP_INTERNAL],
[], [], [], [], [], [], []
ORA-27302: failure occurred at: skgpwreset1
ORA-27303: additional information: invalid shared ctx
ORA-27146: post/wait initialization failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpsemsper

semmns值太小,修改爲:kernel.sem = 256 32768 100 228

信號量的刪除

信號量或共享內存錯誤主要出現在實例啓動時(特別是'startup nomount'階段)。這是Oracle嘗試獲取實例的信號量和共享內存的唯一時間。在正常的數據庫操作期間,很少出現與信號量或共享內存相關的錯誤。發生這些錯誤的最常見情況是在創建新數據庫期間。但是,有時當Oracle實例崩潰時,操作系統可能無法釋放共享內存段。這限制了實例可用於再次啓動的共享內存總量。在這種情況下,您需要手動刪除這些段。

[oracle@prodb ~]$ $ORACLE_HOME/bin/sysresv

IPC Resources for ORACLE_SID "PROD3" :
Shared Memory:
ID              KEY
1966083         0x00000000
1998852         0x00000000
2031621         0x4db7973c
Semaphores:
ID              KEY
1507331         0x9a31ff94
Oracle Instance alive for sid "PROD3"

Linux: 
% ipcrm shm 2031621 1998852 1966083

Other Unix: 
% ipcrm -m 12189717
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章