【Memory】ORA-4031错误概要

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【Memory】ORA-4031错误概要,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Keyword:

    Memory
    ora-4031
    Heap dump

版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique

概述

本文将概括地介绍内存不足引起的ORA-4031错误。

关于ORA-4031错误

ORA-4031错误对于一些有一定Oracle数据库经验的人来说不陌生。
即:当进程从共享内存中分配内存时,由于没有足够大的连续空闲空间(内存块)而导致的错误。

错误报警的例子:

ORA-04031: unable to allocate 1072 bytes of shared memory ("shared pool","SELECT OBJECT_TYPE ...","KGLH0^46e70486","kkocs.c.kgght")

关于上面的错误内容各项目的含义,简单介绍如下:

1072 bytes              :请求分配的内存大小
"shared pool"           :要求内存的内存池(即发生错误的内存池)
(通常为shared pool或large pool,有时也可能是java pool 或 Streams pool)
"SELECT OBJECT_TYPE ...":要求内存的对象内容,不明时出力为"unknown object"
"KGLH0^46e70486"        :要求内存的大体类型和位置
"kkocs.c.kgght"         :要求内存的类型

下面是ORA-4031的简单描述和帮助:

$ oerr ora 4031
04031, 00000, "unable to allocate %s bytes of shared memory (\"%s\",\"%s\",\"%s\",\"%s\")"
// *Cause:  More shared memory is needed than was allocated in the shared
//          pool or Streams pool.
// *Action: If the shared pool is out of memory, either use the
//          DBMS_SHARED_POOL package to pin large packages,
//          reduce your use of shared memory, or increase the amount of
//          available shared memory by increasing the value of the
//          initialization parameters SHARED_POOL_RESERVED_SIZE and 
//          SHARED_POOL_SIZE.
//          If the large pool is out of memory, increase the initialization
//          parameter LARGE_POOL_SIZE.  
//          If the error is issued from an Oracle Streams or XStream process, 
//          increase the initialization parameter STREAMS_POOL_SIZE or increase
//          the capture or apply parameter MAX_SGA_SIZE.

ORA-4031的主要原因和解决方法

发生ORA-4031错误的处理通常为”压垮骆驼背的最后一根稻草”,即很有可能是内存不足的受害者,而不是罪魁祸首。因此,在调查ORA-4031问题时,要关注总体的内存使用情况而不是发生问题的处理或对象。

一般ORA-4031错误主要有以下几种原因引起:

1.内存不足,内存池的过小。
2.内存池的碎片化。虽然总体空闲空间还是很大,但是由于碎片化没有足够大的连续空间。
3.应用的问题浪费过多的内存。如:游标没有共享产生过多的子游标,PL/SQL对象定义太大等。
4.由于Oracle的Bug影响。如不能正常释放内存而导致浪费大量内存。

相应地,ORA-4031错误解决办法需要根据发生原因来决定:

1.加大内存池的大小,解决内存池的过小的问题。
2.通过数据库重启或者 Flush内存池,解决内存池的碎片化。
3.修改应用程序或设计,解决应用的问题。
4.修改相应的Bug。

理论上讲,只要内存池足够大就不会发生ORA-4031错误。因此,无论何种原因引起的ORA-4031,只要系统允许,不断地加大内存池的大小都能暂时地改善ORA-4031的发生。

※对于ORA-4031错误详细解析以及相关内部原理等内容将在后续的文章中进行介绍。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/141631.html

(0)

相关推荐

发表回复

登录后才能评论