SGA_MAX_SIZE
SGA_MAX_SIZE这个参数顾名思义,它用来控制SGA 使用虚拟内存 的最大大小,这里的虚拟内存的含义可能会有所模糊,先可以这样理解,就是Oracle
所能在内存中给SGA 分配的最大大小 。 现在来解释一下我这里“虚拟内存”的含义,确切的应该这样说:实际内存和虚拟内存。我们知道当OS
中实际内存不够使用的时候,OS 就会去使用虚拟内存。oracle 是运行与os 之上的一个系统软件,它也是一个程序,它所请求os 给它多少内存用来作为其sga
(比方说Oracle 申请500M 内存用作SGA ,即SGA_MAX_SIZE=500M ),os 一般是不会在oracle
启动的时候就给它全部的实际内存,而可能只给200M 。
随着程序的运行,Oracle 不断的需要内存,而假设计算机的所有实际内存只有500M ,那么很肯定的是OS 不可能把全部500M 实际内存分配给oracle
的sga ,可能也最多就给了350M ,剩下的150M 使用虚拟内存。Oracle 的SGA 达到500M 的时候(即达到SGA_MAX_SIZE
指定的大小),实际上这个sga 由350M 实际内存和150M 的虚拟内存组成,如果这个时候Oracle 想继续申请内存给SGA 使用,那么OS
是不会再给其分配内存,因为它已经达到了SGA_MAX_SIZE 的最大值。这个例子,虽然比较极端,即使OS 实际上比方说有1G 内存,Oracle 的SGA
也未必全部由实际内存组成,可能是由400M 实际内存和100M 的虚拟内存
组成,这是由