pga_aggregate_limit
pga_aggregate_limit初始化参数是12.1版本中最新出现的。它对数据库实例可以使用的PGA总量做出了一个硬性限制。这个参数很有用,因为就像上一节描述的那样,通过pga_aggregate_target初始化参数设置的值只是一个目标值,而非硬性限制。在12.1版本中,如有必要,可以同时指定一个硬性限制。
pga_aggregate_limit初始化参数的默认值被设置为以下值中较大的那一个:
Ø 2GB
Ø pga_aggregate_target 初始化参数的值的两倍
Ø 3 MB乘以processes 初始化参数的值
因此,默认情况下会强加一个限制。要避免限制就必须将这个参数设置为0。将这个参数设置为一个比默认值低的值(除了在初始化文件或服务器参数文件中)是不可能的。在尝试设置比默认值低的限制时会引发以下错误:
SQL> ALTER SYSTEM SET
pga_aggregate_limit = 1G;
ALTER SYSTEM SET pga_aggregate_limit = 1G
ORA-02097: parameter cannot be modified
because specified value is invalid
ORA-00093: pga_aggregate_limit must be
between 2048M and 100000G
当达到限制时,数据库引擎会终止调用甚至是杀掉会话。为了选择要处理的会话,数据库引擎不考虑最大的PGA利用率。相反,数据库引擎会考虑使用最多的不可调整内存总量的会话。当调用被终止时,会引发以下错误:
ORA-04036:PGA memory used by the instance
exceeds PGA_AGGREGATE_LIMIT
当会话被杀掉时,会引发一个典型的ORA-03113 错误:
ORA-03113: end-of-file on communication
channel
Process ID: 5125
Session_id: 17 Serial number: 39
此外,会将类似下面这样的对应的信息写入到alert.log中 :
PGA memory used by the instance exceeds
PGA_AGGREGATE_LIMIT of 2048 MB
Immediate Kill Session#: 17, Serial#:39
Immediate Kill Session: sess: 0x77eb74780S
pid: 5125
pga_aggregate_limit 初始化参数是动态的,并且只能在实例级别更改。在12.1版本的多租户环境 下,也可以在PDB级别进行设置。
sort_area_size
如果启用了手工PGA管理,sort_area_size 初始化参数指定(按字节)用于合并联接、排序以及聚合(包括散列分组)的工作区的大小。注意,这是一个工作区的大小,而一个单独的会话可能会分配多个工作区(详见第14章)。因此,用于整个系统的PGA总量取决于分配的工作区的数量而不是会话的数量。
默认值是64KB。尽管几乎不可能给出关于建议值的一般性建议,默认值确实很小,而通常至少需要使用512KB/1MB。值得注意的是,工作区并非总是完全分配的。换句话说,通过sort_area_size初始化参数指定的值只是一个限制。因此,指定一个比实际需要大的值不一定会有问题。
sort_area_size 初始化参数是动态的,并且可以在实例和会话级别修改。在12.1版本的多租户环境下,也可以在PDB级别进行设置。