如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
如何解决ORA-04031错误Http://www.HappyIT.net如何解决ORA-04031错误翻译:Fenng文章内容1.和共享池(sharedpool)相关的实例参数2.诊断ORA-04031错误3.解决ORA-04031错误?已知的OracleBUG?共享池碎片oV$SQLAREA视图oX$KSMLRU视图?小的共享池尺寸o库高速缓冲(librarycache)命中率o共享池大小的计算4.对ORA-04031的高级分析诊断并解决ORA-04031错误对于大多数应用来说,共享池的大小对于Oracle性能来说都是很重要的。共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL块和SQL语句。当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先刷新池中当前没使用的所有对象,使空闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031错误。当这个错误出现的时候你得到的错误信息如下:Error:ORA4031Text:unabletoallocate%sbytesofsharedmemory(%s,%s,%s)----------------------------------------------------------------------------------------------------------------Cause:Moresharedmemoryisneededthanwasallocatedinthesharedpool.Action:Eitherusethedbms_shared_poolpackagetopinlargepackages,reduceyouruseofsharedmemory,orincreasetheamountofavailablesharedmemorybyincreasingthevalueoftheinit.oraparameter"shared_pool_size".1.共享池相关的实例参数在继续之前,理解下面的实例参数是很重要的:如何解决ORA-04031错误Http://www.HappyIT.net?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服务器将允许从这个保留列表中更少的分配并且将从共享池列表中请求更多的内存。这个参数在Oracle8i是隐藏的。2.诊断ORA-04031错误ORA-04031错误通常是因为库高速缓冲中或共享池保留空间中的碎片。在加大共享池大小的时候考虑调整应用使用共享的SQL并且调整如下的参数:SHARED_POOL_SIZE,SHARED_POOL_RESERVED_SIZE,SHARED_POOL_RESERVED_MIN_ALLOC.首先判定是否ORA-04031错误是由共享池保留空间中的库高速缓冲的碎片产生的。提交下的查询:SELECTfree_space,avg_free_size,used_space,avg_used_size,request_failures,last_failure_sizeFROMv$shared_pool_reserved;如果:REQUEST_FAILURES>0并且LAST_FAILURE_SIZE>SHARED_POOL_RESERVED_MIN_ALLOC那么ORA-04031错误就是因为共享池保留空间缺少连续空间所致。要解决这