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

pah*_*ogi 5 oracle oracle12c

我遇到了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)

pah*_*ogi 7

在我的情况下,它在创建索引(或任何其他并行操作)时由于非常高的并行度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,该参数就不会产生任何影响.

为社区读者的利益发布答案,因为我还没有找到它.请看这个以便进一步阅读......


Joh*_*ohn 5

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

使用以下命令查看当前的 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