ORA-04031: 无法分配 3896 字节的共享内存 (shared pool,SELECT USERNAME,CASE WHEN (.““sga heap(1,0)““kglsim object

在生产的过程中报这个错,造成现场无法生产。后果是十分严重的。

一开始我们没太留意就直接重启Oracle数据库,这样可以实现短暂的恢复但是没过几分钟还是报错。

然后我们就根据报错的提示做了一下分析。

ORA-04031错误是Oracle数据库的内存分配错误,它表示在SGA(System Global Area)中无法分配足够的共享内存空间。具体来说,这个错误通常发生在共享池(Shared Pool)中,这是SGA的一个组件,用于缓存SQL和PL/SQL语句的执行计划、共享数据字典等。

根据这个错误分析然后我们就误入歧途了,想着给共享池加空间。但是还是不行。

实际的原因非常简单,应该是当初他们在安装数据库后没有给Oracle设置AMM或者ASMM模式,导致Oracle没有办法自动根据服务器大小来分配数据库所需的内存。

然后根据根据此命令查看给Oracle分配的内存:

SELECT value/1024/1024 AS size_mb
FROM v$parameter
WHERE name = 'sga_target';

这命令执行后出现是数值单位是MB,你可以在/1024得到G这单位。

当执行完这条命令后我瞬间崩溃了,因为给他分配的内存只有1G大小,然而我们的服务器的内存有100多个G,我估计这100多个G是他们以前以SQL太慢给加的。一直加一直加,就加到了100多个G,最后发现数据是抬着超级跑车在龟速前行。

后来我们把Oracle的内存改成了100G 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORA-04031错误是指在Oracle数据库无法分配足够的共享内存。具体来说,这个错误通常是由于共享池(shared pool)内存资源不足造成的。共享池是Oracle数据库中的一个重要组件,用于存储已经执行过的SQL语句和相关的数据结构,以提高查询的性能。 根据你提供的引用内容,ORA-04031错误可能是由于共享池空间耗尽所导致的。共享池内存中存储了大量的SQL语句和其他对象,当内存空间不足时,就会出现无法分配共享内存的错误。 为了解决ORA-04031错误,你可以尝试以下几种方法: 1. 增加共享池的大小:通过修改数据库参数,增加共享池的大小,从而提供更多的内存空间给共享池使用。你可以使用ALTER SYSTEM语句来修改shared_pool_size参数的值。 2. 优化SQL语句:检查并优化数据库中的SQL语句,尽量减少共享池中存储的SQL语句数量和大小。可以使用SQL调优工具,如SQL Tuning Advisor或SQL Access Advisor,来帮助你找出性能较差的SQL语句并进行优化。 3. 增加物理内存:如果共享池的内存空间无法满足需求,你可以考虑增加数据库服务器的物理内存。增加物理内存可以提供更多的内存资源给共享池使用,从而减少ORA-04031错误的发生。 请注意,解决ORA-04031错误可能需要根据具体情况进行调整和优化,建议在操作前备份数据库并咨询专业的数据库管理员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值