什么是Oracle KGL SIMULATOR?

时间:2008-10-08 17:47:18

标签: oracle debugging oracleinternals

什么叫做KGL SIMULATOR,它的内存利用率如何由应用程序开发人员管理?

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

  

ORA-04031:无法分配4032字节的共享内存(“共享池”,“从>视图$中选择文本...”,“sga heap(3,0)”,“kglsim heap”)

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

2 个答案:

答案 0 :(得分:3)

KGL =内核通用库缓存管理器,顾名思义它处理库对象,如游标,缓存存储对象定义(PL / SQL存储过程,表定义等)。

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

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

如果缓存更大(由于KGL模拟器历史记录)并且知道对象重新加载花费了多少时间,那么可以避免使用有关多少库缓存对象(重新)加载的信息,Oracle可以预测响应时间有多少如果共享池更大,则会在实例范围内保存。这可以从v $ library_cache_advice看到。

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

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

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

答案 1 :(得分:1)

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

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