设为首页 加入收藏

TOP

诊断并解决ORA-4030错误(DocID1548826.1)(三)
2015-11-21 01:59:58 来源: 作者: 【 】 浏览:3
Tags:诊断 解决 ORA-4030 错误 DocID1548826.1
是一个非常有用的工具,您可以自定义列显示和基于关键字排序。ps 命令在大部分系统上都可用,但具体使用方法不尽相同。例如,在 Linux 系统上,“ps -AF --sort resident”会列出具有最大驻留集大小的所有进程。另请参阅“UNIX: Determining the Size of an Oracle Process”。

?

如何收集有关进程实际正在执行的任务的信息

这部分将只讨论 Oracle Server 进程。通过前面介绍的方法,您应该可以确定一个或多个 Oracle Server 进程导致了内存消耗。请记住,并非总是出现 ORA-4030 的进程导致了内存消耗,这个进程可能只是无法申请到需要的内存而已。

?

对于不断增加内存使用的进程,我们可以在其运行时进行查看以下方面的信息:

您可以使用以下查询检查 v$sqlarea 从而找到进程正在执行的 SQL:

SQL> select

sql_text

from

v$sqlarea a, v$session s

where a.address = s.sql_address and

s.sid = ;

?

我们可以做heapdump,并将结果提交给 Oracle 技术支持:

?

SQL> select PID from v$process p, v$session s where p.addr=s.paddr and sid= ;

SQL> oradebug setorapid

SQL> oradebug unlimit

SQL> oradebug dump errorstack 3

SQL> oradebug dump heapdump 536870917

SQL> oradebug tracefile_name (shows the path and filename information)

SQL> oradebug close_trace

如果问题间歇出现或某一进程由于报错太快而导致无法进行检查,且这个进程最有可能是内存消耗的原因,那么,在进程发生错误时我们可以使用以下事件来获取 heapdump:

SQL> alter session set events '4030 trace name heapdump level 536870917';

或者在 数据库初始化文件中设置此事件并重新启动实例。

- init.ora: event="4030 trace name heapdump level 536870917"

- spfile: 运行: SQL> ALTER SYSTEM SET EVENT='4030 trace name heapdump level 536870917' scope=spfile;

对于 低于 9.2.0.5 的版本,请使用级别 5,而非级别 536870917。

Oracle技术支持工程师可使用该heapdump查找过多内存分配的原因。

有关避免此错误的一般建议

如上所述,一些操作需要大量的内存。对于排序问题,减少 SORT_AREA_SIZE 会有所帮助。Oracle Server 进程会将 PGA 中的 SORT_AREA_SIZE 字节分配给排序操作。如果完成搜索需要更多内存,服务器进程将会使用temporary segment。这意味着,减少 SORT_AREA_SIZE 会对需要大量排序操作的查询性能产生影响。

对于 9i 及更高版本,通过将参数 WORKAREA_SIZE_POLICY 设置为 AUTO,以及在初始化文件中指定 PGA_AGGREGATE_TARGET 的大小,即可启用自动 SQL 执行内存管理功能。使用自动 PGA 内存管理将有助于减少发生 ORA-4030 错误的可能性。请注意,OpenVMS 操作系统在Oracle 9i版本上不支持 PGA_AGGREGATE_TARGET,但是在 Oracle 10g 版本上是支持的。有关更多详细信息,请参阅以下文档:

?

"Performance Issues After Increasing Workload",

"Automatic PGA Memory Managment",

"Top Oracle 9i init.ora Parameters Affecting Performance"

PL/SQL 程序也可分配大量内存,因此可能需要重写应用程序的某些部分。尽管 PL/SQL 表非常容易使用,但它确实需要在 PGA 中分配内存。

查看 optimizer 策略,一些访问路径可能会因排序操作、较多行上的函数使用等原因而需要更多内存。

在某些操作系统上(例如 Microsoft Windows),可能要降低 SGA 的大小以便于 PGA 获得更大的内存。

确保您的操作系统和 Oracle 限制设置合理。

确保有足够的可用内存(物理内存和交换空间)。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇dbo.Interface_So_Newdrm 下一篇将一张表中的数据作为列名的存储..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: