Oracle 11g引入了MEMORY_TARGET参数,用于控制oracle对于系统内存的使用,首次将SGA和PGA整合在一起实现自动管理,一旦设置了Memory_target 参数,oracle就会根据需要自动调整SGA和PGA以合理分配及使用内存。如果Memory_target设置不当,就容易引发ORA-00845错误。原因是Memory_target和/dev/shm (即tmpfs)有紧密联系。下面就来研究下/dev/shm究竟是什么,他的作用是什么,如何修改以及他的应用场景
一、/dev/shm是什么
/dev/shm是linux非常有用的一个目录,它就是所谓的tmpfs,也可以称之为临时文件系统(不是块设备),类似oracle中的临时表空间一样,用于加速和优化系统。该目录并没有放在磁盘上,而上在内存当中。因此在linux下,不用大费周折的去建ramdisk,直接使用/dev/shm就可以达到很好的效果。
Tmpfs和ramdisk(虚拟磁盘)。Tmpfs可以使用RAM,也可以使用交换分区来进行存储。传统的ramdisk(虚拟磁盘)是个块设备,并且需要mkfs之类的命令之后才可以真正的使用它。Tmpfs是一个文件系统,不是块设备,系统默认启动就会加载/dev/shm,只要安装它就可以使用了。
Tmpfs优势。
1. 动态文件系统的大小
2. 读写速度快。典型的tmpfs文件系统会完全驻留在RAM中,读写几乎是瞬间完成。
3. Tmpfs中的数据在重新启动之后不会保留,因为虚拟内存本质上是易失的,所以有必要做些脚本做诸如加载、绑定的操作。
注意
在oracle数据库启动后,在/dev/shm目录下会产生大量ORA文件,一定不要试图去删除这些文件,删除之后,oracle数据库会宕掉。
二、/dev/shm如何修改大小
关于/dev/shm容量的问题,在linux下,默认/dev/shm为实际物理内存的1/2,使用df –h命令查看。实际上它不会真正的占用这块内存。如果/dev/shm下没有任何文件,它实际占用的内存就是0字节;如果它最大为1G,里面放有100M的文件,那么剩余的900M任然可以被其他应用程序所使用,但是已经占用的这100M内存空间是不会被系统回收重新划分的。
临时调整tmpfs大小,重启后失效
默认的最大一半内存在某些场合可能不够用,并且默认的额inode数量很低,一般都要调高些,可以用下面的命令来实现
#mount–o size=1500m –o nr_inodes=1000000 –o noatime,nodiratime –o remount /dev/shm
在2G的机器上,/dev/shm最大尺寸调整到1.5G,并且inode数量调整到1000000,这意味着大致可存入100万个小文件
永久修改tmpfs大小,修改/etc/fstab文件
tmpfs /dev/shm tmpfsdefaults,size=1500M 0 0
修改之后remount<