oracle的内存一直是DBA比较关注的部分。今天总结一下设置及调优原则。
Oracle使用两种类型的内存结构,一种为共享的,而另一种为进程专有的。SGA(系统全局区)是所有服务器进程(包括后台进程)可共享的内存部分;进程专有的内存部分称为PGA(程序全局区)。
当启动Oracle数据库时,系统会先在内存内规划一个固定区域,用来储存用户需要的数据,以及Oracle运行时必备的系统信息。我们称此区域为系统全局区(System Global Area),简称SGA。SGA是Oracle实例中最重要的内存部件。SGA的目的是提高查询性能,允许大量的并发数据库活动。
调整SGA并不总是很容易。在Oracle 11g中,用户可以使用自动内存管理(Automatic Memory Management)来将共享内存管理问题完全自动化。使用AMM,Oracle将根据变化的数据库负荷为SGA和PGA自动分配内存或回收内存,重新分配,Oracle使用内部视图和统计数据来决定为SGA组件中分配内存的最好办法。
为了切换到AMM,必须设置MEMORY_TARGET参数。设置MEMORY_TARGET参数后,数据库将根据数据库负荷的要求,把内存分配给SGA和PGA的组件。MEMORY_TARGET参数是动态的,因此在数据库运行时改变内存数量很容易。及时在启动自动内存分配后,也可以通过设置MEMORY_TARGET参数设置SGA_TARGET和或PAG_AGGREGATE_TARGET参数。
事实上,除了MEMORY_TARGET参数,还有MEMORY_MAX_TARGET参数,它是静态参数,代表内存(SGA+PGA)的最大值。如果指定了MEMORY_TARGET而没有指定MEMORY_MAX_TARGET,重启后MEMOR