sga_max_size参数决定了sga所使用内存的上限,在实例初始化时,初始化参数文件或服务器参数文件中sga_max_size的值小于oracle为sga各组件分配的内存之和,这时oracle将忽略sga_max_size这个参数的值(当指定SGA_TARGET小于SGA_MAX_SIZE,实例重启后,SGA_MAX_SIZE就自动变为和SGA_TARGET 一样的值了 alter system set sga_target=252M; startup force; show parameter sga; )。
为了优化系统性能,整个 SGA 的容量应与实际内存数量相符。如果因 SGA 过大而需要使用虚拟内存(virtual memory)时,数据库的系统性能将显著下降。因为此时操作系统需要对 SGA 中的部分内容进行分页(page)(即在磁盘上进行读写操作)。SGA 中各个内存组件的容量会对数据库系统的性能有所影响。
为了实现共享内存的自动管理,在 Oracle 10g 中引入SGA_TARGET这个参数,DBA 只需使用 SGA_TARGET 参数指定实例可用的 SGA 总量即可,Oracle 能够自动地将内存分配给 SGA 的各个子组件,以便提高内存的使用效率。当 SGA 的内存处于自动管理状态时,SGA 内各个内存组件的容量可以根据系统的负载灵活地调整而无需任何额外的配置工作(例如:SGA 自动管理后,Oracle 内部的调优算法将监控系统的负载情况,如果发现增大共享池有利于减少重复的 SQL 解析(parse)操作,就会对相关的 SGA 组件进行调整,为共享池分配更多的内存。)。Oracle 自动地将可用的内存分配给有需要的 SGA 组件,使系统中 SGA 内存的利用率达到最大。SGA_TARGET 参数极大地简化了 DBA 的工作。管理员只需设定可供实例 SGA 使用的总内存量,而无需考虑内存如何在 SGA 各组件间分配。除非整个系统内存不足,管理员不必再担心内存不足问题。
sga_max_size是不可以动态修改的,而sga_target参数是可以动态修改,一直到sga_max_size的值(在实例启动之前sga_max_size这个参数已经设定)。
提示:不要动态地设置 SGA_TARGET 参数。这个参数只能在数据库启动时设置。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13805349/viewspace-232349/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13805349/viewspace-232349/