ORACLE 10G中SGA,PGA内存分配对系统性能的影响

最近在学习PGA时有一点心得,特此记下,以备查.

    ORACLE官方文档对PGA解释如下“areas used by memory-intensive SQL operators such as sort, group-by, hash-join, bitmap merge, and bitmap create。”很明显PGA是用于SQL排序和哈希连接,位图创建所用的内存区域,当排序空间超过100M或者PGA的 5%时,ORACLE会选择在TEMP表空间继续进行排序,所以理论上说PGA越大,数据库性能应该越好,应该尽量增加该部分的空间大小,不过增加该部分空间可能会对SQL语句的执行计划产生影响,所以在修改PGA时要经过测试确认.

   对SGA修改时,并不是越大越好,当SGA过大时会导致library cache,dictionary cache命中率下降,从而对系统性能产生负面影响,PGA主要是排序操作,所以相对SGA来说过大的PGA并不会带来多么严重的性能下降,只会降低HASH JOIN的成本,从而使优化器更多的选择使用HASH JOIN.

   将PGA的管理交给ORACLE内存管理器是一个不错的选择,绝大多数据时候比手工设置各个值要好的多,只不过在ORACLE 9I共享服务器时无法使用PGA自动管理特性.

  可以通过下面的SQL查询来大致确认PGA是否够用:

select name,value,unit from v$pgastat where name in('aggregate PGA target parameter','maximum PGA allocated');

  当maximum PGA allocated相对于aggregate PGA target parameter过大时,则说明PGA偏小了,需要增加空间.

你可能感兴趣的:(oracle,sql,cache)