Oracle日常问题处理 ORA-04031
创新互联服务项目包括吴堡网站建设、吴堡网站制作、吴堡网页制作以及吴堡网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,吴堡网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到吴堡省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!环境:
DB:Oracle 11.2.0.1.0
OS:Windows Server 2008
问题现象:
数据库经常宕机,重启后没过几天又出现问题。
问题原因:
查看问题期间告警日志可知是由ORA-04031 报错引起数据库不可用:
ORA-04031: unable to allocate 2968 bytes of shared memory ("shared pool","insert into smon_scn_time (t...","sga heap(2,0)","call")
从对应的trace日志 中可以看到, " KGH: NO ACCESS " 类型的内存占用了很大的空间。
如下文档解释了这个问题:
ORA-04031 in 11g & 11gR2, Excess "KGH: NO ACCESS" Memory Allocation ( Doc ID 1127833.1 )
这个类型的内存是当共享池和DB Cache 进行切换时的中间状态的内存,如果切换过于频繁,就会导致这种内存累积,并无法正常利用。
相关的Bug 一般在 11.2.0.2 或 11.2.0.3,11.2.0.4.0 版本修复;
并且从AWR 报告也可以看到, Shared Pool Size 比 Buffer Cache 内存高很多,也能推测出可能是 AMM 内存自动管理出了问题。
解决方案:
从根本上解决:
1 升级到 11.2.0.4 版本
推荐的补充方案:
2 给 shared_pool_size 和 db_cache_size 设置一个最小值,减少内存自动切换的可能性
可选方案:
3 设置 alter system set "_memory_broker_stat_interval"=999;
强制规定最少999 秒切换一次。
相关文档:
ORA-04031 和 ORA-04030 经常容易搞混,可以看下面的文章了解更多关于 ORA-04031 和 ORA-04030 错误。
ORA-4031 错误故障排除与诊断[视频] (Doc ID 2016002.1)
OERR: ORA-4031 "unable to allocate %s bytes of shared memory ("%s","%s","%s")" (Doc ID 4031.1)
诊断并解决 ORA-4030 错误 (Doc ID 1548826.1)
欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!