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中,以减少管理上的开销。
阅读(2893) | 评论(0) | 转发(0) |