Linux 下 Oracle 内核参数优化

简介:     数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块。而操作系统则是Oracle稳定运行与最大化性能的基石。

    数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,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 

 

更多参考

有关Oracle RAC请参考
    
使用crs_setperm修改RAC资源的所有者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡测试(结合服务器端与客户端)
     Oracle RAC 服务器端连接负载均衡(Load Balance)
     Oracle RAC 客户端连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
    
ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例 
    
基于Linux (RHEL 5.5) 安装Oracle 10g RAC
    
使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
    
配置非默认端口的动态服务注册
    
配置sqlnet.ora限制IP访问Oracle
     Oracle 监听器日志配置与管理
    
设置 Oracle 监听器密码(LISTENER)
     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
    
Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
    
RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份详解
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
    
Oracle 表空间与数据文件
     Oracle 密码文件
     Oracle 参数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自动化管理
     Oracle 实例和Oracle数据库(Oracle体系结构) 

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
9天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
7天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
16 3
|
14天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
17天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
13 1
|
18天前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
12 4
|
23天前
|
存储 网络协议 Linux
【Linux 解惑 】谈谈你对linux内核的理解
【Linux 解惑 】谈谈你对linux内核的理解
22 0
|
27天前
|
编解码 Linux Shell
【Shell 命令集合 系统设置 】Linux 设置Linux系统的控制台参数和属性setconsole命令 使用指南
【Shell 命令集合 系统设置 】Linux 设置Linux系统的控制台参数和属性setconsole命令 使用指南
33 0
|
27天前
|
存储 Linux Shell
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
24 0
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 向内核中加载指定的模块 insmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 向内核中加载指定的模块 insmod命令 使用指南
29 0