PGA : 是完全为 server process 服务的, 在 server process 创建时被分配到, 在server process 终止时被释放. 而且是非共享的, 只独立服务于这个server process. (server process 的私有内存空间)
1. 存储server process 执行SQL所需要的私有数据和控制文件
2. 会话空间, 存放 session 等相关信息
3. SQL工作区: 排序操作(orader by/group by/distinct/union 等), 多表hash连接, 位图连接, 创建位图
PGA 自动内存管理
SQL 工作区可以是自动的、全局的管理。 DBA 只要设置参数 PGA_AGGREGATE_TARGET 给一个实例的PGA 内存指定总的大小.
设置这个参数后, Oracle 将它作为一个总的全局限制值,尽量使所有 Oracle 服务进程的 PGA 内存总数不超过这个值(尽量)
内存大小, 假设总的内存大小为 4G, 那么,一般 我们会分配给 oracle 80%, 然后,
OLTP 系统: (oracle 80% = 3.2G) * 0.2 = 640m 给 PGA, 剩下 80% 给 SGA
数据仓库DSS: (oracle 80% = 3.2G) * 0.5 = 1.6G 给PGA, 剩下的 50% 给 SGA
11g 以后, 更加简单, 只要设置 memory_target=PGA+SGA, 其余的不用管了