10G-19C都有ORA-00600 KGL-heap-size-exceeded问题处理

问题现像与分析

Oracle这个BUG你可能会遇到

近期技术群里经常出现这个问题,频次很高,我这发给大家看看:

症状基本一致:

Alert.log 里面出现如下信息:

Memory Notification: Library Cache Object loaded into SGAHeap size <heap size K>exceeds notification threshold(51200K)

...:KGL object name :<OBJECT NAME>

目前普遍出现在10g/11g/12c/19.3/19.24版本,生成大量的Trc文件会把目录塞满,导致业务无法运行,以下是一些群友的报错截图,

群友甲:

图片

群友乙:

图片

群友丙:

图片

经过群里在Oracle干过研发的资深大佬分析trc日志,得出结论是Oracle的陈年BUG,共享池chunk分裂的问题

图片

图片

图片

MOS里也确实是相关记载。具体可参见:

Memory Notification: Library Cache Object loaded into SGA / ORA-600 [KGL-heap-size-exceeded] (Doc ID 330239.1/2999897.1)

这些warning消息并不会造成进程失败。它们的出现是因为从 10gR2 数据库版本开始引入的事件消息传递机制和内存管理器相关机制。 由于共享池中的大对象可能会导致问题,因此开发了此警告阈值。 若某个sql分配的空间超过此警告阈值则向alert日志输出警告。 此警告只是通知给定的堆对象超出了定义的阈值大小,并生成跟踪文件,以便 DBA 可以检查可能昂贵的对象(从共享内存的角度来看)。 这些纯粹是警告消息,对数据库功能没有影响,尽管它们旨在告知客户应用程序中可能需要调整, 但是并不意味着 ORA-4031 将立即发生,除非共享池的大小非常小。

虽说是有明确的官方文档说明了是个BUG,但是还是有小伙伴的情况发现是应用的某个触发器触发的BUG。

图片

解决办法

可以使用如下脚本检查默认值

select
nam.ksppinm NAME,
nam.ksppdesc DESCRIPTION,
val.KSPPSTVL
from
x$ksppi nam,
x$ksppsv val
where nam.indx = val.indx and nam.ksppinm like '%kgl_large_heap_%_threshold%';

在当前12.2和19C的版本中,这两个值默认值如下所示

NAME                                               DESCRIPTION                                                                      KSPPSTVL
-------------------------------------------------- -------------------------------------------------------------------------------- ------------------------------------------------------------
_kgl_large_heap_warning_threshold                  maximum heap size before KGL writes warnings to the alert log                    52428800
_kgl_large_heap_assert_threshold                   maximum heap size before KGL raises an internal error                            524288000

这里有两个解决方案:

1、Set _kgl_large_heap_warning_threshold to a very large value.就是把这个对应值调大,在增大这个参数阈值之前,需要同时考虑加大 SGA_TARGET 和 SHARED_POOL_SIZE 15% 是SGA有更充足的内存。
2、Set both _kgl_large_heap_warning_threshold and _kgl_large_heap_assert_threshold to zero.就是把这两个值都设置为0关闭告警。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐sir(徐慧阳)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值