Home >Database >Mysql Tutorial >【体系结构问题解决,1】解决4031错误方法

【体系结构问题解决,1】解决4031错误方法

WBOY
WBOYOriginal
2016-06-07 16:02:522248browse

三.解决4031错误方法: (ora-4031错误产生原因:大量的硬解析后,导致链上的chunk都变的非常小,此时来了一个大的sql会找不到合适的chunk,就会报ora-4031错误。) 如果SHARED_POOL_SIZE 设置得足够大,又可以排除 Bug 的因素,那么大多数的ORA- 04031 错误

三.解决4031错误方法:

(ora-4031错误产生原因:大量的硬解析后,导致链上的chunk都变的非常小,此时来了一个大的sql会找不到合适的chunk,就会报ora-4031错误。)

如果SHARED_POOL_SIZE 设置得足够大,又可以排除 Bug 的因素,那么大多数的ORA- 04031 错误都是由共享池中的大量的SQL 代码等导致过多内存碎片引起的。

1.执行alter system flush shared_pool; 清理library cache 和rows cache ,此方法只能临时解决问题不推荐使用。

原因:

(1 )Flush Shared Pool 会导致当前未使用的cursor 被清除出共享池,如果这些 SQL 随后需 要执行,那么数据库将经历大量的硬解析,系统将会经历严重的CPU 争用,数据库将会产生 激烈的L atch 竞争。

(2 )如果应用没有使用绑定变量,大量类似SQL 不停执行,那么Flush Shared Pool 可能 只能带来短暂的改善,数据库很快就会回到原来的状态。

(3 )如果Shared Poo l 很大,并且系统非常繁忙,刷新Shared Pool可能会导致系统挂起, 对于类似系统尽量在系统空闲时进行。

2.方法二: 让开发人员修改sql语句,实现共享SQL,

3.方法三:将较大的对象保存到内存中,

4.方法四:设置合适的shared_pool_reserved_size参数,结合shared_pool_reserved_min_alloc 参数可以用 来避免由此导致的性能下降。这个参数的缺省值是shared_pool_size 的5%,通常这个参数的建议值为shared_pool_size参数的10% ~20% 大小,最大不得超过shared_pool_size的50% 。 保留区是在shared_pool中专门用来缓存大对象区域,所以可以增加保留区的大小。 #查看请求保留区的错误次数,(若过请求保留区错误,就会包4031错误) select REQUEST_MISSES from v$shared_pool_reserved; 6.使用AMM自动内存管理来分配共享池,防止共享池设置小而出错。(一般做到这一步就可以了)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn