ORA-04036: 实例使用的 PGA 内存超过 PGA_AGGREGATE_LIMIT

问题描述 投票:0回答:2

当我的一位团队成员创建 Oracle 文本索引时,我遇到了 ORA-04036(在 12c 上)。

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
ORA-00039: error during periodic action
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
oracle oracle12c
2个回答
14
投票

这可能是由于客户端为并行操作而建立的多个会话造成的,或者客户端可能会泄漏会话并且未正确关闭它们。

在我的例子中,由于创建索引(或任何其他并行操作)时并行度非常高 48(需要太多会话和增加的 PGA)而失败。 我们应该尽量减少并行性来避免这种情况。我尝试使用 DOP 8 脚本成功运行。

在 Oracle Database 12c 中,一个名为 PGA_AGGREGATE_LIMIT 的新参数 对实例占用的 PGA 数量设置硬性限制。什么时候 该实例中所有会话占用的总 PGA 超过 限制,Oracle 终止持有最不可调的 PGA 的会话 内存,释放该会话持有的所有 PGA 内存。那杀了 会话收到此消息。

注意新的 Oracle 错误 ORA-4036。这是一个非常有用的 用于控制未调整会话发出的失控 PGA 消耗的功能 查询。参数pga_aggregate_limit,如果没有显式定义, 默认为这三个数字中的较大者:2 GB 3 MB 乘以 过程参数值 2 倍参数值 pga_aggregate_target 但是这个限制不超过1.2倍 去掉总 SGA 大小后的总物理内存。不喜欢 这个新功能并想回到以前的(12c 之前) 行为?当然;只需将 pga_aggregate_limit 的值设置为 0 即可 参数不会有任何影响。

为了社区读者的利益发布答案,因为我还找不到它。请参阅this以进一步阅读。


9
投票

我遇到了类似的问题,并通过执行以下操作解决了它。

使用以下命令查看当前的 pga_aggregate_limit 是什么(如果您想恢复更改):

show parameter pga_aggregate_limit;

使用以下命令将 pga_aggregate_limit 设置为 0:

alter system set pga_aggregate_limit = 0; 

更多信息请点击这里:

http://www.dba-oracle.com/t_pga_aggregate_limit.htm

https://docs.oracle.com/database/121/REFRN/GUID-E364D0E5-19F2-4081-B55E-131DF09CFDB3.htm#REFRN10328

© www.soinside.com 2019 - 2024. All rights reserved.