0

这个叫做 KGL SIMULATOR 的东西是什么?应用程序开发人员如何管理它的内存利用率?

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

ORA-04031: 无法分配 4032 字节的共享内存 ("shared pool","select text from > view$ where...","sga heap(3,0)","kglsim heap")

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

4

2 回答 2

3

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

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

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

如果缓存更大(感谢 KGL 模拟器历史记录)并知道对象重新加载花费了多少时间,Oracle 可以预测多少响应时间本来是可以避免的,使用该信息可以避免多少库缓存对象(重新)加载如果共享池更大,则保存实例范围。这可以从 v$library_cache_advice 看出。

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

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

-- Tanel Poder http://blog.tanelpoder.com

于 2009-02-17T02:02:12.783 回答
1

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

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

于 2008-10-09T13:57:02.393 回答