ITPub博客

首页 > 数据库 > Oracle > /dev/shm目录下产生大量的ora_$ORACLE_SID_的二进制文件 解决方案

/dev/shm目录下产生大量的ora_$ORACLE_SID_的二进制文件 解决方案

Oracle 作者:urgel_babay 时间:2016-02-29 17:28:19 0 删除 编辑

2014.11.18
   下午在检查一个新上线的生产库的时候,发现了一个问题:

为什么/u01 使用了41G,明明这个目录下面只有oracle的安装软件和system.sysaux表空间,大小加起来也就几个G,而且使用du -sh /u01 显示确实只有8.3G。

同时 这里显示/dev/shm使用了30G,我就纳闷呢!找原因。
 去到/dev下面 再du -sh 一下,显示shm 有三十多个G,同时
去到看到大量的ora_ORACLE_SID_开头的文件,文件大小加起来刚开30G左右。
   第一次看到,一头雾水,还以为是数据库里面的那个参数位置指定错了
于是查看归档路径,查一些可以查看的参数路径,结果一无所获。
为什么这下数据库产生的文件会跑到/dev/shm 下面呢。
网上找到了一篇相关了博客,截取一点解释:
1)什么是/dev/shm
 
它就是所谓的tmpfs,从名字可以看出是一个临时的文件系统,有人说跟ramdisk(虚拟磁盘),但不一样。使用/dev/shm的好处就是读取数据相当快,因为典型的 tmpfs 文件系统会
完全驻留在 RAM 中,读写几乎可以是瞬间的。同时,要注意的是,在/dev/shm中的文件在系统重启后会被清除掉。
tmpfs默认大小一般为物理内存的一半,当然可以修改tmpfs的大小。一般在fstab上可以看到
tmpfs /dev/shm tmpfs defaults 0 0
 
如果要将tmpfs的大小修改为4G,可以对上面的做适当的修改即可,如:
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
(2)/dev/shm对oracle 11g的影响
 
ORACLE 从11g版本开始,引入了一个自动内存管理(Automatic Memory Management)特性,该特性需要更多的共享内存(/dev/shm),因此如果决定应用该特性的话,
必须要确保共享内存大于ORACLE 中初始化参数MEMORY_MAX_TARGET 和MEMORY_TARGET(特别提示,这两个参数即自动内存管理特性对应的初始化参数)的值。
Oracle在metalink的文档:Doc ID:Note:460506.1中进行了说明。解决这个问题只有两个方法,一种是修改初始化参数,使得初始化参数中SGA的设置小于/dev/shm的大小,
另一种方法就是调整/dev/shm的大小。


现在我的问题是磁盘不允许增大shm,当然以前也做过增大shm的满足oracle的内存的需求。
既然这两种方法都不行,我想到的是关闭自动内存管理,会不会解决这个问题
果然我现在先在自己的本子上的11.2.0.1 中实验得到了理想的结果
下面是贴出刚刚正式环境的变化情况

关闭前: 磁盘的使用情况:
[oracle@xxxx~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              50G   20G   28G  42% /
tmpfs                  64G   30G   34G  48% /dev/shm
/dev/sda1             291M   36M  240M  14% /boot
/dev/sda4              30G  173M   28G   1% /tmp
/dev/sda5              47G   41G  3.9G  92% /u01

这是关闭后的:
[oracle@xxxx ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              50G   20G   28G  42% /
tmpfs                  64G  424K   64G   1% /dev/shm
/dev/sda1             291M   36M  240M  14% /boot
/dev/sda4              30G  173M   28G   1% /tmp
/dev/sda5              47G  8.5G   36G  20% /u01
效果很明显

让后去到/dev/shm 下面发现所有的ora_ORACLE_SID_开头的文件都没有了。
[oracle@xxxx shm]$ ll
total 424
-r--------. 1 oracle dba 67108904 Oct 13 14:51 pulse-shm-1960468867
-r--------. 1 gdm    gdm 67108904 Oct 13 14:50 pulse-shm-2383950921
-r--------. 1 oracle dba 67108904 Oct 13 14:50 pulse-shm-3779625268
-r--------. 1 oracle dba 67108904 Oct 13 15:01 pulse-shm-410992017
-r--------. 1 oracle dba 67108904 Oct 13 14:50 pulse-shm-465023947
[oracle@xxxx shm]$

这里说说我的看法
      
一般情况下,数据库刚建立的时候,建议是自动管理,等运行一段时间,或者进入正常的时候,根据个人经验和awr.addm等的参考值,来调整数据库的相关参数,并把数据库内存管理为手动。
       因为开启自动内存管理,也是有一些不可预测的风险,好比如,既然想让它为你多做事情,就得承担多一点的风险!
当然这个看自己权衡利弊。

 

 

 

 

 

 

 

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

请登录后发表评论 登录
全部评论

注册时间:2016-02-29

  • 博文量
    203
  • 访问量
    215309