我遇到了ORA-04036(12c),而我的一个团队成员正在创建一个oracle文本索引.
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
Run Code Online (Sandbox Code Playgroud)
在我的情况下,它在创建索引(或任何其他并行操作)时由于非常高的并行度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 times过程参数的值2倍参数pga_aggregate_target的值但是此限制不超过总物理内存的1.2倍在拿走总SGA大小之后.不喜欢这个新功能,并希望回到之前的(12c之前)行为?当然; 只需将pga_aggregate_limit的值设置为0,该参数就不会产生任何影响.
为社区读者的利益发布答案,因为我还没有找到它.请看这个以便进一步阅读......
我遇到了类似的问题,并通过执行以下操作解决了它。
使用以下命令查看当前的 pga_aggregate_limit 是什么(以防您想恢复更改):
show parameter pga_aggregate_limit;
Run Code Online (Sandbox Code Playgroud)
使用以下命令将 pga_aggregate_limit 设置为 0:
alter system set pga_aggregate_limit = 0;
Run Code Online (Sandbox Code Playgroud)
更多信息请点击这里:
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