oracle sga 4031,ORACLE数据库经典 ORA-4031错误分析

当试图在共享池中分配大块连续内存而失败时,Oracle会首先从池中清理当前不用的对象从而使得空闲内存碎片(chunk:内存块)得以合并。如果这样仍然没有足够大的单个chunk来满足分配需要,则会产生ORA-04031报错。有许多ORA-04031错误直接原因都是由于共享池的大小或调整不当造成的。

Note:报ORA-4031错误的进程并不总是内存消耗的元凶。错误的发生仅是因为此进程无法得到所需内存而造成的。

如果已经按所有步骤正确设置了共享池大小(SHARD_POOL_SIZE) , 但此问题仍然产生时,除了从应用(例如:使用绑定变量查询替代静态SQL等)入手进行分析解决问题外,也可从其他trace文件中获得共享池的一些快照信息==>

修改init.ora参数文件,增加以下事件以从追踪文件中获取相关问题信息:

event = "4031 trace name errorstack level 3"

event = "4031 trace name HEAPDUMP level 3"

注意:除非重启实例,否则这个参数文件设置不会起效。从Oracle 9.2.0.5版本起,除了在请求heapdump时使用level 1,2,3 或32 你同样可以使用相同等级并加值536870912.这样将会在此等级上再进一步显示5个最大的subheaps同时每个subheap下显示相关5个最大的heap areas.

如果问题可以重现,则可在执行有问题的SQL语句前,在会话级别对事件进行设置:

SQL> alter session set events '4031 trace name errorstack level 3';

SQL> alter session set events '4031 trace name HEAPDUMP level 536870914';

Level 536870912 转储5个最大subheaps并且对应每个subheap将显示其5个最大heap areas。由于ORA-04031错误可能在不同池中发生(共享池,大池,java池,流池等),其level值的设置可参照如下:

Component

Level

PGA

1

SGA

2

Large Pool

32

Streams Pool

64

Java Pool

128

Note:  如果4031错误出现频繁,在实例级设置此事件(heapdump 536870914)将会产生许多大的trace文件.  这不仅会影响数据库性能而且可能使数据库挂起 (某些情况下可能会使得数据库崩溃).  因此有必要及时使用以下语句关闭此事件追踪:

alter system set events '4031 trace name HEAPDUMP off';

我们也通过Library cache转储来帮助确认产生ora-4031问题的游标:

sqlplus / as sysdba

SQL> oradebug setmypid

SQL> oradebug unlimit

SQL> oradebug dump library_cache 10

请注意:在Oracle 9.2.0.5+, 10g和11g版本中,4031 trace文件默认会在ORA-4031发生时产生并存放于user_dump_dest目录。如果你的数据库版本是其中的一个,那么你就不需要进行相关设置来生成4031 trace 文件。

ORA-4031诊断à

检查Alert日志并查看错误是否记录。注意不是所有ORA-4031错误都会记录在alert日志中。

如果错误被记录,请检查SGA的哪部分收到此错误。是共享池,大池,java池或streams池?

查询v$sgastat以检查是否有组件表现出非正常增长.

查询v$librarycache并检查:

- 有无无效对象 (多为DDL语句)

- 有无重载 (Library cache可能不够大)

- 内存命中率 (低命中率可能是非共享游标造成的)

检查是否存在高Version Counts的游标。 可通过v$sql_shared_cursor查询. 如果存在某父游标下有许多子游标的情况,检查不可共享的原因. 大量子游标会加快共享池的碎片化. 请确认应用正在使用绑定变量方式查询.

更多信息,请看:

Ø  NOTE:146599.1 - Diagnosing and Resolving Error ORA-4031

Ø  Note:396940.1 - Troubleshooting and Diagnosing ORA-4031 Error

Ø  Note:554521.1 - ORA-4031 QUICK FIX - What to look for and what to do!

Ø  Note:430473.1 - ORA-4031 Common Analysis/Diagnostic Scripts

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值