linux中与Oracle有关的内核参数详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen3888015/article/details/8470642

 http://wenku.baidu.com/view/f7a75e4f2e3f5727a5e96291.html

http://an41922358.blog.163.com/blog/static/114061562201010103462807/
http://blog.sina.com.cn/s/blog_57854cd70100nt2d.html
http://www.esojourn.org/blog/read.php/343.htm
http://www.testin.cn/portal.action?op=Portal.index
http://lschou88.blog.163.com/blog/static/172959246201122121057758/
http://hi.baidu.com/abp0109/item/b809e0ddd115cb10d68ed079
http://blog.csdn.net/miyatang/article/details/7410249
http://dbanotes.net/Oracle/ORA-03113.htm
http://wenku.baidu.com/view/755ddc25bcd126fff7050bdc.html
http://blog.csdn.net/lpioneer/article/details/6109933
http://winhyt.iteye.com/blog/786598
http://www.linuxidc.com/Linux/2009-12/23622.htm
http://blog.163.com/wspjing@126/blog/static/1177205342012571503988/
http://www.cnblogs.com/netsql/articles/1745978.html
http://www.cnblogs.com/netsql/articles/1745978.html

 http://www.cnblogs.com/huangfox/archive/2012/04/01/2428947.html

http://space.itpub.net/133735/viewspace-710117

http://liuskysun.blog.163.com/blog/static/99812978201241421317103/

http://www.linuxidc.com/Linux/2012-01/52150.htm

http://space.itpub.net/133735/viewspace-710117

http://www.cnblogs.com/mecity/archive/2011/10/19/2218250.html

http://blog.sina.com.cn/s/blog_9c5dff2f01012n0f.html

http://now51jq.blog.51cto.com/3474143/776535

http://www.cnblogs.com/xiaogangqq123/archive/2011/04/26/2029426.html

http://www.cnblogs.com/xiaogangqq123/archive/2011/04/26/2029426.html

http://hi.baidu.com/maxc224/item/fbe6d56949208131ad3e83c8

安装Oracle的时候需要调整linux内核参数,但是各参数代表什么含义呢,下面做详细解析。

Linux安装文档中给出的最小值:

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 = 1048586


各参数详解:

kernel.shmmax

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32linux系统:可取最大值为4GB4294967296bytes-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为429496729532位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

64linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887SGA肯定会包含在单个共享内存段中。 

kernel.shmall

    该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZESGA_TARGET12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G

kernel.shmmni

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

fs.file-max

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr

      此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

kernel.sem

kernel.sem = 250 32000 100 128为例:

       250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

       32000是参数semmns的值,表示系统内可允许的信号量最大数目。

       100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

       128是参数semmni的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range

    表示应用程序可使用的IPv4端口范围。

net.core.rmem_default

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max表示套接字发送缓冲区大小的最大值。




近在鼓捣红帽,刚搞定了个问题,留个记录。
开启oracle数据库出现:
ORA-27154: post/wait create failed
ORA-27300: OS system dependentoperation:semget failed withstatus: 28
 

  无法获得操作系统的信号量。信号量相当于OS的内存锁,类似于oracle中的latch,每个进程要获取操作系统内存时(不是PGA或SGA),需要先获取到信号量才能申请内存。为了能保证每个进程不被阻塞,所以最好每个进程能分配到2个信号量。由于我们修改了oracle的processes参数,oracle安装建议这个参数一般设置为processes*2+15是比较保险的。检查该参数发现为300多,调整该参数为setsemsys:seminfo_semmns=1024,数据库正常启动。
ORA-27301: OS failure message: Nospace left on device
ORA-27302: failure occurred at:sskgpcreates
诊断:由于processed过大造成信号量不够
解决:
sem其实是semaphores的缩写,查看当前设置
[oracle@ebsse oracle]$ cat /proc/sys/kernel/sem
250 32000 100 128
4个数据分别对应
SEMMSL SEMMNS SEMOPM SEMMNI
如当oracle DB初始化参数文件中PROCESSES参数设置较大时,需要调整SEMAPHORES设置
SEMMSL应该设置为服务器中各个实例中最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。
SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNS参数应为(5010*128)=641280。
SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010
更改当前SEMAPHORES参数设置:
[root@ebsse oracle]# echo "5010 641280 5010 128" >/proc/sys/kernel/sem
--echo "810 103680 810 128" >/proc/sys/kernel/sem
[root@ebsse oracle]# cat /proc/sys/kernel/sem
5010 641280 5010 128
如需启动时自动应用,可在/etc/sysctl.conf增加:
kernel.sem =5010 641280 5010 128
 sysctl -p



刚装好的oracle,系统重启后加载不了,情形如下:

[oracle@localhost ~]$ sqlplus '/as sysdba'

SQL*Plus: Release 11.2.0.1.0 Production on Sat Apr 7 15:56:14 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

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: sskgpsemsper

 

在网上搜了一圈,发现是linux内核参数设置不对。

oracle 11g的内核参数要求,请参考oracle官方文档:http://docs.oracle.com/cd/B28359_01/install.111/b32285/toc.htm#CEGFBCFD

具体在我碰到的情形,系统设置是:

[root@localhost ~]# /sbin/sysctl -a|grep sem

kernel.sem = 250        100   100     128

而实际上,安装Oracle11gR2对sem参数的需求是:

semmsl:250

semmns:32000

semopm:100

semmni:128

解决办法如下:

使用文本编辑器,编辑文件/etc/sysctl.conf(这种方式可以保证重启后修改的参数任然有效),修改类似下面的内容:

(下面的内容来自与oracle官网,不同版本参数可能不同,请参靠官网)

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


使用下面的命令检查配置:

/sbin/sysctl -p
好了,现在可以加装oracle了。建议重启下系统,验证下配置是否任然有效。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页