ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11g AMM和/dev/shm

11g AMM和/dev/shm

原创 Linux操作系统 作者:myownstars 时间:2012-04-09 11:16:44 0 删除 编辑

11g开始支持AMM即自动内存管理,该功能需要用到/dev/shm

以前对此了解甚少,搜罗一些相关资料作如下总结:

 

什么是tmpfs

tmpfs是一种基于内存的文件系统,类似oraclebuffer cache,当OS经历大量的I/O读写操作时,可以显著提高性能;

默认情况下,tmpfsmount/dev/shm目录。

为防止tmpfs使用了全部VM,有时候要限制其大小。要创建一个最大为32 MBtmpfs文件系统,键入:

# mount tmpfs /dev/shm -t tmpfs -o size=32m

添加到 /etc/fstab,应该是这样:

tmpfs /dev/shm tmpfs size=32m 0 0

 

tmpfs相对于ramfs而言,增加了几项功能,如size limit,交换分区支持等等。 tmpfs可以通过 "mount -o remount size=..."来在线调整大小;当该文件系统的文件数 太多,Size不够的时候,还可以将一些暂时不用的文件SWAP到交换分区上去,因此比 Ramfs更加灵活。

Linux文件系统中的某些目录,诸如:/tmp /var/tmp等等用来存放临时文件,因此我们 可以将tmpfs挂载到这些目录中,这样一来一旦系统关机,这些临时文件都会统统消失, 不会再系统中留下无用文件。此外,现在的很多软件可能会通过共享内存的方式来进行 IPC,近期的Linux内核可以通过将tmpfs挂载到/dev/shm,从而通过/dev/shm来提供共享 内存。

 

什么是/dev/shm

/dev/shm linux下的一块共享内存结构(是TMPFS类型)。默认最大为内存的一半大小.其实它的实际大小可以设置为(物理内存的一半+swap).好多人都把它和swap给混淆了,这是两个不同的概念.但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的。 

/dev/shm用来存储进程间通讯时的一些共享数据结构..例如Oracle11GASMM(Automatic Shared Memory Management)就用/dev/shm进行通讯和数据共享. DBA在进行11G配置时需要考虑MEMORY_MAX_TARGETMEMORY_TARGET参数不能大于/dev/shm.否则在数据库启动时有可能会产生ORA-00845.

/dev/shm通常在物理内存足够时,会在内存中进行数据交换,如果物理内存缺乏时,会用swap进行数据交换. 支持动态在线调整.在我们需要时可以增加或缩减它的大小.

 

注意事项

配置时必须满足memory_max_target <= /dev/shm,否则启动时会报告ora-00845错误;

因为每个后台进程都需要访问/dev/shm文件,必须对oracle用户分配足够多的文件描述符,否则会出现ora-27123错误;

若使用dedicated方式连接,每个客户端连接也都需要访问/dev/shm下的共享内存段,即至少需要memory_target/granule size个文件描述符,且还需要相应datafile的文件描述符,直到连接退出才释放;

 

验证

开启oracle之前,/dev/shm为空

$ ls -l /dev/shm

total 0

$ lsof -n | grep /dev/shm

启动oracle

SQL> show parameter memory_target

NAME           TYPE        VALUE

-------------- ----------- ------

memory_target  big integer 808M

SQL> show parameter memory_max_target

  NAME              TYPE          VALUE

 ----------------- ------------- ------

 memory_max_target  big integer  808M

再次检查/dev/shm

UNIX> ls -l /dev/shm/* | wc -l

           203

UNIX> lsof -n | grep /dev/shm | wc -l

            4872

/dev/shm目录下只有203个文件,却生成了4872个文件描述符;两者分别遵循以下公式

文件数目=memory_target/granule size(4M)=808/4 =203;

文件描述符=文件数目*后台进程数 = 203*24=4872

 

 

注:pga不会存储于/dev/shm

http://blog.oracle48.nl/oracle-11g-amm-memory_target-memory_max_target-and-dev_shm/

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

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

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3095977