背景:ORACLE 11.2,SGA 64G,PGA 8G,压测出现操作系统内存耗尽
WARNING: Heavy swapping observed on system in last 5 mins.
pct of memory swapped in [1.94%] pct of memory swapped out [1.32%].
分析:
1、连接到数据库的每个系统连接进程大概会占用10M左右,1000个连接那么也就接近10G了;
2、在32位系统下,一个进程访问1GB的内存,会产生1M(110241024/44/1024/1024)的页表,如果是在64位系统,将会增大到2M。
SGA设置为64G,有1000个ORACLE用户进程(在linux中每个进程页表独立,都有自己的页表),64位LINUX的系统上,最大的页表占用内存为:642*1000/1024=125G;
解决方法:
1、控制SGA大小, sga+pga最好控制在50%物理内存以内,pga内存不要操作sga内存的20%;
2、当主机的物理内存为64G,设SGA>=32G时,建议开启大页;
内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。
在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中