什么是甲骨文KGL模拟器



这个东西叫KGL模拟器,应用程序开发人员如何管理它的内存利用率?

这个问题的背景是,我偶尔会遇到如下错误,并希望大致了解是什么在使用此堆空间?

ORA-04031:无法分配 4032 字节的共享内存("共享池","从>view$ 中选择文本,其中...","sga 堆(3,0)","kglsim 堆")

我通过谷歌阅读了论坛帖子,建议kglsim与KGL SIMULATOR相关,但没有该组件的定义,也没有给开发人员的任何提示。

KGL=Kernel General Library cache Manager,顾名思义,它处理库对象,如游标、缓存存储对象定义(PL/SQL 存储过程、表定义等)。

KGL 模拟器用于估计缓存在缓存大于当前时的好处。一般的想法是,当刷新库缓存对象时,它的哈希值(以及其他一些信息)仍保留在 KGL 模拟器哈希表中。这将存储内存中但已刷新的对象的历史记录。

加载库缓存对象

(这意味着库缓存中不存在此类对象)时,Oracle 会检查 KGL 模拟器哈希表,以查看其中是否存在具有匹配哈希值的对象。如果找到匹配的对象,则意味着所需的对象过去一直在缓存中,但由于空间压力而被清除。

利用缓存较大时可以避免多少库缓存对象(重新)加载的信息(得益于 KGL 模拟器历史记录),并了解对象重新加载所花费的时间,Oracle 可以预测如果共享池更大,整个实例将节省多少响应时间。这从 v$library_cache_advice 可以看出。

无论如何,此错误可能是由受害者会话引起的,因为共享池空间不足。换句话说,其他人可能已经用完了所有内存(或所有足够大的块),并且此 KGL sim 分配因此失败。

v$sgastat 将是解决 ORA-4031 错误的第一点,您需要确定共享池中有多少可用内存(以及谁用了大部分内存)。

--塔内尔·波德http://blog.tanelpoder.com

我发现KGL代表"内核通用库"。

您的问题可能是 Oracle 中的内存泄漏。 您可能应该在 Oracle 支持下打开一个案例。

最新更新