ITPub博客

首页 > 数据库 > Oracle > Oracle体系结构V

Oracle体系结构V

原创 Oracle 作者:糖糖TJ 时间:2015-07-22 20:34:10 0 删除 编辑

<!--[if !supportLists]-->(一)、<!--[endif]-->自动共享管理内存ASMM

<!--[if !supportLists]-->1.<!--[endif]-->ASMM的作用

从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM,Automatic Shared Memory Management)新特性。所谓ASMM,就是指我们不再需要手工设置shared pool、buffer pool等若干内存池的大小,而是为SGA设置一个总的大小尺寸即可。Oracle数据库会根据系统负载变化,自动调整各组件的大小,从而使得内存始终能够流向最需要它的地方。

例如,假设某个系统在上午10:00到下午9:00属于OLTP应用,因而可能会用到较多的BUFFER CACHE;而下午9:00到上午10:00属于OLAP系统,可能会用到较大的SHARED POOL和LARGE POOL。如果我们启用了ASMM,数据库就会根据负载的变化而自动对内存大小进行调整,就不需要数据库管理员手工进行调整了。

<!--[if !supportLists]-->1.<!--[endif]-->如何使用ASMM

Oracle 10g提供了一个新的初始化参数:sga_target来启动ASMM,该参数定义了整个SGA的总容量。同时,初始化参数statistics_level必须设置为typical或all才能启动ASMM,否则如果设置为basic,则关闭ASMM。

ASMM只能自动调整5个内存池的大小,它们是:shared pool、buffer cache、large pool、java pool和stream pool。我们不再需要设置shared_pool_size、db_cache_size、large_pool_size、 java_pool_size、streams_pool_size这五个初始化参数。而其他的内存池,比如log buffer、keep buffer cache等仍然需要DBA手工进行调整。

Oracle 10g还提供了另一个初始化参数sga_max_size。sga_target的值不能超过sga_max_size的值,修改sga_max_size时,必须重启实例才能生效,而sga_target则可以在线修改,立即生效,无须重启实例。

<!--[if !supportLists]-->2.<!--[endif]-->ASMM的原理

为了实现ASMM,Oracle新引入了一个名为MMAN(Memory Manager)的后台进程。每隔很短的一段时间,MMAN进程就会启动,然后去询问一下Oracle提供的各个内存组件顾问,比如有buffer cache顾问,也有shared pool顾问,由这些顾问根据当前的负载情况,将这5个可以自动调整的内存池的、建议的大小尺寸,返回给MMAN。于是,MMAN进程就会根据该返回的值,来设置各个内存池。同时,如果我们使用了spfile,还会将这些顾问得出的建议值写入spfile里。这样,下次启动实例时,就可以直接把顾问得出的建议值拿来作为启动内存池的依据了。

 

如果我们启用了ASMM,同时又手工设置了可以自动调整大小的内存池的尺寸,比如设置了参数shared_pool_size为一个非0值的时候,会怎么样?对于Oracle 10g来说,我们为自动调整大小的内存组件设置了值,则会以我们设置的值作为自动调整的最小值。也就是说,假设sga_target为4GB,而我们将 shared_pool_size设置为600MB,则MMAN在进行自动调整时,永远不会将shared pool设置为600MB以下。

<!--[if !supportLists]-->3.<!--[endif]-->11g中的ASMM

在Oracle11g数据库中,使用自动内存管理特性不再需要设定参数SGA_TARGET和PGA_AGGREGATE_TARGET,,因为这两个参数都已经被修改成自动调优的,除非想指定PGA和SGA的最小值才需要设定这两个参数。 

在Oracle11g数据库中,则需要设置一个叫做MEMORY_TARGET的初始化参数,这个参数是指整个Oracle实例所能使用的内存大小,包括PGA和SGA的整体大小,在MEMORY_TARGET的内存大小之内,PGA和SGA所用的内存可以根据当前负载情况自动相互转换。

如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参数MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节MEMORY_TARGET的大

小,但是不允许超过MEMORY_MAX_TARGET的值。下面这张图简单明了的描述出了Oracle11g数据库内存大小的设定参数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图2-5 11gASMM结构示意图

<!--EndFragment-->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29781254/viewspace-1744945/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle体系结构IV
下一篇: Oracle体系结构VI
请登录后发表评论 登录
全部评论

注册时间:2014-08-01

  • 博文量
    27
  • 访问量
    46687