oracle数据库:内存结构_笔记6
.1.3手动和自动内存管理的选择
警告:不要对生产系统(实际系统)做任何修改,除非先测试修改有没有副作用。
最让DBA头疼的一件事可能就是设置各个参数,特别是像SORT|HASH_AREA_SIZE之类的参数。系统运行时这些参数的值可能设置得相当小,而且实在是太小了,以至于性能受到了负面影响。造成这种情况的原因可能是默认值本身就非常小:排序区的默认大小为64KB,散列区的默认大小也只是128KB。
从历史上看,DBA都是通过设置SGA(缓冲区缓存、日志缓冲区、共享池、大池和JAVA池)的大小来配置Oracle使用的内存量。机器上余下的内存则由PGA区中的专用或共享服务器使用。你根本不能很好地控制系统上最多能使用的PGA内存量。
你所希望的可能是:随着系统上内存需求的增加和减少,会使用不同大小的内存。用户越多,每个用户使用的RAM就越少。用户越少,每个用户能使用的RAM则越多。设置WORKAREA_SIZE_POLICY=AUTO就是要达到这个目的。现在DBA只指定一个大小值,即PGA_AGGREGATE_TARGET,也就是数据库应当努力使用的最大PGA内存量。Oracle会根据情况将这个内存适当地分配给活动会话。另外,在Oracle Database 9i Release 2及以上版本中,???甚至还有一个PGA顾问(PGA advisory),这是Statspack的一部分,可以通过一个V$动态性能视图得到,也可以在企业管理器(EM)中看到,PGA顾问与缓冲区缓存顾问很相似。它会一直告诉你,为了尽量减少对临时表空间执行的物理I/O,系统最优的PGA_AGGREGATE_TARGET是什么。
不过,有没有可能不想使用自动PGA内存管理的情况呢?自动内存管理力图对多个用户做到“公平”。由于预见到可能有另外的用户加入系统,因此自动内存管理会限制分配的内存量只是PGA_AGGREGATE_TARGET的一部分。但是假如你不想要公平,确实知道应该得到所有可用的内存(而不是其中的一部分),这该怎么办?倘若如此,就应该使用ALTER SESSION命令在你的会话中禁用自动内存管理(而不影响其他会话),并且根据需要,手动地设置你的SORT|HASH_AREA_SIZE。例如,凌晨2:00要做一个大型的批处理,它要完成大规模的散列联结,建立索引等工作,对于这样一个批处理作业,你要怎么做?它应该可以使用机器上的所有资源。在内存使用方面,它不想“公平”,而是全部都想要,因为它知道,现在数据库中除了它以外再没有别的任务了,当然这个批处理作业可以发出ALTER SESSION命令,充分使用所有可用的资源。
简单地讲,对于成天在数据库上运行的应用,对最终用户会话使用自动PGA内存管理。手动内存管理则适用于大型批处理作业,它们在特殊的时段运行,此时它们是数据库中唯一的活动。
4.1.4PGA和UGA小结
PGA是进程专用的内存区。这是Oracle专用或共享服务器需要的一组独立于会话的变量。PGA是一个内存“堆”,其中还可以分配其他结构。UGA也是一个内存堆,其中定义不同会话特有的结构。如果使用专用服务器来连接Oracle,UGA会从PGA分配,如果使用共享服务器连接,UGA则从SGA分配。这说明,使用共享服务器时,必须适当地设置SGA中大池(large pool)的大小,以便有足够的空间来适应可能并发地连接数据库的每一个用户。
The usage of V$PGA_TARGET_ADVICE
V$PGA_TARGET_ADVICE的用法
http://www.52ij.com/jishu/5166.htmloracle数据库:内存结构_笔记5
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5167.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
