Configuring Kernel Parameters & Oracle Installation Owner Shell Limits

数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块。而操作系统则是Oracle稳定运行与最大化性能的基石。本文主要描述基于Linux系统下 Oracle 内核参数的配置。
    校验下面的列表中显示的内核参数的值被设置为大于或等于下面所显示的最小值。
    如果你的系统中下面的任意参数的当前值已经大于或高于下面列出的值,请不要做任何修改。

下面的步骤给出了如何去校验并设置这些参数的值。
    通过执行下面的命令进行校验
    /sbin/sysctl -a | egrep "kernel.shmall|kernel.shmmax|kernel.shmmn|kernel.sem"
    然后比较下表所列出的值
注意:下表显示的是内核参数以及shell 限制所需的最小值。对于生产数据库,Oracle建议去调整这些值使得数据库性能达到最优。有关优化内核参数更多信息请参考操作系统相关文档。

Oracle 内核参数参考值
Parameter
Minimum Value
Recommended value
File
semmsl
semmns
semopm
semmni
250
32000
100
128
Set only if those that are set by OS or other applications are lower
/proc/sys/kernel/sem
shmall
2097152
shmmax/page_size
usually page_size=4
/proc/sys/kernel/shmall
shmmax
Minimum of the following values:
·       Half the size of the memory
·       4GB - 1 byte
Note: The minimum value required for shmmax is 0.5 GB. However, Oracle recommends that you set the value of shmmax to 2.0 GB for optimum performance of the system.
Half of RAM or if swap file is less then half of RAM the size of swap file
/proc/sys/kernel/shmmax
shmmni
4096
/proc/sys/kernel/shmmni
file-max
512 * PROCESSES
/proc/sys/fs/file-max
ip_local_port_range
Minimum:9000
Maximum: 65000
/proc/sys/net/ipv4/ip_local_port_range
rmem_default
262144
/proc/sys/net/core/rmem_default
rmem_max
4194304
/proc/sys/net/core/rmem_max
wmem_default
262144
/proc/sys/net/core/wmem_default
wmem_max
1048576
/proc/sys/net/core/wmem_max
tcp_wmem
262144
/proc/sys/net/ipv4/tcp_wmem
tcp_rmem
4194304
/proc/sys/net/ipv4/tcp_rmem

校验内核参数
    按照下面的步骤去查看指定参数的值,如果有必要的话对其进行修改
    执行下表中相应的命令来显示这些内核参数的值,并标记该参数的值是否需要修改。
Parameter
Command
semmsl, semmns, semopm, and semmni
# /sbin/sysctl -a | grep sem
This command displays the value of the semaphore parameters in the order listed.
shmall, shmmax, and shmmni
# /sbin/sysctl -a | grep shm
This command displays the details of the shared memory segment sizes.
file-max
# /sbin/sysctl -a | grep file-max
This command displays the maximum number of file handles.
ip_local_port_range
# /sbin/sysctl -a | grep ip_local_port_range
This command displays a range of port numbers.
rmem_default
# /sbin/sysctl -a | grep rmem_default
rmem_max
# /sbin/sysctl -a | grep rmem_max
wmem_default
# /sbin/sysctl -a | grep wmem_default
wmem_max
# /sbin/sysctl -a | grep wmem_max
tcp_wmem
# /sbin/sysctl -a | grep tcp_wmem
tcp_rmem
# /sbin/sysctl -a | grep tcp_rmem

修改内核参数   
    如果上述查询的内核值小于最小值,按照下面的步骤进行修改:
    使用任意的文本编辑器编辑/etc/sysctl.conf 文件, 添加或编辑下列类似的行:
    注:仅仅修改你需要调整的参数。对于信号量参数 (kernel.sem), 你必须指定所有的四个值。 如果当前的值大于最小值,那么使用或保留当前值。
        fs.file-max = 512 * PROCESSES
        kernel.shmall = 2097152
        kernel.shmmax = 2147483648
        kernel.shmmni = 4096
        kernel.sem = 250 32000 100 128
        or
        kernel.sem = 250 256000 100 1024
        net.ipv4.ip_local_port_range = 1024 65000
        net.core.rmem_default = 4194304
        net.core.rmem_max = 4194304
        net.core.wmem_default = 262144
        net.core.wmem_max = 262144
        net.ipv4.tcp_wmem = 262144 262144 262144
        net.ipv4.tcp_rmem = 4194304 4194304 4194304
    注:参数shmmax 最小值是 0.5 GB。然而 Oracle 建议设置该参数的值到2GB去最大化系统性能。
    在/etc/sysctl.conf文件里指定的这些参数值,重新启动系统后依然被保留。 然而在 SUSE Linux Enterprise Server 系统中,重新启动系统前输入下面的命令来确保系统启动时读到 /etc/sysctl.conf 文件:
        # /sbin/chkconfig boot.sysctl on
    输入下面的命令以使得当前修改的这些内核参数的值立即生效:
        # /sbin/sysctl -p
    上面的这个命令同时可以看到刚刚设置的参数及值,如果不正确再次编辑该文件并输入正确的值。
    可以通过命令/sbin/sysctl -a 显示当前所有可用值.
    在 SUSE 系统中,输入下面的命令使得系统读取/etc/sysctl.conf文件当系统启动的时候:
        # /sbin/chkconfig boot.sysctl on
    在 SUSE 系统中,你必须输入oinstall 组的gid作为参数 /proc/sys/vm/hugetlb_shm_group的值. 主要是为oinstall组内的成员授予许可去创建共享内存段
    如下面的示例,oinstall组id为501
        # echo 501 > /proc/sys/vm/hugetlb_shm_group
    运行上述命令后,使用vi添加下列文本到 /etc/sysctl.conf,以允许 boot.sysctl 随操作系统启动时运行:
        vm.hugetlb_shm_group=501
    注:仅仅一个组能够被定义给vm.hugetlb_shm_group.
    一旦在/etc/sysctl.conf 文件更新参数后,要么重新启动计算机或者运行命令 sysctl -p 激活 /etc/sysctl.conf 文件的新值,并使之生效。

为Oracle 用户设置shell限制
    为提高oracle性能,必须为oracle用户增加下列shell限制:

Shell Limit
   Item in limits.conf   
Hard Limit
Maximum number of open file descriptors
   nofile
65536
Maximum number of processes available to a single user
   nproc
16384
    增加shell 限制:
    添加下列行到/etc/security/limits.conf 文件:
        oracle              soft    nproc   2047
        oracle              hard    nproc   16384
        oracle              soft    nofile  1024
        oracle              hard    nofile  65536
    添加或编辑/etc/pam.d/login 文件,当下面的条目不存在时:
        session    required     pam_limits.so
    取决于Oracle用户缺省的shell环境,为缺省的shell启动文件作下列更改:

    对于Bourne, Bash, or Korn shell, 添加下列行到/etc/profile 文件 (SUSE Linux 则添加到/etc/profile.local):
        if [ $USER = "oracle" ]; then
                if [ $SHELL = "/bin/ksh" ]; then
                      ulimit -p 16384
                      ulimit -n 65536
                else
                      ulimit -u 16384 -n 65536
                fi
        fi

原文出处:Oracle kernel parameters tuning on Linux
标签: 暂无标签
李波Joker

写了 46 篇文章,拥有财富 503,被 8 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

成为第一个吐槽的人

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈