1 PGA是Server Process对应的私有空间,其中保存的都是与会话相关的数据和相关信息。
2 PGA中,主要包括全局变量、数据结构和控制信息。比如我们常说的Session Cursor,就是在执行一个SQL的时候生成在PGA空间中,与SGA中Shared Cursor对应的SQL执行体。
3在空间使用上,session cursor使用的PGA比较少。很多时候,Oracle的性能好坏是与PGA大小配置密切相关。在运行一些长时间执行、操作结果集合很大的SQL时,Oracle是会将处理的数据集和中间结果集合转移到Server Process的私有空间——PGA中进行处理。在Oracle中,对PGA中这样的空间称之为Work Area。
4Work Area的大小设置是和Oracle性能密切相关。在Work Area的具体组成上,有几个比较需要关注的部分:hash_area、sort_area和bitmap_area。可以show parameter **;
5 hash_area hash_area是Oracle对SQL进行连接操作(主要是hash join)时,将进行hash函数计算过的bucket集合进行存储的位置。
6 sort_area表示SQL中进行order by等聚集操作的结果集合场所。
7通常情况下,我们都希望SQL执行所需要的中间结果在Work Area的特定区域中可以容纳。因为PGA对应的是内存区域,进行数据处理和保存的速度要远快于磁盘处理速度。当SQL执行所需要的空间小于work area时候,SQL执行的速度就会很快。但是如果SQL需要空间大于Work Area时,Oracle就会使用Temp表空间的空间进行“置换”操作。这个过程要涉及到比较复杂的计算和存储过程,所以一旦出现这样的“multi-pass”过程,SQL执行的效率通常是较低,响应时间也随之增加。
8 DBA只需要指定一个初始化参数pga_aggregate_target,作为从数据库服务器角度希望分配给所有Server Process的PGA总和大小。
一旦设置了pga_aggregate_target参数,就意味着规定Oracle实例在分配给所有Server process PGA空间的时候,总分配量不要超过这个参数值。但是注意,这个参数是一个target,有一些情况下,Oracle分配的Server process PGA总和是会超过这个target值的。但是总的来说,Oracle在调整时会尽量围绕这个规划值进行调整。
此外,要开启自动的SQL执行空间管理,还要设置workarea_size_policy初始化参数。
9从Oracle 9i开始,PGA自动配置调整就成为Oracle PGA设置的一种主要方式。DBA不再过多关注PGA内部各个区划分的大小问题,而是只需要站在Database Server角度,看分配给所有PGA的内存空间大小就可以了。各个分区大小都是通过Oracle自适应的过程进行调节。