ITPub博客

首页 > 数据库 > Oracle > shmall参数设置不当引起数据库启动时报out of memory报错

shmall参数设置不当引起数据库启动时报out of memory报错

Oracle 作者:dawn009 时间:2015-09-06 09:55:31 0 删除 编辑

shmall是全部允许使用的共享内存大小,单位是页,可以通过getconf PAGESIZE来获取每页的大小,一般为4096字节
shmmax是单个段允许使用的最大共享内存大小
可以使用 ipcs -l 看到shmall,shmmax设置的值。ipcs -u可以看到实际使用的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
oracle@fly007:~> ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194304 //shmmax为4G
max total shared memory (kbytes) = 8388608  //shmall为8G
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767
------ Messages: Limits --------
max queues system wide = 16
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536
oracle@fly007:~> ipcs -u
------ Shared Memory Status --------
segments allocated 3
pages allocated 3
pages resident  3
pages swapped   0
Swap performance: 0 attempts     0 successes
------ Semaphore Status --------
used arrays = 4
allocated semaphores = 488
------ Messages: Status --------
allocated queues = 0
used headers = 0

下面为shmall和shmmax参数相关的案例

环境介绍:

1
2
3
操作系统:suse 11 sp1 64bit
数据库版本:oracle 11g R1 64bit
主机内存:94G

      1、主机内存94G,更改数据库的sga_target为40G,重启数据库生效该参数,在启动过程报ORA-27102: out of memory错误:

1
2
3
4
5
6
7
8
9
SQL> alter system set sga_target=40G scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device

     2、当前的shmall和shmmax参数设置如下:

1
2
3
fly007:~ #  cat /etc/sysctl.conf | grep -E 'shmall|shmmax'
kernel.shmall = 4194304
kernel.shmmax = 50708928512

     3、shmmax是单个段允许使用的最大共享内存大小,单位是字节,一般shmmax>sga_target的大小,这样整个sga就在一个共享内存段,这是推荐的做法,我们这设置的shmmax为物理内存的一半,也就是47G,大于sga_target=40G,该参数设置正确

1
2
3
4
fly007:~ #  cat /etc/sysctl.conf | grep shmmax
kernel.shmmax = 50708928512
fly007:~ #  echo "50708928512/1024/1024/1024" | bc
47

     4、shmall是全部允许使用的共享内存大小,注意单位是页,通过getconf PAGESIZE命令得到每页的大小为4096字节,也是就4194304*4096/1024/1024/1024=16G

1
2
3
4
5
6
fly007:~ # getconf PAGESIZE
4096
fly007:~ #  cat /etc/sysctl.conf | grep shmall
kernel.shmall = 4194304
fly007:~ # echo "4194304*4096/1024/1024/1024" | bc
16

    5、全部允许使用的共享内存大小为16G<40G,所以启动数据库报错了,shmall参数可以这样设置,shmall=shmmax/4096=50708928512/4096=12380109
    6、设置shmall参数为12380109,生效该设置,启动数据库,正常启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fly007:~ # cat /etc/sysctl.conf | grep shmall
kernel.shmall = 12380109
fly007:~ # sysctl  -p
fly007:~ # su - oracle
oracle@fly007:~> sqlplus /nolog
SQL*Plus: Release 11.1.0.7.0 - Production on Wed Dec 25 23:45:04 2013
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 4.8103E+10 bytes
Fixed Size                  2170704 bytes
Variable Size            1.9998E+10 bytes
Database Buffers         2.8052E+10 bytes
Redo Buffers               50548736 bytes
Database mounted.
Database opened.
SQL>

    

出处: http://fly007.blog.51cto.com/8301004/1345072

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

上一篇: java多线程实例
请登录后发表评论 登录
全部评论

注册时间:2013-08-15

  • 博文量
    595
  • 访问量
    4850110