Linux系统里安装oracle11g时,当前期的准备工作完成后(例如相关硬件配置完毕、所需要软件包安装完毕),就需要进行Linux内核配置
内核参数大致可以分为4类:共享内存(shared memory)、信号量(semaphores)、网络(network)、打开文件(openfiles)。
1:共享内存
oracle实例启动时,调用SGA分配内存,SGA由oracle多个进程共享,这部分内存会以共享内存的形式分配,如果共享内存参数设置错误,会让oracle不能为实例分配足够的SGA 从而导致实例启动失败 具体的共享内存内核参数含义:
(1):kernel.shmmax:每个内存段的最大大小,以字节为单位,是设置共享内存时最重要的一个内核参数,其值要大于或者等于SGA_MAX_SIZE初始化参数的大小,否则SGA会由多个内存段组成,导致效率降低,另外这个参数还要不小于物理内存的1/2或2GB
(2):kernel.shmmni:系统可分配的共享内存段的最大数量。其值也是在系统中可以启动的oracle实例的最大数量,其默认值为4096,通常在生产情况下一个服务器同时启动的实例数达不到这个数字,所以默认就OK
(3):kernel.shmall:指定任意时刻,系统中可以分配的所有共享内存段的总和的最大值,也可以保留默认值
2:信号量
信号量是一种控制资源访问的方法,oracle实例主要使用信号量来控制共享内存的访问。信号量基于processes初始化参数分配,每个oracle实例启动时都要分配一个信号量集合,其中信号量数量至少要等于processes初始化参数的值,如果不能分配足够的信号量,oracle实例将不能启动
通过sem内核参数来制定各个信号量参数值 如kernel.sem=250 32000 100 128
其中等号右边4个整数分别表示semmsl、semmns、semopm、semmni的值
(1):semmsl用于指定每个信号量集合中的最大信号量个数,其值或者取其最小值100,或者为所有数据库中最大的processes参数加10,选取较大者
(2):semmns用于指定整个系统范围内信号量总数的最大值,默认值为32000,保留即可
(3):semopm用于指定每个semop()系统调用可以设置的信号量操作的最大数量,推荐10
因为semmsl指定了每个信号量集合中的最大信号量个数,而semmni指定了信号量集合的最大值,最后,系统能够分配的信号量个数决定于semmns与semmni*semmsl的较小者
(4):semmni用于指定信号量集合的最大数量 最小为100,oracle推荐取128
3:打开文件
fs.file-max用于指定每个进程可以打开的最大文件数量。oracle数据库文件在数据库运行期间一直要保持打开状态。应该设置为数据库中的数据文件个数的最大值,推荐设置为一个较大的数值 如65536
4:网络
net.ipv4.ip_local_port_range:在数据库专用服务器进程启动时,会被分配一个I端口,用来与用户进程通信,默认情况下,分配给非root用户进程的端口范围为32768~61000,对于用户数很多的数据库,需要修改这个默认值,一般可以设定为1024~65000,小于1024的端口保留给root用户启动的进程使用
另外还有两组参数用于设置socket数据发送及接受缓冲区的大小
第一组为net.ipv4.tcp_rmem及net.ipv4.tcp_wmem
net.ipv4.tcp_rmem用于指定socket数据发送缓冲区的最小值、默认值及最大值
net.ipv4.tcp_wmem用于指定socket数据接收缓冲区的最小值、默认值及最大值
两个内核参数值会在系统 运行时根据其设置自动调整
第二组为net.core.rmem_default、net.core.wmem_default、net.core.rmem_max、net.core.wmem_max 这四个内核参数用于设置socket数据发送缓冲区及接收缓冲区的默认值大小与最大大小 这几个参数默认值为:
net.core.rmem_default=110592
net.core.wmem_default=110592
net.core.rmem_max=131071
net.core.wmem_max=131071
修改内核参数指令:
vi /etc/sysctl.conf
在sysctl.conf文件末尾加入要取非默认值的参数及其对应值 保存退出后 执行以下命令生效:
sysctl -p
