说明
相关文章链接:
PGA_AGGREGATE_LIMIT详解(一)PGA_AGGREGATE_TARGET的限制: http://blog.itpub.net/69992972/viewspace-2893571/
PGA_AGGREGATE_LIMIT详解(二)PGA_AGGREGATE_LIMIT的作用: http://blog.itpub.net/69992972/viewspace-2893573/
PGA_AGGREGATE_LIMIT详解(三)PGA_AGGREGATE_LIMIT的大小设置: http://blog.itpub.net/69992972/viewspace-2893574/ PGA_AGGREGATE_LIMIT的大小设置 这个参数是动态参数,但一般无需手动设置,因为这个参数会根据实际内存的变化来做出调整。不同版本的PGA_AGGREGATE_LIMIT的默认大小设置规则也不一样: (1)12.112.1版本会选择以下三种情况中最大的值作为PGA_AGGREGATE_LIMIT的值:1)2 GB2)200% 的 PGA_AGGREGATE_TARGET3)参数PROCESSES的值 * 3 MB 注: 该参数不会超过物理内存大小减去总 SGA 大小的 120%。 (2)12.21)如果设置了MEMORY_TARGET(AMM管理),那么PGA_AGGREGATE_LIMIT的值就等于MEMORY_MAX_TARGET的值2)如果MEMORY_TARGET没有设置,那么PGA_AGGREGATE_LIMIT的值为2倍PGA_AGGREGATE_TARGET值3)如果MEMORY_TARGET没有设置,并且PGA_AGGREGATE_TARGET的值为0,那么PGA_AGGREGATE_LIMIT的值为90%的物理内存减去SGA的大小在以上所有情况中, 默认的PGA_AGGREGATE_LIMIT至少是2GB 并且至少是数据库参数PROCESSES乘以3MB的大小。 (3)18c及以上版本由于涉及到使用MGA,并且MGA不计算在PGA的大小中,所以 18c以上的版本就要把MGA给考虑进去,就要通过增加PGA来解决。所以18c及以上的版本的计算方式为: PGA_AGGREGATE_LIMIT = (原始 PGA_AGGREGATE_LIMIT 值) + ((最大连接进程数) * 4M) 这里再补充几个概念: 系统全局区除了我们所知的PGA和SGA外,还包括MGA和DGA。1. MGA(管理全局区):允许“较小的一组”进程(甚至所有进程)在持续时间(通常是查询)内共享地址空间(命名空间)2. DGA(动态全局区):允许在 PGA 初始化期间初始化并且在运行时不可修改的变量池3. 这两个参数不会跨进程更改,但需要在 SGA 初始化之前可用。因此,它们可作为全局变量供其他进程使用。MGA和DGA从12.1 开始就存在了。但是只有在最近的版本中(如18c),数据库组件才开始使用它4. MGA 和 DGA 在Oracle进程之间共享,它们不能归属于单个进程5. v$process 和 v$sesstat不会包含它们。它们只会计入到v$pgastat,其中一部分计入“使用中的总PGA”,查询SQL如下:
SQL> select * from v$pgastat where name like '%GA%' and name not like '%PGA %';
