`
wanshuiqianshan
  • 浏览: 39379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载----Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE)

阅读更多

      我们一般在Linux 上安装 设置Oracle 数据库 或者在更换或升级硬件的时候都需要配置Linux 系统的核心参数, 然后才是调整Oracle 系统参数 。具体这些参数的实质意义是什么,为什么要做调整,如何合理调整? 带着这些问题我们做以下的一些分析以及测试。 注意: 以下的一些测试可能只适用于Linux 系统,且测试Linux 系统为64Bit,32Bit Linux 系统可能有不一样 。

测试环境: Linux AS 4.0 U5 64Bit
核心版本: 2.6.9-55.ELsmp #1 SMP x86_64


1. Linux 系统下的核心参数:
[root@ECSDB etc]# cat sysctl.conf 或者到 /proc/sys/kernel 下查看。
kernel.shmall = 2097152
kernel.shmmax = 8405194752
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144   

----- 小技巧: 修改 /etc/sysctl.conf 文件之后立刻生效命令 # sysctl -p

2. Linux 下核心参数调整  

kernel.shmmax ----

     SHMMAX Available physical memory Defines the maximum allowable size
of one shared memory segment. The SHMMAX setting should be large enough
to hold the entire SGA in one shared memory segment. A low setting can
cause creation of multiple shared memory segments which may lead to
performance degradation.


     Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。

http://www.itpub.net/showthread.php?threadid=551229&pagenumber

      论坛上的一些说法: SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。

    Steve Adams 在他的小册子中说过,在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them),性能方面就不是考虑的问题。

      当然Oralce 的建议是希望一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有甚至轻微的性能下降的隐患。

      Oracle 安装文档建议 32Bit Linux 系统设置shmmax 为32Bit 最大的限制值(setting shmmax to the 32-bit number limit),也就是4G 。

       所以一般来说,1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,那么SGA 肯定在一个共享内存段中,32Bit Linux 系统物理内存大于4G 的设置为4G 即可 。总之,一般设置shmmax >=SGA (32Bit 系统是否支持到1.7G 以上SGA 需要注意) 。如果是64Bit 的Linux 操作系统,shmmax 设置为大于SGA_MAX_SIZE 即可。(仅供参考)

http://download-west.oracle.com/docs/html/A96167_01/pre.htm#CHDHDABJ
http://www.itpub.net/551203,1.html

Ipcs  -sa 可以看到共享内存段个数

 

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

kernel.shmmni ----
       shmmni 内核参数是共享内存段的最大数量(注意这个参数不是 shmmin,是shmmni, shmmin 表示内存段最小大小 ) 。shmmni 缺省值 4096 ,一般肯定是够用了 。

3. Oracle 下需要做调整的参数
SGA_MAX_SIZE
SGA_TARGET
DB_CACHE_SIZE


SGA_MAX_SZIE 为实例允许使用的sga 上限,一个静态参数,是不能动态修改的.
SGA_TARGET 为10g 推出的sga 自动管理 的参数,动态参数,可以动态修改.

sga_max_size 与 SGA 各组件大小的关系:
      设置的 sga_max_size 小于实际的SGA 中各个pool 的尺寸总和的大小,那么sga_max_size 的值会被oracle 自动以实际的SGA 的总尺寸代替。如果不设置sga_max_size ,oracle 会自动的以实际的SGA 的总尺寸来设置sga_max_size 的值。设置 sga_max_size 的值为大于SGA 中各个pool 的尺寸总和的值:但是
sga_max_size 的值相对于所有可用的物理内存来说,是一个合理的值。sga_max_size的实际的值和pfile 中的sga_max_size 指定的值是一样的。  

       在Oracle 10g 中引入了一个非常重要的参数:SGA_TARGET,这也是Oracle 10g的一个新特性。自动共享内存管理(Automatic Shared Memory Management ASMM),控制这一特性的,就仅仅是这个参数SGA_TARGE。设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET 指定了SGA 可以使用的最大内存大小,而SGA 中各个内存的大小由Oracle 自行控制,不需要人为指定。Oracle 可以随时调节各个区域的大小,使之达到系统性能最佳状态的个最合理大小,并且控制他们之和在SGA_TARGET 指定的值之内。一旦给SGA_TARGET 指定值后(默认为0,即没有启动ASMM),就自动启动了ASMM特性。

10g 下设置 SGA_TARGET 之后启动ASSM 特性之后, 只有以下的这些区的内存大小动态共享起来:
* Buffer cache (DB_CACHE_SIZE)
* Shared pool (SHARED_POOL_SIZE)
* Large pool (LARGE_POOL_SIZE)
* Java pool (JAVA_POOL_SIZE)
* Streams pool (STREAMS_POOL_SIZE)
      而SGA 中的其他区域的内存大小仍然是固定不共享的。它的含义和SGA_MAX_SIZE 的一样,也表示SGA 最大的大小,于是它也就有了一个限制,那就是它的大小不能大于SGA_MAX_SIZE 的大小。Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有组件的大小的最大值之和,即当SGA_TARGET< SGA_MAX_SIZE 的时候,oracle就会忽略SGA_MAX_SIZE 的值,SGA_TARGET 也就成了SGA 的在此实例中的上限制,它能动态改变大小,但是不能够大于SGA_MAX_SIZE 的值。

      有人曾经做过试验,在某些版本中(可能在我的版本之后的版本),当SGA_TARGET< SGA_MAX_SIZE 时,实例重启以后SGA_MAX_SIZE 就变成SGA_TARGET 的大小了。

      在11g 中,这个SGA_TARGET 只能设置是等于SGA_MAX_SIZE 的大小了,设置比它小,oracle 会自动帮你调整,设置比它大,那还是出错。现在可以自己想想,oracle对SGA_TARGET 的大小处理在往正确的简单的方向前进中。

      SGA_TARGET 带来一个重要的好处就是,能使SGA 的利用率达到最佳,从而节省内存成本。因为ASMM 启动后,Oracle 会自动根据需要调整各个区域的大小,大大减少了某些区域内存紧张,而某些区域又有内存空闲的矛盾情况出现。

补充:  

kernel.shmmax ----
      单个进程(process)能使用的共享内存段的最大尺寸(Bytes为单位), 一般需要根据物理内存修改,尽量让整个SGA在共享内存段中 。

kernel.shmall ----   
      该参数控制着系统一次可以使用的共享内存总量(以页为单位,即可以使用的共享内存页总数)。简言之,该参数的值始终应该至少为: ceil(SHMMAX/PAGE_SIZE)
注意:
      在 i386 平台上 Red Hat Linux 的 页面大小 为 4096 字节。但是,您可以使用 bigpages ,它支持配置更大的内存页面尺寸

kernel.shmmni ----  
      这个内核参数用于设置系统范围内共享内存段的最大个数。该参数的默认值是 4096 。这一数值已经足够,通常不需要更改 。


分享到:
评论

相关推荐

    BLOG_Oracle_lhr_【ipcs、ipcrm、sysresv、kernel.shmmax】.pdf

    BLOG_Oracle_lhr_【ipcs、ipcrm、sysresv、kernel.shmmax】.pdfBLOG_Oracle_lhr_【ipcs、ipcrm、sysresv、kernel.shmmax】.pdf

    在RHEL3上安装ORALCE9I

    [Oracle9i.Database.Release.2.--.9.2.0.4.0.for.Linux.x86].ship_9204_linux_disk1.cpio.gz [Oracle9i.Database.Release.2.--.9.2.0.4.0.for.Linux.x86].ship_9204_linux_disk2.cpio.gz [Oracle9i.Database.Release...

    linux环境下oracle10g安装

    linux环境下oracle10g安装 1.连接putty 2.用root登录后建立用户和组 新增oinstall、dba用户组,oracle用户 [root@oracle10g /]# groupadd oinstall [root@oracle10g /]# groupadd dba [root@oracle10g /]# useradd ...

    linux下oracle优化

    下面的步骤给出了如何去校验并设置这些参数的值。 通过执行下面的命令进行校验 /sbin/sysctl -a | egrep "kernel.shmall|kernel.shmmax|kernel.shmmn|kernel.sem...有关优化内核参数更多信息请参考操作系统相关文档。

    RedHat Enterprise Linux5.5上安装Oracle10g.pd

    Linux 内核非常出色。与大多数其他 *NIX 系统不同,Linux 允许在系统启动和运行时修 改大多数内核参数。...注意,EL 5 已经为 kernel.shmall 和 kernel.shmmax 定义了值。如果默认值等于或大于要求值,则使用默认值

    Redhat as4 上安装oracle10g

    1、配置系统内核参数,以root用户登录,修改在/etc/sysctl.conf文件,在该文件中添加以下参数: kernel.shmall = 2097152 kernel.shmmax = 536870912 (512物理内存的标准) kernel.shmmni = 4096 kernel.sem = 250 ...

    Oracle安装内核参数设置

    安装oracle内核参数说明及设置  kernel.shmmax  说明:  · Linux进程可以分配的单独共享内存段的大值(byte)  · 64位的linux操作系统,设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值/或者1/2的物理...

    11g安装guide.doc

    配置内核参数 [root@localhost ~]# gedit /etc/sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 kernel.shmmni = 4096 kernel.sem = 250 ...

    Redhat 6.2 下 oracle 11g R2的安装详解第1/2页

    1、修改系统内核参数 修改sysctl.conf文件 在文件/etc/sysctl.conf中添加以下内容: kernel.sem = 250 32000 100 128 kernel.shmall = 2097152 kernel.shmmax = 2147483648  kernel.shmmni = 4096 fs.aio-max-nr = ...

    浅谈安装ORACLE时在Linux上设置内核参数的含义

    前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰。 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内存相关的...

    ansible-role-linux-for-postgresql:在安装PostgreSQL之前以最佳方式配置Linux

    SHMMAX:SHMMAX是一个内核参数,用于定义Linux进程可以分配的单个共享内存段的最大大小。 SHMALL:是另一个kernel_parameter,用于定义系统范围的共享内存页面总数。 巨大的页面:巨大的页面使Linux可以支持大于4...

    rac实施过程(linux)

    kernel.shmmax=536870912 kernel.shmmni=4096 kernel.sem=250 32000 100 128 fs.file-max=65536 net.ipv4.ip_local_port_range=1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 ...

    oracle asm rac

    chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1 chmod -R 775 /u01/app/oracle/product/11.2.0/db_1 mkdir –p /u01/software chmod -R 775 /u01 iscsi共享存储规划 (分为server端和client端,...

    oracle11g 最终版本11.2.0.4安装详细过程介绍

    –安装背景 上次碰到问题,cursor:mutex S导致的load过高, 有说可以升级到11.2.0.4就能避免这种问题,所以...kernel.shmmax = 277495689510912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.core.rm

    MQ服务消息队列介绍

    (5)调整系统参数(视需要而定) 修改最大共享内存,命令如下: cat /proc/sys/kernel/shmmax echo 268435456 &gt;/proc/sys/kernel/shmmax 修改最大文件句柄,命令如下: cat /proc/sys/fs/file-max echo ...

    apache启动报 shmget() failed: Invalid argument的解决方法

    经检查为kernel.shmmax设置未生效(copy另一系统的,数值设置大了) 如下: 代码如下:[root@localhost ~]# sysctl -a | grep shmmkernel.shmmni = 4096kernel.shmmax = 0 [root@localhost ~]# vi /etc/sysctl....

    Linux /Unix 共享内存

    在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。 一、应用 共享内存的使用,主要有...

    sybase 11.03 for scounix5

    SHMMAX: 输入新值(如:67108864) 退出 2. 激活异步I/O #cd /etc/conf/sdevice.d #vi aio 将“N"改为”Y" #vi suds 将“N"改为”Y" #vi /etc/rc2 在最后一行加入下面一行 /etc/suds_ctrl -a 100 (注意:...

    Mac 操作技巧

    Mac 操作技巧,里面涵盖了很多大家常用的Mac操作技巧。熟练掌握有助于对Mac更好的理解和提高您的工作效率!

    php 启动时报错的简单解决方法

    php 启动报错 复制代码 代码如下: [root@abc lnmp]# service ... Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax. [04-Dec-2013 19:06:44] NOTICE: PHP m

Global site tag (gtag.js) - Google Analytics