注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

ORA-27102: out of memory 与Oracle有关的内核参数详解 我用  

2013-04-17 17:43:32|  分类: SQL/Oracle/Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://blog.csdn.net/wyzxg/article/details/4055234

前两天在安装oracle的时候遇到上面的错误

 

os:centos4.7     32G内存
oracle10g

 

经过一番查找,发现是一个参数的设置的不对/etc/sysctl.conf的shmall

 

shmall这个参数设置的值太小就会报ORA-27102: out of memory

 

对于32位系统,一页=4k,也就是4096字节。
kernel.shmall = 2097152  就是 2097152*4k/1024/1024 = 8G 就是说可用共享内存一共 8G

 

设置的一般规律

 

kernel.shmall = 2097152    ---内存8G
kernel.shmall = 4194304    ---内存16G
kernel.shmall = 8388608    ---内存32G

 

我改的kernel.shmall = 41943040  ,结果好了,这样可以会留下什么后遗症


这里,对每个参数值做个简要的解释和说明。
    (1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。
    (2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。
    (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。
    (4)sem:该参数表示设置的信号量。
    (5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。


    修改好内核以后,执行下面的命令使新的配置生效。
[root @linux1 /root]# /sbin/sysctl -p

 

---end----







http://space.itpub.net/?uid-23650854-action-viewspace-itemid-684587  

ORA-27102: out of memory以及相关系统参数

今天,在搭standby的时候,出现了这个错误

ORA-27102: out of memory

Linux-x86_64 Error: 28: No space left on device.

   查了查,32G内存,64位的RHEL。原来是/etc/sysctl.conf里的shmall设置的太小了。默认的shmall足够大了,不知怎么被注释掉了,换成了shmall= 2097152。(因为这台机以前搭建过standby,所以没去检查参数,看来还是不能偷懒,应该花个几分钟扫一眼参数配置)


   最后贴一些关于这几个参数的解释。

   

kernel.shmmax  共享内存段的最大大小,以字节为单位。默认为32M(32位吧)

kernel.shmmni  定义共享内存段的最大数量,缺省4096

kernel.shmall  一次能够使用的内存总量,以页为单位,I386平台,linux页大小4K

 kernel.sem中的四个值分别 是指

1:SEMMSL(每个用户拥有信号量最大数量),
 2:SEMMNS(系统信号量最大数量),
3:SEMOPM(每次semop系统调用操作数),
 4:SEMMNI(系统信号量集最小数量)

fs.file-max = 65536 系统允许同时打开的最大文件数为65536
net.ipv4.ip_local_port_range = 1024 65000   本地主机在ipv4下可用端口范围net.core.rmem_default 接收网络数据时的一个window 的默认值
net.core.rmem_default = 1048576 接收网络数据时的一个window 的最大值
net.core.wmem_default = 262144 发送网络数据时一个window的默认值
net.core.wmem_max = 262144 发送网络数据时一个window的最大值


http://space.itpub.net/7199859/viewspace-695623 

ORA-27102: out of memory 问题解决方法

环境: oracle 10.2.0.5 + linux x86_64  redhat as 5.3
 
  今天给客户安装一套10g rac for linux 64位版本,创建数据库的过程中,报ORA-27102错误,导致建库出错。
 
 
  通过查metalink 主要是这个参数设置有问题,kernel.shmall参数需要根据页面大小和物理内存的实际情况做调整
 
不再是默认的2097152,
  比如PAGE_SIZE 为4096(即4K),物理内存为16G,则kernel.shmall需要设置为4194304
 
修改方法:
vi /etc/sysctl.conf
 
kernel.shmall=4194304
 
重新运行建库即可。
 
这个问题在linux 64位平台 oracle 9.2到11.2平台都存在。

 

http://breakdayzhou.blog.163.com/blog/static/1825846312010142486183/


Oracle数据库在linux系统上的安装过程中,涉及到设置linux内核参数;
这些内核参数究竟代表什么含义,如何调整这些参数?
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 = 1024 65000 # 应用程序可使用的IPv4端口范围。
net.core.rmem_default = 1048576 # 套接字接收缓冲区大小的缺省值
net.core.rmem_max = 1048576 # 套接字接收缓冲区大小的最大值
net.core.wmem_default = 262144 # 套接字发送缓冲区大小的缺省值
net.core.wmem_max = 262144 # 套接字发送缓冲区大小的最大值

 

http://blog.csdn.net/wuweilong/article/details/7420310   oracle 安装要用到的内存相关参数详解

在这里,对oracle在/etc/sysctl 要用到的参数值做个简要的解释和说明。

(1)kernel.shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。Linux 2.4/2.6缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为和实际内存一样大即可。
(2)kernel.shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。
(3)kernel.shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。
(4)kernel.sem:该参数表示设置的信号量。
(5)fs.file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。
(6)net.ipv4.ip_local_port_range: 表示端口的范围,为指定的内容。
(7)net.core.rmem_default: 表示接收套接字缓冲区大小的缺省值(以字节为单位)。
(8)net.core.rmem_max: 表示接收套接字缓冲区大小的最大值(以字节为单位)
(9)net.core.wmem_default: 表示发送套接字缓冲区大小的缺省值(以字节为单位)。
(10)net.core.wmem_max: 表示发送套接字缓冲区大小的最大值(以字节为单位)。

修改好内核以后,执行sysctl -p命令使新的配置生效。

注意:
对于32位系统,一页=4k,也就是4096字节
kernel.shmall = 4096 就是 4096*4k/1024/1024 = 15M 就是说可用共享内存一共 15M,数据库当然会起不来啦。
原值为 kernel.shmall = 4096

设置的一般规律

kernel.shmall = 2097152 ---内存8G
kernel.shmall = 4194304 ---内存16G
kernel.shmall = 8388608 ---内存32G
kernel.shmall = 10485760 ---内存40G
kernel.shmall = 12582912 ---内存48G
kernel.shmall = 14680064 ---内存56G
kernel.shmall = 16777216 ---内存64G
kernel.shmall = 20971520 ---内存80G
kernel.shmall = 25165824 ---内存96G
kernel.shmall = 33554432 ---内存128G
kernel.shmall = 50331648 ---内存192G
kernel.shmall = 67108864 ---内存256G


http://blog.163.com/scott_guo/blog/static/1810260832011113035344336/   linux中与Oracle有关的内核参数详解

< style endif-->

安装Oracle的时候需要调整linux内核参数,但是各参数代表什么含义呢,下面做详细解析。

Linux安装文档中给出的最小值:

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 4294967295

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586


各参数详解:

kernel.shmmax

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32linux系统:可取最大值为4GB4294967296bytes-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为429496729532位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

64linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887SGA肯定会包含在单个共享内存段中。

kernel.shmall

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

kernel.shmmni

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

fs.file-max

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr

此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

kernel.sem

kernel.sem = 250 32000 100 128为例:

250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

32000是参数semmns的值,表示系统内可允许的信号量最大数目。

100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

128是参数semmni的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range

表示应用程序可使用的IPv4端口范围。

net.core.rmem_default

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max

表示套接字发送缓冲区大小的最大值。

 

http://www.blogjava.net/hwpok/archive/2011/09/22/359244.html   oracle 10g 修改SGA,PGA大小

一、概念
SGA指系统全局区域(System Global Area),是用于存储数据库信息的内存区,该信息为数据库进程所共享。
PGA指进程全局区域(Process Global Area),包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收。 Oracle 10g提供了PGA内存的自动管理。参数pga_aggregate_target可以指定PGA内存的最大值。当参数 pga_aggregate_target大于0时,Oracle将自动管理pga内存,并且各进程的所占PGA之和,不大于 pga_aggregate_target所指定的值。

二、配置
oracle推荐OLTP(on-line Transaction Processing)系统oracle占系统总内存的80%,然后再分配80%给SGA,20%给PGA。也就是
SGA=system_total_memory*80%*80%
PGA=system_total_memory*80%*20%

三、操作
用SYS用户以SYSDBA身份登录系统
alter system set sga_max_size=2000m scope=spfile;
alter system set sga_target=2000m scope=spfile;
alter system set pga_aggregate_target=500m scope=spfile;

然后重新启动数据库
最后查看一下是否生效
show parameter sga_max_size;
show parameter sga_target;
show parameter pga_aggregate_target;

http://blog.csdn.net/rulev5/article/details/7181030     oracle 10g RAC修改sga
基本情况:操作系统版本:CentOS-5.6 X86-64    cpu:2*12   内存:16G   数据库版本:10.2.0.4   节点数:2
安装系统的时候/etc/sysctl.conf没有配置最优,实际上对于CentOS5.6-64来说kernel.shmall和kernel.shmmax默认即可
1、恢复上面的两个值到默认状态
# Controls the maximum shared segment size, in bytes
 kernel.shmmax = 68719476736
 
# Controls the maximum number of shared memory segments, in pages
 kernel.shmall = 4294967296
 
2、是新的内核生效
[root@10-208 cron]# sysctl -p
 net.ipv4.ip_forward = 0
 net.ipv4.conf.default.rp_filter = 1
 net.ipv4.conf.default.accept_source_route = 0
 kernel.sysrq = 0
 kernel.core_uses_pid = 1
 net.ipv4.tcp_syncookies = 1
 kernel.msgmnb = 65536
 kernel.msgmax = 65536
 kernel.shmmax = 68719476736
 kernel.shmall = 4294967296
 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 = 1048576
 net.core.rmem_max = 1048576
 net.core.wmem_default = 262144
 net.core.wmem_max = 262144
 [root@10-208 cron]#
 
3、修改sga
修改之前先说一下针对不同类型(oltp、dss)数据库sga和pga分配的不同点
oltp:sga=总内存*80%*80%
      pga=总内存*80%*20%
 
dss:sga=总内存*80%*50%
     sga=总内存*80%*50%
 
个人理解:对于oltp数据库来说,数据量不大,并发较多,希望数据最好大部分在内存里,所以sga分配较大。而oltp数据库一般来说数据库排序不是非常的大,所以没有必要分配太大的内存。
          对于dss系统来说数据量一般非常的大,把数据库全部放到内存里面不现实,而大数据量的排序一般来说会很多,所以要安装如上分配。
我这里是oltp系统,所有内存分配如下:
sga=16G*80%*80%=10.24G,我这里给了10G
pga=16G*80%*20%=2.56G,我这里给了2G
1)修改第一个节点:
alter system set sga_max_size=10G scope=spfile sid='jscn1'; 
alter system set sga_target=10G  scope=spfile sid='jscn1'; 
shutdown immediate 
startup 
2)当第一个节点启动后,修改第2个节点:
alter system set sga_max_size=10G scope=spfile sid='jscn2'; 
alter system set sga_target=10G  scope=spfile sid='jscn2'; 
shutdown immediate 
startup 

4、确定所有的服务都已经启动
[root@testrac1 ~]# crs_stat -t 
Name           Type           Target    State     Host 
------------------------------------------------------------ 
ora.jscn.db    application    ONLINE    ONLINE    testrac1 
ora....n1.inst application    ONLINE    ONLINE    testrac1 
ora....n2.inst application    ONLINE    ONLINE    testrac2 
ora....SM1.asm application    ONLINE    ONLINE    testrac1 
ora....C1.lsnr application    ONLINE    ONLINE    testrac1 
ora....ac1.gsd application    ONLINE    ONLINE    testrac1 
ora....ac1.ons application    ONLINE    ONLINE    testrac1 
ora....ac1.vip application    ONLINE    ONLINE    testrac1 
ora....SM2.asm application    ONLINE    ONLINE    testrac2 
ora....C2.lsnr application    ONLINE    ONLINE    testrac2 
ora....ac2.gsd application    ONLINE    ONLINE    testrac2 
ora....ac2.ons application    ONLINE    ONLINE    testrac2 
ora....ac2.vip application    ONLINE    ONLINE    testrac2

  评论这张
 
阅读(802)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018