每一个进程,包括后台进程都有PGA空间。只不过后台进程占用的PGA空间比较小,平时不怎么关心。而server process占用的PGA空间比较大。
PGA的构成:
1. private SQL area;
2. session memory;
3. SQL work areas(SQL工作区);
其中SQL work area是最重要的工作区,存放会话要处理的数据。
SQL工作区的作用:
1. Server process在执行工作的时候,需要自己的工作空间。
2. 如果通过session执行SQL:select * from t2;没有排序的取数据,block被调到buffer,然后数据从buffer一行一行的经过server process的PGA返回给用户。在没有排序的情况下PGA空间的使用意义不大,数据只经过PGA而已。
如果执行SQL:select * from t2 order by id desc;数据从buffer发送到PGAs,在PGA里进行排序,然后返给用户。所以PGA一定有一块空间是专门用来排序的,这块空间叫做sort_area_size。sort_area_size随着数据量大小的变化而动态变化。Sort_area_retianed_size规定了sort_area_size的最小值。
3. oracle是关系型数据库,表与表之间有关系,经常出现联表查询,这个时候就需要对多个表进行hash连接,此时就会用到hash_area_size空间。