无微不至:调整_lm_cache_res_cleanup解决Shared Pool 的4031问题

简介:


李真旭(Roger)

云和恩墨西北区技术总监

Oracle ACE, ACOUG 核心会员


前不久某客户的一套核心数据库(10.2.0.4.12),据说每间隔一段时间就必须重启,因为会报ORA-04031 错误。


查询发现 shared pool 差不多 5G 的样子,其实 ges resource 消耗了差不多 3.5G shared pool 内存,也确实有些离谱了。



我们可以看到,ges resource 消耗的内存确实非常高。那么这里为什么 ges resource 消耗的内存这么高呢?


通过检查 v$resource_limit 发现存在有些异常,如下所示:



我们可以发现,ges_cache_ress 的 max 和 current 都很大,大的超乎想象。从现象来看,可以大致判断是 shared pool 中 cache 的 ges resource 没有及时回收,导致 ges resource占据的内存比较大。


想到这里,我心中产生了一个疑问,是否 Oracle 有相关隐含参数来控制这个资源回收的机制呢?我们知道 Oracle 通常都是这么干的,通过隐含参数来控制某项功能或机制。


搜下发现了2个相关的 bug,确实可能出现 ges resource 消耗内存很高的情况,最后产生ora-04031错误。


其中文档中提到了一个参数 _lm_cache_res_cleanup;通过调整该参数,来该表 ges resource 的回收机制;有可能避免这个情况。


方法好用不,要试试才知道,果断告知客户进行调整,然后观察几天后,发现 ges resource 的内存消耗得到了有效控制:



在未调整参数之前,重启实例1天,ges resource 就超过 300M了,然后逐渐攀升,直至出现问题。


备注:  bug 9026008,bug 10042937 跟该参数有关系,影响版本为11.1,11.2部分版本,大家可以阅读下。


总结:Oracle数据库的精细程度往往超越了大家的经验,几乎每一个微小的功能都存在着控制参数,遇到问题时,仔细分析,深入细节,最后从源头解决问题,是Oracle DBA的必备素质


本文出自数据和云公众号,原文链接


目录
打赏
0
0
0
0
16429
分享
相关文章
shared pool 调整
SQL>  select shared_pool_size_for_estimate spsfe,  2  shared_pool_size_factor spsf,  3  estd_lc_size els,  4  estd_lc_memory_object...
858 0
简单分析shared pool(一)
oracle中的shared pool很重要,但是感觉知之甚少。今天想在原来的认识上能够有一点更深入的了解。 简单做了一个总结。 首先是转储一下shared pool共享内存的内容。
924 0
简单分析shared pool(三)
提到shared pool,都会不由得和sql语句的解析过程联系起来,因为shared pool所做的主要工作就是解析sql语句,生成执行计划,在之前的两篇中对于shared pool的存储进行了简单的分析,在10g,11g都是保留了255个bucket,可见这个值还是一个最优的默认值了。
933 0
简单分析shared pool(二)
对于shared pool的学习,发现越尝试去了解,发现自己对它越不了解。里面的东西很杂。 自己想用几个问题来作为引子来说明更加会有条理一些。shared pool的大小设置 对于shared pool的大小设置,从早期版本到现在一直都带有争论。
651 0
等待模拟-library cache shared pool 硬解析
drop table test1; create table test1 (it int); insert into test1 values(10); create table test2 as select * from test1; create tab...
750 0
dbms_shared_pool之aborted_request_threshold,sizes
继续介绍dbms_shared_pool的用法: dbms_shared_pool.aborted_request_threshold(5000);作用:当共享池满无足够内存来满足给定请求时,它将开始释放对象,知道有了足够内存。
682 0
0324resumable_timeout library cache lock
[20160324]参数resumable_timeout和library cache lock.txt --今天测试环境遇到library cache lock的情况,主要测试磁盘空间很紧张,但是设置了参数resumable_timeout。
906 0