Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2767479
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2010-10-08 16:40:44

                     ORACLE中的shared memeory
        shared memory(以下称SM)和semaphores(以下称SP)对于在linux/unix(以下称*ux)平台上的oracle instance来说都是非常重要的资源,如果在instance启动时不能获得相关资源,那么oracle就无法启动.
       SM是单独的一段共享内存,每个进程都可以通过shmat()把SM附加到自己的地址空间中进行读写,从而进行通信。
        SP可以认为是一个flag,你可以把这个flag设为on或off.一个进程可以把flag设为on或off。如果一个flag已为on状态,那么再次试图设置这个flag为on状态的进程在OS级别上进行睡眠,直到这个flag被再次设为off状态。在睡眠了一定的时间之后,进程会再次试图设置这个flag,有可能成功也有可能失败从而再次睡眠。这样就实现了一个post-wait模型.进程可以等一个事件发生或是通知一个事件发件。oracle使用这种机制来进行SGA的并发访问控制。
        在instance启动时,根据参数文件中设置来设用shmget()来分配SM,SM主要分为四个部分:fixed area,variable area,redo buffer,dbblock buffer.
        SGA分配可能有三种情况,1,整个SGA在一个SM中,单个SM大小由SHMMAX参数控制;2,如果SGA比SHMMAX还要大,那么试图分配多个连续SM段;3,分配多个不连续的SM段(整个系统中的SM个数由shmall决定).如果都失败则报错,否则ORACLE使用ksms.o的中定义的地址附加到SM上.oracle提供了一个工具tstshm来查共享内存段的分配和附加情况.根据个人的经验,尽量把SGA放在一个一个大的SM中,以减少管理上的开销。
阅读(2816) | 评论(0) | 转发(0) |
0

上一篇:表的碎片化

下一篇:swapness调整

给主人留下些什么吧!~~