li
  当前位置:主页 > 性能优化 > 文章内容
li
ORA-04031错误解决方法(unable to allocate %s bytes of shared memory)
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-03-20   阅读:17  
本文章共3945字,分3页,当前第1页,快速翻页:
 
诊断并解决ORA-04031 错误

对于大多数应用来说,共享池的大小对于Oracle 性能来说都是很重要的。共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句。

当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先刷新池中当前没使用的所有对象,使空闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031 错误。

当这个错误出现的时候你得到的错误信息如下:

QUOTE:
Error: ORA 4031
Text: unable to allocate %s bytes of shared memory (%s,%s,%s)
----------------------------------------------------------------------------------------------------------------
Cause: More shared memory is needed than was allocated in the shared pool.
Action: 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 init.ora parameter "shared_pool_size".
1.共享池相关的实例参数

在继续之前,理解下面的实例参数是很重要的:

SHARED_POOL_SIZE – 这个参数指定了共享池的大小,单位是字节。可以接受数字值或者数字后面跟上后缀"K" 或 "M" 。"K"代表千字节, "M"代表兆字节。

SHARED_POOL_RESERVED_SIZE – 指定了为共享池内存保留的用于大的连续请求的共享池空间。当共享池碎片强制使Oracle 查找并释放大块未使用的池来满足当前的请求的时候,这个参数和SHARED_POOL_RESERVED_MIN_ALLOC 参数一起可以用来避免性能下降。

这个参数理想的值应该大到足以满足任何对保留列表中内存的请求扫描而无需从共享池中刷新对象。既然操作系统内存可以限制共享池的大小,一般来说,你应该设定这个参数为SHARED_POOL_SIZE 参数的 10% 大小。

SHARED_POOL_RESERVED_MIN_ALLOC –这个参数的值控制保留内存的分配。如果一个足够尺寸的大块内存在共享池空闲列表中没能找到,内存就从保留列表中分配一块比这个值大的空间。默认的值对于大多数系统来说都足够了。如果你加大这个值,那么Oracle 服务器将允许从这个保留列表中更少的分配并且将从共享池列表中请求更多的内存。这个参数在Oracle 8i 是隐藏的。

2.诊断ORA-04031 错误

ORA-04031 错误通常是因为库高速缓冲中或共享池保留空间中的碎片。 在加大共享池大小的时 候考虑调整应用
使用共享的SQL 并且调整如下的参数:

QUOTE:
SHARED_POOL_SIZE,
SHARED_POOL_RESERVED_SIZE,
SHARED_POOL_RESERVED_MIN_ALLOC.
首先判定是否ORA-04031 错误是由共享池保留空间中的库高速缓冲的碎片产生的。提交下的查 询:

QUOTE:
SELECT free_space, avg_free_size, used_space, avg_used_size,
request_failures, last_failure_size
IXDBA.NET技术社区
FROM v$shared_pool_reserved;
如果:

QUOTE:
REQUEST_FAILURES > 0 并且
LAST_FAILURE_SIZE > SHARED_POOL_RESERVED_MIN_ALLOC
那么ORA-04031 错误就是因为共享池保留空间缺少连续空间所致。

要解决这个问题,可以考虑加大SHARED_POOL_RESERVED_MIN_ALLOC 来降低缓冲进共 享池保留空间的对象数目,并增大 SHARED_POOL_RESERVED_SIZE 和SHARED_POOL_SIZE 来加大共享池保留空间的可用内存。

如果:

QUOTE:
REQUEST_FAILURES > 0 并且
LAST_FAILURE_SIZE
或者

QUOTE:
REQUEST_FAILURES 等于0 并且
LAST_FAILURE_SIZE
那么是因为在库高速缓冲缺少连续空间导致ORA-04031 错误。

第一步应该考虑降低SHARED_POOL_RESERVED_MIN_ALLOC 以放入更多的对象到共享池保留空间中并且加大SHARED_POOL_SIZE。


阅读更多内容1 · 2 · 3 · 下一页>>


  上一篇: 清除Oracle中无用索引,改善DML性...   下一篇: ORA-1122错误的解决办法
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·清除Oracle中无用索引,改善DML性...
·ORA-00604 error occurred at re...
·Oracle ORA-00257故障解决办法
·ORA-00903 invalid table name
·ORA-01502错误成因和解决方法
·如何解决Ora-600 4193错误
·ORA-01599: failed to acquire r...
·ORA-01460的解决方法
·ORA-29516 Aurora assertion fai...
·ORA-25153: 临时表空间为空
·ORA-1122错误的解决办法
·ORA-07445: exception encounter...
·Oracle高级复制配置文档
·物化视图高级复制中ORA-23313错误...
·ORACLE的高级复制实现内外网数据...
·oracle高级复制需要注意的几点问...
·Oracle9i与Oracle10g之间的高级复...
·高级复制下如何强制删除复制组
·Oracle数据库中高级复制的功能介...
·高级复制下如何强制删除废弃复制...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接