ORA-00600: internal error code, arguments: [KGL-heap-size-exceeded]

背景

某项目alert日志中偶然报错如下:

ORA-00600: internal error code, arguments: [KGL-heap-size-exceeded]

 

报错的过程中业务变慢,业务处理tps几乎为0,且大量产生cdmp core文件导致/oracle目录爆满

 一会业务恢复正常,但是高峰期又反复出现类似问题

问题排查:

检查故障时间点的awr,发现shared pool相关的等待很严重,怀疑故障时刻shared pool的占用很大

且KGL占用9G+

 

发现报错的sqlsql version count数达到了900+(_cursor_obsolete_threshold设为1024),查看version count高的原因

select c.sql_id,
c.SQL_TYPE_MISMATCH,
c.BIND_EQUIV_FAILURE,
b.POSITION,
b.DATATYPE_STRING,
b.LAST_CAPTURED
from V$SQL_BIND_CAPTURE b, v$sql_shared_cursor c
where c.CHILD_ADDRESS = b.CHILD_ADDRESS
and c.SQL_ID = '9pvt6prqzddvy';

发现BIND_EQUIV_FAILURE为Y,导致cursor无法共享

首先这个环境的sga为128G,shared_pool设置了20G,的确有点小了,Shared Pool Statistics占用已达到90%左右,将shared_pool调整到40g,故障不再出现,但是上面的sql的version count仍旧很高,尝试将_cursor_obsolete_threshold减少到50(之前害怕硬解析增高没有调小),version count问题得到缓解。

后来查询mos,发现BIND_EQUIV_FAILURE 可能是12.2的bug(2610645.1),解决方案:

打上 Patch 28794230

使用如下的workaround:
 

alter system set "_optimizer_use_feedback"=false scope=spfile;
alter system set "_optimizer_adaptive_cursor_sharing"=false scope=spfile;
alter system set "_optimizer_extended_cursor_sharing_rel"=none scope=spfile;
alter system set "_optimizer_use_feedback"=false;
alter system set "_optimizer_adaptive_cursor_sharing"=false;
alter system set "_optimizer_extended_cursor_sharing_rel"=none;

由于故障不再出现,没有参考上面的解决方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值