oracle数据库:内存结构_笔记4
4.1.2自动PGA内存管理
从Oracle Database 9i Release 1起,又引入了一种新的方法来管理PGA内存,即自动PGA内存管理。
建立自动PGA内存管理时,需要为两个实例初始化参数确定适当的值,这两个参数如下所示。
.WORKAREA_SIZE_POLICY:这个参数可以设置为MANUAL或AUTO,如果是MANUAL,会使用排序区和散列区大小参数来控制分配的内存量;如果是AUTO,分配的内存量会根据数据库中的当前工作负载而变化。默认值是AUTO,这也是推荐的设置。
.PGA_AGGREGATE_TARGET:这个参数会控制实例为完成数据排序和散列的所有工作区(即排序区和散列区)总共应分配多少内存。在不同的版本中,这个参数的默认值有所不同,可以用多种工具来设置,如DBCA。一般来讲,如果使用自动PGA内存管理,就应该显式地设置这个参数。
自动PGA内存管理的总目标就是尽可能充分地使用RAM,而且不会超出可用的RAM。
1、确定如何分配内存
???我们可以根据MetaLink 147806.1中的一些信息来做一些观察。
.PGA_AGGREGATE_TARGET是一个上限目标,而不是启动数据库时预分配的内存大小。可以把PGA_AGGREGATE_TARGET设置为一个超大的值(远远大于服务器上实际可用的物理内存量),你会看到,并不会因此分配很大的内存。
.串行(非并行查询)会话会使用PGA_AGGREGATE_TARGET中的很少一部分,大约5%或者更少。所以,如果把PGA_AGGREGATE_TARGET设置为100MB,可能每个工作区(例如,排序或散列工作区)只会使用大约不到5MB。你的会话中可能为多个查询分配有多个工作区,或者一个查询中就有多个排序/散列操作,但是不论怎样,每个工作区只会用PGA_AGGREGATE_TARGET中不到5%的内存。注意,5%并非严格规定,事情会变化,自动算法在数据库中会变化。
.随着服务器上工作负载的(可能有更多的并发查询和更多的并发用户),分配给各个工作区的PGA内存量会减少。数据库会努力保证所有PGA分配的总和不超过PGA_AGGREGATE_TARGET设置的阈值。这就像一位DBA整天坐在控制台前,不断地根据数据库中完成的工作量来设置SORT_AREA_SIZE和HASH_AREA_SIZE参数。
.一个并行查询最多可以使用PGA_AGGREGATE_TARGET的30%,每个并行进程会在这30%中得到自己的那一份。每个并行进程能使用的内存量大约是0.3*PGA_AGGREGATE_TARGET/(并行进程数)
http://www.52ij.com/jishu/5164.htmloracle数据库:内存结构_笔记3
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5165.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
