在安裝資料庫時需要配置以下核心參數:
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及以上。
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
[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