Linux 内核参数及Oracle相关参数调整

 

我们一般在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.shm all ----

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

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

3. Oracle 下需要做调整的参数
SGA_MAX_SI ZE
SGA_TARGET
DB_CACHE_S IZE


SGA_MAX_SZ IE 为实例允许使用的sg a 上限,一个静态参数, 是不能动态修改的.
SGA_TARGET 为10g 推出的sga 自动 管理的参数,动态参数,可 以动态修改.
sga_max_si ze 与 SGA 各组件大小的关系
设置的 sga_max_si ze 小于实际的SGA 中各个pool 的尺寸总和的大小,那
sga_max_si ze 的值会被oracle 自动以实际的SGA 的总尺寸代替。如果不 设置
sga_max_si ze ,oracle 会自动的以实际的SG A 的总尺寸来设置sga _max_size 的值。
设置 sga_max_si ze 的值为大于SGA 中各个pool 的尺寸总和的值:但是
sga_max_si ze 的值相对于所有可用的 物理内存来说,是一个 合理的值。sga_m ax_size
的实际的值和pfil e 中的sga_max_ size 指定的值是一样的。   

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

10g 下设置 SGA_TARGET 之后启动ASSM 特性之后, 只有以下的这些区的内 存大小动态
共享起来:
* Buffer cache (DB_CACHE_ SIZE)
* Shared pool (SHARED_PO OL_SIZE)
* Large pool (LARGE_POO L_SIZE)
* Java pool (JAVA_POOL _SIZE)
* Streams pool (STREAMS_P OOL_SIZE)
而SGA 中的其他区域的内存大 小仍然是固定不共享的
它的含义和SGA_M AX_SIZE 的一样,也表示SGA 最大的大小,于是它也 就有了一个
限制,那就是它的大小 不能大于SGA_MA X_SIZE 的大小。
Oracle10g 下, SGA_MAX_SI ZE 仍然表示SGA 的大小的上限值,而S GA_TARGET 是
SGA 的所有组件的大小的最 大值之和,即当SGA _TARGET< SGA_MAX_SI ZE 的时候,oracle
就会忽略SGA_MA X_SIZE 的值,SGA_TAR GET 也就成了SGA 的在此实例中的上限制 ,它能
动态改变大小,但是不 能够大于SGA_MA X_SIZE 的值。

有人曾经做过试验,在 某些版本中(可能在我 的版本之后的版本), 当SGA_TARGE T
< SGA_MAX_SI ZE 时,实例重启以后SG A_MAX_SIZE 就变成SGA_TAR GET 的大小了。

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

SGA_TARGET 带来一个重要的好处就 是,能使SGA 的利用率达到最佳,从 而节省内
存成本。因为ASMM 启动后,Oracle 会自动根据需要调整各 个区域的大小,大大减 少了
某些区域内存紧张,而 某些区域又有内存空闲 的矛盾情况出现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核参数优化是指通过调整Linux内核的配置参数,以提升系统性能、安全性和稳定性的过程。下面是一些常见的Linux内核参数优化方法: 1. 文件描述符限制:通过修改`/etc/security/limits.conf`文件中的`nofile`参数,增加系统允许的最大文件描述符数量。可以使用`ulimit -n`命令查看当前限制。 2. 网络参数优化:可以通过修改`/etc/sysctl.conf`文件来调整网络相关内核参数。例如,增加TCP连接的最大数量、优化TCP拥塞控制算法、增加网络缓冲区大小等。 3. 内存管理:可以通过调整内核参数来优化内存管理,如修改`vm.swappiness`参数来控制交换空间的使用、调整`vm.dirty_ratio`和`vm.dirty_background_ratio`参数来控制脏页的写回行为等。 4. 文件系统参数:可以通过修改文件系统相关内核参数来优化文件系统性能。例如,调整`fs.file-max`参数来增加系统允许的最大文件数量、调整`fs.inotify.max_user_watches`参数来增加inotify监视器的数量等。 5. CPU调度器:可以通过修改CPU调度器相关内核参数来优化系统的CPU利用率和响应性能。例如,调整`/proc/sys/kernel/sched_min_granularity_ns`和`/proc/sys/kernel/sched_wakeup_granularity_ns`参数来优化调度器的精度。 6. 硬件参数:根据具体硬件配置,可以调整一些与硬件相关内核参数,如网络接口的中断处理、磁盘调度算法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值