Chanel [K]

面朝大海,春暖花开

Something about PGA allocation

with one comment

1. 在设置了PGA_AGGREGATE_TARGET初始化参数的数据库中,表示使用PGA自动管理,所有其它的*_AREA_SIZE参数都将被忽略。PGA_AGGREGATE_TARGET参数值的范围是:10MB 到 4096GB–1个字节之间。

2. Oracle数据库会按照每个session的需要为其分配PGA,同时会尽量维持整个PGA的内存总和不超过PGA_AGGREGATE_TARGET参数所定义的值。

3. 在PGA中对于性能影响最大的是SQL Work Area(SQL工作区)
Oracle将所分配的SQL工作区大小分成三种类型:
Optimal:SQL语句能够完全在所分配的SQL工作区内完成所有的操作。这时性能最佳。
Onepass:SQL语句需要与磁盘上的临时表空间交互一次才能够在所分配的SQL工作区中完成所有的操作。
Multipass:由于SQL工作区过小,从而导致SQL语句需要与磁盘上的临时表空间交互多次才能完成所有的操作。这时性能将急剧下降。

SQL> SELECT swh.MULTIPASSES_EXECUTIONS,swh.LOW_OPTIMAL_SIZE,swh.HIGH_OPTIMAL_SIZE
  2  FROM v$sql_workarea_histogram swh
  3  WHERE swh.MULTIPASSES_EXECUTIONS>0
  4  ORDER BY 1 DESC;

通过以上SQL可以知道所有被分配了Multipass尺寸的会话需要多大的内存才能够成为Optimal操作。

4. 单个会话使用PGA的期望尺寸(也可以认为是实际分配的最大尺寸)计算公式是: min(5%*pga_aggregate_target,50%*_pga_max_size,_smm_max_size)

5. 每次修改pga_aggregate_target值,Oracle都会自动重新计算_smm_max_size值。
如果_pga_max_size > 5%*pga_aggregate_target,则_smm_max_size为5%*pga_aggregate_target。
如果_pga_max_size <= 5%*pga_aggregate_target,则_smm_max_size为50%*_pga_max_size。

实际上最终决定会话PGA使用量的隐含参数是_smm_max_size。
我们通过在会话级别修改_pga_max_size或者_smm_max_size,可以达到微调单个会话PGA使用效率的目的。

注:_smm_max_size单位是K。

Written by kamus

May 22nd, 2009 at 2:32 pm

Posted in Oracle RDBMS

Tagged with

One Response to 'Something about PGA allocation'

Subscribe to comments with RSS or TrackBack to 'Something about PGA allocation'.

  1. 刚安装了Oracle特为这里开发的PGA泄漏补丁,但愿以后不用每3天重启一次web服务了。

    圆梦之旅

    25 May 09 at 11:52 am

Leave a Reply