有几个影响SGA内存分配数量的参数,除了SGA_MAX_SIZE ,其他都是动态参数,也就是说在数据库运行期间可以使用ALTER SYSTEM 语句动态修改的参数。SGA的大小是动态的,通过修改这些参数可以让SGA增大或缩小。SGA组件和SGA内存颗粒
由许多内存组件组成,他们是用于满足特定内存分配请求的内存池。
例如共享池(用于缓冲磁盘数据块),所有的SAG以一个最小的内存单元颗粒分配和回收内存空间,Oracle在系统内部追踪SAG的内存单元的分配和使用情况。
SGA的内存分配是通过颗粒进行分配的,颗粒大小由SGA的大小决定。一般来将,在大多数平台,如果SGA小于等于1G,那么颗粒大小为4MB,如果大于1G,颗粒的大小为16MB,不同的是在32位Windows平台下,SGA大于1G时,颗粒大小位8MB而非16MB,详细信息,查看操作系统文档。
可以通过V$SGAINFO 系统试图查看由某个实例使用的颗粒大小。同样的大小用于所有SGA的动态组件。
如果指定的SGA组件的大小不是颗粒大小的整数倍,那么Oracle将会四舍五入求整而得到其整数倍值,赋给SGA内存组件。而不是你所指定的大小。
例如如果颗粒大小为4MB,你给 DB_CACHE_SIZE 参数设定为10MB,那么实际分配的内存将会是12MB。限制SGA的大小
SGA_MAX_SIZE 参数指定SGA在实例的生命期内的最大数。动态修改这些参数影响的Buffer cache,shared pool,large pool,java pool,和streams pool的大小,和SGA的总大小。
但是不能超过SGA_MAX_SIZE 参数所设定的值。
如果没有指定,那么默认把所有初始化参数中指定的内存组件的和作为期缺省值。使用自动共享内存管理
通过使用SGA_TARGET参数来启用自动共享内存管理。以前手动分配的类似java_pool,large_pool这样的共享内存组件将被自动管理,另外,你必须确保STATISTICS_LEVEL初始化参数设置为TYPICAL(默认值)或ALL。
SGA_TARGET初始化参数反映了SGA的大小。
全部