/dev/shm不足导致导致数据库挂掉

今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不上数据库,经查看,数据库在晚上10点的时候挂掉,告警日志报错如下:

WARNING: You are trying to use the MEMORY_TARGET feature. 
This feature requires the /dev/shm file system to be mounted for
 at least 7868514304 bytes. /dev/shm is either not mounted or is mounted 
with available space less than this size. Please fix this so that 
MEMORY_TARGET can work as expected. Current available is 7857356800 and 
used is 562315264 bytes. Ensure that the mount point is /dev/shm for 
this directory.
memory_target needs larger /dev/shm

启动数据库,报ORA-00845错误。

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

原因是昨天下午3点多,测试人员说SHARED_POOL不够,要求增大SHARED_POOL,我们的数据库是11gR2,内存自动管理,MEMORY_TARGET的值为5GB,可是观察AWR报告的内存建议,1.8GB的SHARED_POOL应该是够用的,可是测试的有需求,只好将MEMORY_TARGET改成8GB,我们的服务器是16GB的内存的RHEL 5.4操作系统,昨天下午测试人员一直在这套系统上工作,没有问题,晚上10点,数据库自动收集统计信息时,数据库挂掉。导致数据库挂掉的原因是MEMORY_TARGET超过了/dev/shm的大小。
/dev/shm是LINUX的tmpfs,一般都被理解为虚拟磁盘,但是它和虚拟磁盘还不一样,tmpfs是个文件系统,并不像虚拟磁盘是个块设备,tmpfs可以使用内存,内存不足时使用交换分区,也不需要使用mkfs命令创建,典型的 tmpfs 文件系统会完全驻留在内存中,所以对tmpfs的操作速度非常快,但是由于数据会保留在内存中,所以,当服务器关闭或重启后,这里面的数据会丢失。ORACLE使用的也是tmpfs,所以,MEMORY_TARGET不能超过/dev/shm的大小,就像MEMORY_TARGET不能超过MEMORY_MAX_TARGET和SGA_TARGET不能超过SGA_MAX_SIZE的大小一样。
我们的服务器16GB内存,/dev/shm的大小默认是操作系统内存的一半,但是由于16G的内存实际达不到16GB,所以/dev/shm的默认大小达不到8GB,如下:

[oracle@dbserver1 ~]$ cat /proc/meminfo | grep MemTotal
MemTotal:       16444672 kB

可以看到内存15.68GB,并没有达到16GB。

[oracle@dbserver1 ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_dbserver1-lv_root
                       50G   19G   29G  40% /
tmpfs                 7.9G  4.6G  3.3G  59% /dev/shm
/dev/sda1             485M   48M  412M  11% /boot
/dev/mapper/vg_dbserver1-lv_home
                      2.7T  268G  2.3T  11% /home

tmpfs为7.9GB,也没有达到8GB,当MEMORY_TARGE=8GB而tmpfs没有完全被使用的情况下,数据库可以正常运行,但是当tmpfs完全被使用,数据库分不到新的内存,就挂掉了,解决方法是增大tmpfs的大小,或者将MEMORY_TARGE调小,为满足测试人员的需求,只好调整tmpfs的大小。

[root@dbserver2 ~]# mount -o size=15000M -o nr_inodes=1000000 -o noatime,
nodiratime -o remount /dev/shm

注意:利用这种方式增大tmpfs大小,需要在tmpfs没有使用的情况下才可以,否则会因为无法remount而报错。

[oracle@dbserver1 ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_dbserver1-lv_root
                       50G   19G   29G  40% /
tmpfs                  15G     0   15G   0% /dev/shm
/dev/sda1             485M   48M  412M  11% /boot
/dev/mapper/vg_dbserver1-lv_home
                      2.7T  268G  2.3T  11% /home

此时,tmpfs被改为15GB,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件,当/dev/shm使用内存空间不够时可以占用swap的空间,所以不用担心存储空间不够用的问题。
启动数据库,问题解决。

转载于:https://my.oschina.net/psuyun/blog/174771

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值