ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 追记 oracle10.2.0.1 _kgl_large_heap_warning_threshold 参数引起的问题

追记 oracle10.2.0.1 _kgl_large_heap_warning_threshold 参数引起的问题

原创 Linux操作系统 作者:木呼 时间:2011-01-27 14:15:24 0 删除 编辑
10年11月2日
      客户现场传来一份日志文件,据说是数据库服务器当机了,原因不明。
      翻看alert.log文件 发现当机的时间段出现以下记录
Memory Notification: Library Cache Object loaded into SGA
Heap size 2295K exceeds notification threshold (2048K)
KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==
   
      这是10.2.0.1的bug 原因是一个偏门参数 _kgl_large_heap_warning_threshold 默认值过低导致的  在oracle中 参数名以 下划线 _开头,是在文档中未做说明的。大多数_开头的参数都是过时的功能以及为保证向后兼容性而设置的标志。当然只是大部分。_kgl_large_heap_warning_threshold 指定的是大对象进library cache的阀值,当操作这个阀值的时候,会发生警告导致实例停止。
Oracle10g中,在版本10.2.0.1中,这个定义大对象的阈值是2M,而在更高的版本中,这个默认值已经调高了。
 
解决问题:
 
      以下记录是在网上摘的,既然有人写了就懒得再写了。
C:>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 11月 22 16:11:50 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

idle>conn sys/sys@doscdb as sysdba
已连接。

DOSCDB(sys)>select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

查看了一下隐含参数

DOSCDB(sys)>select ksppinm name,
2 ksppstvl value,
3 ksppstdf isdefault,
4 decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,
5 decode(bitand(ksppstvf,2),2,'TRUE','FALSE') isadj
6 from x$ksppi x, x$ksppcv y
7 where (x.indx = y.indx) and
8 x.ksppinm like '%'||'¶meter'||'%'
9 /
输入 parameter 的值: kgl
原值 8: x.ksppinm like '%'||'¶meter'||'%'
新值 8: x.ksppinm like '%'||'kgl'||'%'

NAME VALUE ISDEFAULT ISMOD ISADJ
------------------------------ ------------------------- ------------------ -------------------- ----------
_kgl_multi_instance_lock TRUE TRUE FALSE FALSE
_kgl_multi_instance_pin TRUE TRUE FALSE FALSE
_kgl_multi_instance_invalidati TRUE TRUE FALSE FALSE
on

_kgl_latch_count 0 TRUE FALSE FALSE
_kgl_heap_size 1024 TRUE FALSE FALSE
_kgl_fixed_extents TRUE TRUE FALSE FALSE
_kgl_session_cached_objects 10 TRUE FALSE FALSE
_kgl_keep_cache_pct 30 TRUE FALSE FALSE
_kgl_keep_cache_retain_pct 20 TRUE FALSE FALSE
_kgl_bucket_count 9 TRUE FALSE FALSE
_kglsim_maxmem_percent 5 TRUE FALSE FALSE
_kgl_hash_collision FALSE TRUE FALSE FALSE
_kgl_time_to_wait_for_locks 15 TRUE FALSE FALSE
_kgl_large_heap_warning_thresh 2097152 TRUE FALSE FALSE
old


已选择14行。

_kgl_large_heap_warning_threshold 2097152

这行数据是值得怀疑的 ,应该就是它的问题

分析问题:

DOSCDB(sys)>select KSPPDESC from x$ksppi where ksppinm like '_kgl_large_heap_warning%';

KSPPDESC
-----------------------------------------------------------------------------------------

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中看到太多这类的警告信息,可以修改该参数

解决问题:

将其修改成10m大小

DOSCDB(sys)>alter system set "_kgl_large_heap_warning_threshold"=10485760 scope=spfile ;

系统已更改。


DOSCDB(sys)>shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
DOSCDB(sys)>startup

ORACLE 例程已经启动。

Total System Global Area 419430400 bytes
Fixed Size 1249368 bytes
Variable Size 125833128 bytes
Database Buffers 285212672 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。

DOSCDB(sys)>select ksppinm name,
2 ksppstvl value,
3 ksppstdf isdefault,
4 decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,
5 decode(bitand(ksppstvf,2),2,'TRUE','FALSE') isadj
6 from x$ksppi x, x$ksppcv y
7 where (x.indx = y.indx) and
8 x.ksppinm like '%'||'¶meter'||'%'
9 /
输入 parameter 的值: kgl
原值 8: x.ksppinm like '%'||'¶meter'||'%'
新值 8: x.ksppinm like '%'||'kgl'||'%'

NAME VALUE ISDEFAULT ISMOD ISADJ
------------------------------ ------------------------- ------------------ -------------------- ----------
_kgl_multi_instance_lock TRUE TRUE FALSE FALSE
_kgl_multi_instance_pin TRUE TRUE FALSE FALSE
_kgl_multi_instance_invalidati TRUE TRUE FALSE FALSE
on

_kgl_latch_count 0 TRUE FALSE FALSE
_kgl_heap_size 1024 TRUE FALSE FALSE
_kgl_fixed_extents TRUE TRUE FALSE FALSE
_kgl_session_cached_objects 10 TRUE FALSE FALSE
_kgl_keep_cache_pct 30 TRUE FALSE FALSE
_kgl_keep_cache_retain_pct 20 TRUE FALSE FALSE
_kgl_bucket_count 9 TRUE FALSE FALSE
_kglsim_maxmem_percent 5 TRUE FALSE FALSE
_kgl_hash_collision FALSE TRUE FALSE FALSE
_kgl_time_to_wait_for_locks 15 TRUE FALSE FALSE
_kgl_large_heap_warning_thresh 10485760 FALSE FALSE FALSE
old


已选择14行。 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23754390/viewspace-686377/,如需转载,请注明出处,否则将追究法律责任。

上一篇: sql实现排列组合
请登录后发表评论 登录
全部评论

注册时间:2010-04-19

  • 博文量
    93
  • 访问量
    152567