ITPub博客

首页 > 数据库 > Oracle > 内存_SGA

内存_SGA

原创 Oracle 作者:lusklusklusk 时间:2016-05-24 12:04:57 0 删除 编辑

SGA_MAX_SIZE specifies the maximum size of the SGA for the lifetime of the instance.

SGA_TARGETspecifies the total size of all SGA components. If SGA_TARGET is specified,then Buffer cache\Shared pool\Large pool\Java pool\Streams pool are automatically sized:

 

sga_max_size的值必须大于sga_target,否则会报错ORA-00823: Specified value of sga_target greater than sga_max_size

 

SGA_TARGET不等于0,则是ASMM

 

SGA_MAX_SIZE不能动态修改,修改后必须重启

 

 

SGA主要由数据高速缓冲区(Database Buffer Cache)、共享池(Shared Pool)、重做日志缓冲区(Redo Log Buffer)、大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)组成

 

数据高速缓冲区(Database Buffer Cache)存储的最近从数据文件中检索出来的数据。包括脏缓存块,空闲缓存块,命中缓存块三种类型。

 

共享池(Shared Pool)用于缓存最近执行过的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句、PL/SQL程序进行语法分析、编译、执行的区域,其的主要组件有library cachedictionary cachelibrary cache 储存了最近的SQL/PLSQL代码的可执行模式(解析或编译版本)。

 

大型池(Large Pool)它可以提供一个大的区以供象数据库的backuprestore操作,如果没有在SGA中创建大型池,那么上述操作所需要的缓存空间将在共享池或PGA中分配,因而会影响共享池或PGA的使用效率

 

Stream pool流池(或者如果没有配置流池,则是共享池中至多10%的空间)会用于缓存流进程在数据库间移动/复制数据时使用的队列消息, 流池只对使用了流数据库特性的系统是重要的。在这些环境中,必须设置流池,以避免因为这个特性从共享池窃取”10%的空间。

 

DataPump工具Expdp/Impdp需要从PGASGAShared PoolStreams PoolLarge Pool分配必要的内存。为了避免Expdp/Impdp出现ORA-04031/ORA-04030错误,我们有必要在自动管理模式下设置合理的 pga_aggregate_targetsga_target(抑或者memory_target)内存初始化参数,如果使用手动的SGA管理的话, 那么有必要保证shared_pool_size的设置适宜,对于Streams PoolLarge Pool一般设置为150MB大小。

 

Expdp/Impdpshared Pool的开销主要体现在其运行过程中需要调用一系列的包体PACKGE BODY

 

 

 

 

Shared Pool

Oracle占用量最大的两块内存除了buffer cache区就是Shared Pool的内存了,它的结构非常的复杂,而且由于要缓存SQL代码这种非标准大小的文本,经常会产生大量的碎片化内存,shared pool总体上包含了两大部分,一块是library cache区,用来缓存SQLPL/SQL代码,保存它们的执行计划,提高SQL的解析效率,如果你的应用代码从来不使用绑定变量,那么这一块的内存对你来说是一个很大的负担,但是Oracle里是无法关闭library cache区的,因此对于OLTP系统,请确保SQL都使用了绑定变量。第二大块区域是row cache区,用来缓存数据库的数据字典,由于保存在里面的信息是以行的形式存在,因此叫row cache。对于这一块的内存,依据数据库中元信息(metadata)的多少而决定,如果数据库中有几十万的对象,那么这一块的内存就会占用比较大,同时表上的很多列都有直方图信息,也会导致这一区的内存占用比较大。在一个稳定的系统中,这一区域的内存基本上是静态的,Oracle中几乎没有操作会频繁修改row cache区。有个例外情况是没有cache属性的sequence,如果这种sequence调用频繁,就会触发频繁的修改sequence的属性值,进而可能会产生row cache lock的一些等待,优化的办法是为每一个sequence设置足够的cache值。 如果应用程序没有使用绑定变量,而且难以修改,可以通过设置cursor_sharingforce来尝试解决问题。

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

上一篇: 内存_管理总结
下一篇: 内存_大页内存
请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。11G OCM, 5年以上DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    349
  • 访问量
    348886