FAQ-EAS数据库报错ORA-04031

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

FAQ-EAS数据库报错ORA-04031

适用版本EAS全部版本,使用Oracle数据库的都适用问题描述EAS的数据库应用过程中报错ORA-04031,导致发生内存溢出,数据库实例hang住,业务中断,影响生产。

数据库alert日志报错:

解决方案原因分析:原因一: sga过小,进而sharepool设置过小,导致数据库使用内存不足解决方法:修改sga_target的参数,增加sga大小。
原因二:• Oracle从9i开始,根据sharedpool的大小将sharedpool分为多个子池(subpool),每个子池有独立的free list,同时在分配时单独管理(有其独立 的shared pool latch)。Oracle的BUG或者说是内存分配策略缺陷导致某一类shared pool的内存分配只在一个子池(subpool)中,即多个子池的使用极不均衡,导致向那个使用得最多的子池申请内存时失败。报错信息中的”sga heap(5,1)”即指明是在第5个子池申请内存时失败。
解决方法:减少share pool子池数量。关键字: ORA-04031 ORACLE数据库hang住

附录:Oracle 11g的内存参数关系:



原因一:修改sga_target的参数,增加sga大小
步骤一:评估合适的sga要设置的大小
关于SGA、PGA与系统内存三者间的关联,目前有一个相对通用的计算规则可供参考:
对于OLTP数据库,SGA=系统内存*70%*80%,PGA=SGA*(10%~20%)。SGA=系统内存*0.56 PGA=系统内存*(0.05~0.1)
对于OLAP数据库,SGA=系统内存*80%*60%,PGA=SGA*(45%~65%)。SGA=系统内存*0.48 PGA=系统内存*(0.22~0.31)
(对于32bit平台,默认情况下SGA最大可用内存有1.7GB的限制)
步骤二:用下面的sql增加参数
SQL>ALTER SYSTEM SET SGA_TARGET =xxxm SCOPE = SPFILE;
步骤三:重启数据库,使参数生效
Shutdown immediate
Start up
步骤四:查看参数是否生效
Show parameter SGA_TARGET
步骤五:修改完成之后,数据库正常运行一段时间,然后可以在alter里面查看是否还存在ORA-04031: 无法分配 760 字节的共享内存 ("shared pool","unknown object","kglss","kgllc")此类报错信息。如果已经没有,说明问题解决。

原因二:减少share pool的子池大小
步骤一:通过以下脚本确认一下sub pool个数:
SELECT A.KSPPINM, B.KSPPSTVL FROM X$KSPPI A, X$KSPPSV B
WHERE A.INDX = B.INDX AND A.KSPPINM = '_kghdsidx_count';
步骤二:针对以上查出的sub pool个数及报错所需的shared memory数情况,我们可以相应减少Shared Pool子池的数量,以使得每个子池可以有足够的空闲内存可用。在这个客户环境中,如果 kghdsidx_count为10, 首先将_kghdsidx_count调整为8,每个子池的内存进行扩大。 (建议在测试数据库上先测试后再运用到生产数据库上)
设置方法如下所示:
(1).停所有eas实例;
(2). Sqlplus / as sysdba
Sql> alter system set "_kghdsidx_count"=8 scope=spfile;
(3).重启数据库
(4).启所有eas实例

FAQ-EAS数据库报错ORA-04031

适用版本EAS全部版本,使用Oracle数据库的都适用问题描述EAS的数据库应用过程中报错ORA-04031,导致发生内存溢出,数据库实例hang住,业务...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息