linux下,以下两个命令都可以查看内存信息,结果类似,但是在oracle中还是看下者为好,因为有PageTables、HugePages_Total等信息
free -m
cat /proc/meminfo
MEMORY_MAX_TARGET:specifies
the maximum value to which a DBA can set the MEMORY_TARGET initialization
parameter
MEMORY_TARGET: specifies the Oracle system-wide usable memory. The database tunes memory to the MEMORY_TARGET value, reducing or enlarging the SGA and PGA as needed.
memory_max_target的值必须大于MEMORY_TARGET,否则会报错ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET
ORACLE 数据库从11g 版本开始,引入了一个自动内存管理(Automatic Memory Management) AMM特性,该特性需要更多的共享内存(/dev/shm),因此如果决定应用该特性的话, 必须要确保/dev/shm大于MEMORY_MAX_TARGET 和MEMORY_TARGET,MEMORY_MAX_TARGET 如果超过/dev/shm的大小,安装会报错ORA-00845,通过AMM这个功能DBA只需要设置memory_target一个参数就可以完成整个数据库实例内存的配置,在11.2.0.2版本之前,DBCA建库默认就是AMM管理。同样如果你设置AMM后,也设置了SGA_TARGET、pga_aggregate_target等参数,那么这些参数会作为最小值要求。AMM最大的问题是不能使用大页内存。memery_target不等于0,就开启了AMM
可以vi /etc/fstab修改/dev/shm这个共享内存文件系统的大小:
tmpfs /dev/shm tmpfs defaults,size=XXG 0 0
针对于Oracle的内存分配方式,推荐在核心系统上:配置PGA_AGGREGATE_TARGET、SGA_TARGET,并为buffer cache、shared pool、SORT_AREA_SIZE设定最小值的方式。AMM这种内存分配方式,由于不能使用大页,建议不要去用。
如果内存足够,想偷懒则配置MEMORY_TARGET,并为PGA_AGGREGATE_TARGET、SGA_TARGET设定最小值
SGA,PGA,UGA都是Oracle管理的内存区。
SGA(System Global Area),即系统全局区,Oracle中最重要的内存区。
PGA(Process Global Area),即程序全局区,一个进程的专用的内存区。
UGA(User Global Area),即用户全局区,与特定的会话相关联。
专用服务器连接模式,UGA在PGA中分配。
共享服务器连接模式,UGA在SGA中的Large Pool中分配。
show parameter memory,一个memery_target和memory_max_target
AMM:memery_target不等于0,就开启了AMM
memery_target=sga+pga
memery_target一般不超过操作系统物理内存的80%
如果memery_target设置为1G,sga设置为600M,pga设置为300M,则sga的范围是600--700M(1G-300M),pga范围是300--400(1G-600M)
如果memery_target设置为0,则必须手动设置sga和pga的大小,否则sga和pga都将是0
联机事务中,sga占memery_target的70%-80%,pga占memery_target的20%-30%
非联机事务,sga占memery_target的50%-60%,pga占memery_target的40%-50%
oracle11g设置了memory_target参数后,会自动设置sga和pga参数,已经实验验证
一开始memory_target为1500M,show parameter sga,看到sga为800M
修改memory_target为2500M,show parameter sga,看到sga为1500M
但是最好设置一下sga_target和pga_target的值,因为有sga_max时,sga_target就是下限值了
SGA
show parameter sga,一个sgq_target和sga_max_size
同理,sga_target=SHARED_POOL_SIZE+DB_CACHE_SIZE+LARGE_POOL_SIZE+JAVA_POOL_SIZE
如果sga_target设置为0,则必须手动设置shared pool、buffer等大小,否则shared pool、buffer等都将是0
ASMM:sga_target不等于0,就开启了ASMM
如果memery_target=1G,开启了AMM的同时,设置sga_target等于0,pga=500M,则sga的值范围是(0-500M)
PGA
PGA_AGGREGATE_TARGET-此参数用来指定所有session总计可以使用最大PGA内存。这个参数可以被动态的更改。
SORT_AREA_SIZE,一个会话排序时能够使用的最大内存值,当PGA自动管理时所有会话的工作区大小的调整都是自动的,在该模式下运行的所有会话都会忽略SORT_AREA_SIZE参数的值,但是会把该值当成最小值,默认最大只能用到1G来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2105905/ ,如需转载,请注明出处,否则将追究法律责任。