Linux内核参数以及Oracle参数调整

本文探讨了Linux系统核心参数与Oracle数据库参数的合理配置方法,特别是针对64位Linux系统。重点分析了shmmax、shmall等参数的意义及其对Oracle SGA的影响,并介绍了Oracle 10g中新引入的SGA自动管理特性。

出处:http://tolywang.itpub.net/post/48/464780
---------------------------------------------------------------
我们一般在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系统设置shmmax32Bit最大的限制值(setting shmmax to the 32-bit number limit),也就是4G

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

如果是64BitLinux操作系统,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_SIZESGA_TARGET 12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)。

kernel.shmmni ----

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

tolywang 发表于:2008.06.21 17:22 ::分类: ( Oracle数据库管理 ) ::阅读:(516次) :: 评论 (6) :: 引用 (0)
re: Linux内核参数以及Oracle参数调整 [回复]

3. Oracle下需要做调整的参数
SGA_MAX_SIZE
SGA_TARGET
DB_CACHE_SIZE
SHARED_POOL_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

tolywang 评论于:2008.06.23 11:07
re: Linux内核参数以及Oracle参数调整 [回复]

Oracle10g下, SGA_MAX_SIZE仍然表示SGA的大小的上限值,而SGA_TARGET是SGA的所有组件的大小的最大值之和,即当SGA_TARGET

tolywang 评论于:2008.06.23 11:08
re: Linux内核参数以及Oracle参数调整 [回复]

3. Oracle下需要做调整的参数
SGA_MAX_SIZE
SGA_TARGET
DB_CACHE_SIZE
SHARED_POOL_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

tolywang 评论于:2008.06.23 11:08
re: Linux内核参数以及Oracle参数调整 [回复]

Oracle10g下, SGA_MAX_SIZE仍然表示SGA的大小的上限值,而SGA_TARGET是SGA的所有组件的大小的最大值之和,即当SGA_TARGET

tolywang 评论于:2008.06.23 11:09
re: Linux内核参数以及Oracle参数调整 [回复]

Oracle10g下, SGA_MAX_SIZE仍然表示SGA的大小的上限值,而SGA_TARGET是SGA的所有组件的大小的最大值之和,
即当SGA_TARGET

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-616933/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-616933/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值