Linux 内核参数的大小和Oracle 有很大的关闭,比如ORA-27102的错误,就是因为内核参数的大小不当造成。具体参考Blog:
Upon startup of Linux database get ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device
http://blog.csdn.net/tianlesoftware/archive/2011/05/16/6424945.aspx
Oracle 11gR2 里也有一个类似的问题:
Oracle 11gR2 RAC ORA-00845 MEMORY_TARGET not supported on this system 解决方法
http://blog.csdn.net/tianlesoftware/archive/2010/11/17/6013777.aspx
安装Oracle的时候,可以参考Oracle 的安装文档,来设置相关的值,但是有些参数的值还是需要根据我们自己的情况来进行调整。
1. Linux 系统下的核心参数
# vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
该参数保存在/etc/sysctl.conf 下,修改该文件不需要重启OS,只需要使用如下命令:
# /sbin/sysctl -p
就可以让修改的参数生效。
2. kernel.shmmax 参数
2.1 说明
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 ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。
SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。
在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them),性能方面就不是考虑的问题。
Oralce 建议 SHMMAX > SGA(SGA_MAX_SIZE),这样在任何时候都不会有甚至轻微的性能下降的隐患。
2.2 示例
在上节说了,如果shmmax 小与SGA,Oracle 会创建多个共享内存段,我们可以使用Ipcs -sa 查看看到共享内存段个数。
(1)查看
[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 20971520
[root@rac01 ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65537 oracle 640 4194304 27
0x00000000 98306 oracle 640 20971520 27
0x00000000 131075 oracle 640 20971520 27
0x00000000 163844 oracle 640 20971520 27
0x00000000 196613 oracle 640 20971520 27
0x00000000 229382 oracle 640 20971520 27
0x00000000 262151 oracle 640 20971520 27
0x00000000 294920 oracle 640 20971520 27
0xd2776b04 327689 oracle 640 20971520 27
------ Semaphore Arrays --------
key semid owner perms nsems
0xfafd7074 360449 oracle 640 104
------ Message Queues --------
key msqid owner perms used-bytes messages
因为kernel.shmmax设置过小,导致分配了多个共享内存段。
下边改大一些:
[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 2147483648
[root@rac01 ~]# sysctl -p
[root@rac01 ~]# su - oracle
[oracle@rac01 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Nov 16 05:50:00 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options
SQL> startup force
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 104859892 bytes
Database Buffers 58720256 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options
再看一下:
[root@rac01 ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xd2776b04 360449 oracle 640 171966464 27
------ Semaphore Arrays --------
key semid owner perms nsems
0xfafd7074 491521 oracle 640 104
------ Message Queues --------
key msqid owner perms used-bytes messages
只有一个内存段分配了
3. kernel.shmall
kernel.shmall 参数是控制共享内存页数。该参数大小为物理内存除以pagesize;
查看os系统页的大小
#getconf PAGESIZE
4096
这里显示的pagesize 是4k,假设一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求,几乎是原来设置2097152的两倍。
4. kernel.shmmni 参数
shmmni 内核参数是共享内存段的最大数量(注意这个参数不是 shmmin,是
shmmni, shmmin 表示内存段最小大小 )。shmmni 缺省值 4096 ,一般肯定是够用了。
5. fs.file-max 参数
fs.file-max为512 乘以 processes。
如128个process,则file-max=512*128=65536。
6. Oracle 下需要做调整的参数
在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 会自动根据需要调整各个区域的大小,大大减少了某些区域内存紧张,而某些区域又有内存空闲的矛盾情况出现。
分享到:
相关推荐
Linux内核参数调整及ORACLE调优参数
在Linux环境下部署Oracle数据库时,为了确保数据库系统的稳定性和高性能,往往需要对Linux内核的一些关键参数进行合理的调整。这些参数涉及到文件系统、内存管理、进程调度等多个方面,直接影响到Oracle数据库的性能...
在Oracle 11g R2 for Linux版本中,针对Linux内核参数和用户限制(limit)的配置进行了显著的改进。本文将详细介绍这一改进的具体内容、实现方法以及实际应用效果。 #### Oracle 11g R2 for Linux内核参数与Limit配置...
在进行Oracle 11g数据库的安装与配置过程中,对Linux系统的内核参数进行恰当的调整是至关重要的一步。这不仅能够确保Oracle数据库在Linux环境下运行的稳定性和性能,还能避免一些常见的安装错误和警告。以下是对给定...
本文将深入探讨Linux内核参数中的“System V IPC”相关参数,特别是与共享内存和信号灯有关的配置项,以帮助用户更好地管理和优化Linux系统的资源。 #### 二、共享内存和信号灯简介 共享内存和信号灯是System V ...
`vm.dirty_ratio`和`vm.dirty_background_ratio`内核参数控制何时将脏页写回磁盘。适当调整这些值可以平衡性能与磁盘I/O。 9. 其他优化 还包括调整网络堆栈以降低网络延迟,优化文件系统设置以提高读写速度,以及...
特别是在 Linux 环境下,由于其高度可定制性和灵活性,适当调整内核参数可以显著提升 Oracle 数据库的性能。 #### 二、Linux 共享内存 共享内存是 Linux 内核为进程间通信(IPC)提供的高效机制之一。它是一种特殊...
### Linux 下 Oracle 数据库官方安装指南 #### 一、安装准备与环境...有关更多关于 Linux 内核参数和 Oracle 相关参数调整的信息,请参考:[http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668741.aspx]...
综上所述,Linux 64位环境下安装Oracle数据库涉及多个环节,从系统环境的搭建到软件的下载与配置,再到内核参数和安全设置,每一步都需谨慎操作,遵循Oracle的官方指导和推荐的实践标准。这不仅考验了技术人员的操作...
Linux安装oracle11G是一个复杂的过程,需要完成多个步骤,包括挂盘、安装依赖项、调整内核参数等。本文将详细介绍如何在Linux系统中安装oracle11G。 一、挂盘 在安装oracle11G之前,需要挂载安装盘。使用mount命令...
3. 修改Linux内核参数,这对于Oracle的运行至关重要。打开`/etc/sysctl.conf`文件,添加以下参数: ``` kernel.shmall=2097152 kernel.shmmax=536870912 kernel.shmmni=4096 kernel.sem=250 32000 100 128 fs....
离线安装Oracle数据库是一项技术性较强的任务,需要对Linux系统和Oracle数据库有深入理解。在实际操作中,可能会遇到各种意想不到的问题,因此建议在熟悉环境和充分准备的基础上进行。同时,保持系统和Oracle版本的...
知识点:sysctl 命令是 Linux 系统中用于设置和查看内核参数的命令,通过执行 sysctl -p 命令,可以使内核参数生效。 5. 编辑 /etc/profile 文件 编辑 /etc/profile 文件,添加 ulimit 命令,以限制 Oracle 用户的...
本文将详细介绍如何在Linux系统上安装Oracle 10g,并提供必要的系统检查、环境配置和参数调整。 首先,确保你的Linux系统满足最低的硬件需求。Oracle 10g需要至少1GB的物理内存,以及足够的交互空间,具体需求与...
如果需要支持Web应用,则需要按照Web应用的需求对内核参数进行调整。 文件系统优化是Linux内核网络性能的第三步。文件系统优化需要考虑到文件系统的类型、文件系统的挂载方式、文件系统的读写权限等方面的因素。...
Linux内核参数调整及ORACLE秒开云挂机宝调优参数
- **修改系统内核参数**:优化内核以适应Oracle数据库的需求,例如调整内存分配和文件系统参数。 6. **Oracle安装步骤**: - **安装Oracle817**:分为安装server和client两部分。 - **server安装**:解压并指定...
首先,需要调整Linux内核和环境。在RedHat 6.0环境下安装Oracle 8.0.5,需要安装kernel-2.2.5-15.1386.rpm和tcl-8.0.4-29.1386.rpm软件包。然后,需要调整Linux核心参数,编辑修改/usr/src/linux/include/asm/...
在Oracle Linux 6.5环境下安装Oracle 11.2.0.4数据库涉及多个关键步骤,主要包括系统配置、核心参数调整以及用户和权限管理。首先,确保满足基本的硬件需求,如至少1GB的物理内存和至少5GB的硬盘空间,并且交换分区...
为了确保 Oracle 正常运行,需要调整系统的内核参数,具体如下: - `kernel.shmmax`:最大共享内存段大小(推荐值:2147483648) - `kernel.shmmni`:系统最大共享内存段数量(推荐值:4096) - `kernel.shmall`:...