SGA:全局的很大的共享内存段,几乎所有的ORACLE进程要访问;
PGA: 一个进程或者线程专用的内存,其他进程或线程不能访问;
UGA:此内存区与特定的会话相关联,可能在SGA中分配也可能在PGA中分配,取决于连接服务器的模式。
PGA不会在SGA中分配,总是由进程或者线程在本地分配。
PGA包含进程内存,还可能包含UGA,PGA内存中的其他区通常用于完成内存中的排序、位图、合并以及散列。
PGA受数据库初始化参数WORKAREA_SIZE_POLICY的控制,默认为AUTO。
手段管理PGA的内存管理:主要取决三个参数:SORT_AREA_SIZE、SORT_AREA_RETAINED_SIZE\HASH_AREA_SIZE。
可以做个实验,看看结果就明白:
...create table t as select * from all_objects; exec dbms_stats.gather_table_stats(user,'t'); alter session set workarea_size_policy=manual; alter session set sort_area_size=1073741820; set termout off select * from t order by 1,2,3,4; set termout on