参考原文:
Maximum SHMMAX values for Linux x86 and x86-64 (文档 ID 567506.1)
目标:
问题1:32-bit (x86) Linux system 系统中的最大值?
问题2:64-bit (x86-64) Linux system系统中的最大值?
解决方案:
答案1:
Oracle Global Customer Support 官方推荐 SHMMAX 的最大值是小于4GB,或者4294967295
一个共享内存段的最大大小受可用的用户寻址空间限制。在32bit系统中,是4GB。
答案2:
Oracle Global Customer Support 官方推荐 SHMMAX 的最大值是 物理内存的1/2
一个共享内存端的最大大小受可用的用户寻址空间限制。在64bit系统中,这个理论值是2的64次方。因此,SHMMAX的理论限制值是物理内存的大小。但是,实际地使用全部内存作为SHMMAX可能导致一个潜在的状况:没有内存可以用来干别的事情。
因此,对 SHMMAX 更为理想的 物理限制 是 物理内存-2GB
在oracle db环境中,这个物理限制 依然导致没有足够的内存用来做其他需要的功能(functions)。因此,一般 "Oracle maximum" for SHMMAX 是 物理内存的1/2。很多Oracle 客户a higher fraction, at their discretion
偶尔,客户会错误的认为:根据推荐设置 SHMMAX 是用来限制全部的sga,这是不正确的。根据推荐设置SHMMAX只会导致一些共享内存段被用在total sga上。关于细节信息,请看mos文章:
Document 15566.1, "SGA, SHMMAX, Semaphores and Shared Memory Explained"
在内存配置上,同样需要考虑的还有 内核参数kernel.shmall,该参数是系统一次能使用的所有的共享内存的大小,以page为单位
请看mos文章:
Document 301830.1 Upon startup of Linux database get ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device