linux 上的 shmmax 参数

shmmax内核参数定义单个共享内存段的最大值,如果该参数设置小于Oracle SGA设置,那么SGA就会被分配多个共享内存段。这在繁忙的系统中可能成为性能负担,带来系统问题。

Linux上该参数的缺省值通常为32M。

查看当前shmmax
[root@localhost ~]# more /proc/sys/kernel/shmmax
1073741824

通过ipcs命令查看共享内存的分配,如果是默认的32M,可以看到Oracle分配了多个共享内存段以满足SGA设置的需要

[root@localhost ~]# ipcs  -sa

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0xb865fd98 360449     oracle9   640        171966464  18
0x00000000 262146     oracle9   600        393216     2          dest

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x6428328c 229376     oracle9   640        154

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

使用pmap我们可以看到每个共享内存段的地址空间

[root@localhost ~]# ps -ef |grep test9i
oracle9   3421     1  0 Jan05 ?        00:00:06 ora_pmon_test9i
oracle9   3423     1  0 Jan05 ?        00:00:03 ora_psp0_test9i
oracle9   3425     1  0 Jan05 ?        00:00:00 ora_mman_test9i
oracle9   3427     1  0 Jan05 ?        00:00:05 ora_dbw0_test9i
oracle9   3429     1  0 Jan05 ?        00:00:05 ora_lgwr_test9i
oracle9   3431     1  0 Jan05 ?        00:00:27 ora_ckpt_test9i
oracle9   3433     1  0 Jan05 ?        00:00:28 ora_smon_test9i
oracle9   3435     1  0 Jan05 ?        00:00:00 ora_reco_test9i
oracle9   3437     1  0 Jan05 ?        00:00:41 ora_cjq0_test9i
oracle9   3439     1  0 Jan05 ?        00:00:17 ora_mmon_test9i
oracle9   3441     1  0 Jan05 ?        00:00:11 ora_mmnl_test9i
oracle9   3443     1  0 Jan05 ?        00:00:00 ora_d000_test9i
oracle9   3445     1  0 Jan05 ?        00:00:00 ora_s000_test9i
oracle9   3449     1  0 Jan05 ?        00:00:00 ora_qmnc_test9i
oracle9   3461     1  0 Jan05 ?        00:00:00 ora_q000_test9i
oracle9   3463     1  0 Jan05 ?        00:00:00 ora_q001_test9i
oracle9   3872     1  0 Jan05 ?        00:00:06 oracletest9i (LOCAL=NO)
oracle9   7286     1  0 11:23 ?        00:00:00 ora_j000_test9i
root      7289  7214  0 11:23 pts/1    00:00:00 grep test9i
[root@localhost ~]# pmap 3427
3427:   ora_dbw0_test9i
0017c000     72K r-x--  /libnsl-2.3.4.so
0018e000      8K rw---  /libnsl-2.3.4.so
00190000      8K rw---    [ anon ]
0099e000     84K r-x--  /ld-2.3.4.so
009b3000      4K r----  /ld-2.3.4.so
009b4000      4K rw---  /ld-2.3.4.so
00b07000      8K r-x--  /libdl-2.3.4.so
00b09000      8K rw---  /libdl-2.3.4.so
08048000  76968K r-x--  /oracle
0cb72000    324K rw---  /oracle
0cbc3000    512K rw---    [ anon ]
20000000 167936K rw-s-    [ shmid=0x58001 ]
b6f56000     36K r-x--  /libnss_files-2.3.4.so
b6f5f000      8K rw---  /libnss_files-2.3.4.so
b6f75000      4K rw-s-  /hc_test9i.dat
b6f76000     40K rw---  /zero
b6f80000     64K rw---  /zero
b6f90000     64K rw---  /zero
b6fa0000     64K rw---  /zero
b6fb0000    128K rw---  /zero
b6fd0000     64K rw---  /zero
b6fe0000     64K rw---  /zero
b6ff0000     24K rw---  /zero
b6ff6000   3048K rw---    [ anon ]
b72f0000   1160K r-x--  /libc-2.3.4.so
b7412000      4K r----  /libc-2.3.4.so
b7413000     12K rw---  /libc-2.3.4.so
b7416000      8K rw---    [ anon ]
b7418000     56K r-x--  /libpthread-0.10.so
b7426000      8K rw---  /libpthread-0.10.so
b7428000    268K rw---    [ anon ]
b746b000    132K r-x--  /libm-2.3.4.so
b748c000      8K rw---  /libm-2.3.4.so
b748e000      4K r-x--  /libaio.so.1.0.0
b748f000      4K rw---  /libaio.so.1.0.0
b74a5000   1904K r-x--  /libnnz10.so
b7681000    152K rw---  /libnnz10.so
b76a7000      8K rw---    [ anon ]
b76a9000     88K r-x--  /libdbcfg10.so
b76bf000      8K rw---  /libdbcfg10.so
b76c1000     32K r-x--  /libclsra10.so
b76c9000      4K rw---  /libclsra10.so
b76ca000      4K rw---    [ anon ]
b76cb000   7028K r-x--  /libjox10.so
b7da8000    260K rw---  /libjox10.so
b7de9000      4K rw---    [ anon ]
b7dea000    344K r-x--  /libocrutl10.so
b7e40000     16K rw---  /libocrutl10.so
b7e44000      4K rw---    [ anon ]
b7e45000    268K r-x--  /libocrb10.so
b7e88000      4K rw---  /libocrb10.so
b7e89000    436K r-x--  /libocr10.so
b7ef6000      4K rw---  /libocr10.so
b7ef7000      4K r-x--  /libskgxn2.so
b7ef8000      4K rw---  /libskgxn2.so
b7ef9000    880K r-x--  /libhasgen10.so
b7fd5000     20K rw---  /libhasgen10.so
b7fda000     16K rw---    [ anon ]
b7fde000    128K r-x--  /libskgxp10.so
b7ffe000      8K rw---  /libskgxp10.so
bfffb000     20K rwx--    [ stack ]
ffffe000      4K -----    [ anon ]
 total   262860K

了避免多个共享内存段,我们可以修改shmmax内核参数,使SGA存在于一个共享内存段中。
修改 /etc/sysctl.conf
加一行
kernel.shmmax = 1073741824
reboot system ,then startup database

实际上,如果没有修改shmmax参数,Oracle在启动过程中就会报出以下错误:
Starting ORACLE instance (normal)
Thu Nov 17 09:27:29 2005
WARNING: EINVAL creating segment of size 0x0000000033400000
fix shm parameters in /etc/system or equivalent

你可能感兴趣的:(Unix)