数据库的alert日志发现出现以下提示信息
Memory Notification: Library Cache Object loaded into SGA
Heap size 2208K exceeds notification threshold (2048K)
KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==
感觉应该是数据库的bug导致的,后来查出是oracle数据库的隐含参数(_kgl_large_heap_warning_threshold)设置太小导致,此参数在10.2.0.1.0版本默认设置只有2M,对于后期的版本已修正此参数的值为50M,如果数据库是10.2.0.1.0版本出现此提示信息的可能性很大,可以通过下的sql语句获取想要的隐含参数的大小:
select ksppinm name,
ksppstvl value,
ksppstdf isdefault,
decode(bitand(ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismod,
decode(bitand(ksppstvf, 2), 2, 'TRUE', 'FALSE') isadj
from x$ksppi x, x$ksppcv y
where (x.indx = y.indx)
and x.ksppinm like '%' || '¶meter' || '%';
_kgl_large_heap_warning_threshold大小为:2097152,这个值的大小刚好为alert日志中的值
select KSPPDESC from x$ksppi where ksppinm like '_kgl_large_heap_warning%';
用上面sql语句查出来的结果:maximum heap size before KGL writes warnings to the alert log
Oracle10g中,在load较大的对象进入library cache时,超出设定值会记录以上警告信息。
在版本10.2.0.1中,这个定义大对象的阈值是2M,这是由隐含参数_kgl_large_heap_warning_threshold 指定的,
如果系统中需要load很多大对象,又不想在alert中看到太多这类的警告信息,可采取下面两种解决方法:
1、将此参数值改大为50M或0以及更大的值
ALTER SYSTEM
SET _kgl_large_heap_warning_threshold=52428800 SCOPE=SPFILE;
然后后重启数据库才可以生效
2、数据库版本升级
数据库升级到10.2.0.2.0或者更高的版本后,默认该参数的值为50M
解决完成后我们再去查看此隐含参数的值就已经变成50M,同时alert警告日志中也不会再出现类似警告信息了。