【发布时间】:2010-11-12 09:01:12
【问题描述】:
我有一些我认为可能存在内存泄漏的 PL/SQL 代码。每次我运行它时,它似乎都比以前运行得越来越慢,即使现在我正在减小输入大小。我怀疑的代码是使用批量收集从游标填充数组,类似这样
open c_myCursor(in_key);
fetch c_myCursor bulk collect into io_Array; /*io_array is a parameter, declared as in out nocopy */
close c_myCursor;
我不确定如何检查导致速度变慢的原因。我知道 Oracle 中有一些表可以跟踪这种内存使用情况,但我不确定是否可以查看这些表并找到关于我的代码正在做什么有用的方法。
另外,我尝试注销会话并在大约 10-15 分钟后重新登录,仍然非常慢。
Oracle 版本为 10.2
所以事实证明还有其他数据库活动。 DBA 决定在我开始更改和测试代码的同时运行一些大型插入和更新作业。我怀疑我的代码是根本原因,因为我没有被告知其他工作正在运行(而且我只是在它完全冻结了所有内容并且所有其他开发人员都很生气之后才听说这个其他工作)。这可能就是我的代码越来越慢的原因。
有没有办法以编程方式找出这一点,例如查询插入/更新大量数据的会话,以防 DBA 在下次执行此操作时忘记告诉我?
【问题讨论】:
-
PL/SQL 是否容易受到内存泄漏的影响? SQL 是一种非常高级的语言,通常不会有这个问题。
标签: oracle memory-leaks plsql