SGA_MAX_SIZE
假设sga_max_size的大小设置为500M,os一般是不会在oracle启动的时候就给它全部的实际内存,而可能只给200M。随着程序的运行,Oracle不断的需要内存,而假设计算机的所有实际内存只有500M,那么很肯定的是OS不可能把全部500M实际内存分配给oracle的sga,可能也最多就给了350M,剩下的150M使用虚拟内存。
假设我的机器物理内存(实际内存)足够多,如何让Oracle所申请的SGA内存全部在物理内存中呢,因为假设使用了虚拟内存,必定会带来额外的PAGE IN/PAGE OUT的I/O操作,这是很不合算的。这个问题其实就是在物理内存中固定SGA的问题,这要涉及到另外两个参数LOCK_SGA和PRE_PAGE_SGA以及具体操作系统是否支持内存锁定。
SQL> select *
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
1.查看lock_sga和pre_page_sga参数的默认值
SQL> show parameter sga
NAME
------------------------------------ ----------- ------------------------------
lock_sga
pre_page_sga
sga_max_size
sga_target
2、修改lock_sga和pre_page_sga参数
alter system set lock_sga=true scope=spfile;
alter system set pre_page_sga=true scope=spfile;
3、关闭数据库时再重启数据库出现以下错误
startup;
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
原因很简单,Linux操作系统对每一个任务在物理内存中能够锁住的最大值做了限制!需要手工进行调整。
4、“ORA-27102”及“Cannot allocate memory”问题处理
1)使用“ulimit -a”命令获得“max locked memory”的默认大小
core file size
data seg size
scheduling priority
file size
pending signals
max locked memory
max memory size
open files
SGA_MAX_SIZE
精选 转载文章标签 SGA_MAX_SIZE 文章分类 Oracle 数据库