Oracle:SGA(ASMM) and kernel.shmall
关于Oracle的SGA设置,官方有几篇文档给出了说明:
SGA and PGA Management in 11g’s Automatic Memory Management (AMM) (文档 ID 1392549.1)
How To Use Automatic Shared Memory Management (ASMM) In Oracle 10g & 11g (文档 ID 295626.1)
Tips for Sizing the SGA on UNIX (文档 ID 1012819.6)
Database is not starting up with ORA-27102 after enabling hugepages (文档 ID 1990322.1)
在之前,设置内存参数的时候,你常常会遇到这样的报错:
1 2 3 |
SQL> startup nomount ORA-27102: out of memory Linux-x86_64 Error: 28: No space left on device |
如上的报错,通常是由于你设置的:sga_target和sga_max_target参数过大而导致的。
但这里,你很可能有这样的疑问:
我的物理内存空间明明很大,比方说128G,为什么SGA只设成了8G,就报空间不足的错误了?
原因是,你虽然增加了数据库参数的大小,但是你却没有同步的增加Linux对应参数的值(kernel.shmall)。
需要修改的文件包括:
1. /etc/sysctl.conf
对于sysctl.conf:
1 2 |
kernel.shmmax kernel.shmall |
这两个参数的值是这样的:
X GB = X * (1024*1024*1024)
1 2 |
net.core.rmem_max net.core.wmem_max |
X GB = X * (1024*1024)
所以,如果你希望你的SGA可以达到36G,那么你可以将kernel.shmall设为:41943040(40GB)
这样就不会有问题了:
————————————————
Done。
这里,参数的设定还有所问题,… 有待努力。
这次体会到了操作系统参数与Oracle之间的影响与关联方式。