background image

Linux 内核参数优化

   Oracle 不同平台的数据库安装指导为我们部署 Oracle 提供了一些系统参数设置的建议值,
然而建议值是在通用的情况下得出的结论,并非能完全满足不同的需求。使用不同的操作系
统内核参数将使得数据库性能相差甚远。本文描述了

linux 下几个主要内核参数的设置,供

参考。

  1、Linux 共享内存  共享内存是在系统内核分配的一块缓冲区,多个进程都可以访问该缓
冲区。
  由于进程可以直接读写内存,避免了在内核空间与用户空间的切换,所以共享内存读写效
率很高。
  当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。共享内存类
似与

windows 环境编程中的内存映像文件。

  Linux 的 IPC(Interprocess Communication)通信机制:是指多个进程之间相互通信,交换信息
的方法。
  通过使用共享内存允许两个或多个进程共享一定的存储区,因为不需要拷贝数据。
  Oracle SGA 即是基于此方式来实现 Oracle 进程之间数据共享。因此 SGA 的合理设置对
Oracle 性能有重大的影响。
  可以通过 ipcs -lm 来查看所有的共享内存设置。
 
   2、参数修改的方式  由于 Linux 的内核参数信息都存在内存中,因此可以通过命令直接修
改,并且修改后直接生效。
    但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动

/etc/sysctl.conf 文件中读取内核参数。

  如果是临时修改,则可以采用 echo 或 sysctl -w 方式,如果永久修改,建议修改 sysctl.conf
文件
  下面是几种参数修改方式的描述
  a、echo 方式    echo <value> > <file_name>   
    将值输出到文件,该方式使得内核参数修改立即生效,无需重启系统,但重启后失效(以
sysctl.conf 永久配置文件为准)
  b、sysctl 命令方式    
    sysctl -w <parameter_name>=<value>
    使用 sysctl 命令行方式是修改的运行时的内核参数,参数值当重启后失效,同上
  c、永久性更改    vi /etc/sysctl.conf  #直接修改对应参数的值,然后执行命令使更改立即生效
# sysctl -p
    echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf  #不太建议该方式,这样子同一参数
会有多个值出现在

sysctl.conf

 
3、sysctl.conf 配置文件  几乎所有的重要参数都保持在 sysctl.conf 配置文件中,因此对于永
久性修改,直接修改该文件是最简单不过的方式了
  下面是基于 x86_64 RHEL5 下 Oracle 给出的参数建议值
  Oracle10gR2 On RHEL 5/OEL 5 (x86_64) [ID 421308.1]
    kernel.shmall = physical RAM size / pagesize 
      For most systems, this will be the value 2097152. See Note 301830.1 for more information.