我在Oracle中有可以运行数小时的工作,执行大量涉及(但不限于)XmlTransform的计算。我已经注意到PGA内存正在逐渐增加(并且性能下降),直到某些时候内存不足(PGA)消息失败。我们已经应用了一些修复程序,但似乎并未解决问题。 停止作业并重新启动它们,解决了我的问题,性能再次良好,内存也很低... 所有代码都是用PL/SQL和SQL编写的。如何解决Oracle中的内存泄漏
问题: 因为我想尽快解决这个问题,所以想知道如何在Oracle中解决这类问题。
我的主要想法去莫名其妙:
- 使用高级队列
- 重启当前会话一段时间(可能是最简单的解决方案)后,重新启动工作?
- 在另一个会话中同步执行一些代码,也许是另一个工作。
的Oracle 12.1.0.2
编辑:由于这里问的样例代码XMLTransform:
function i_Convert_Xml_To_Clob (p_Zoek_Result_Type_Id in Zoek_Result_Type.Zoek_Result_Type_Id%type,
p_Xml in xmltype,
p_Xml_Transformation in xmltype) return clob is
mResult clob;
begin
if p_Xml_Transformation is not null then
select Xmltransform (p_Xml, p_Xml_Transformation).getclobval()
into mResult
from Dual;
elsif p_Xml is not null then
mResult := p_Xml.getclobval();
else
mResult := null;
end if;
return mResult;
end i_Convert_Xml_To_Clob;
为什么称它为内存泄漏?你需要调整你的工作来提高效率,或者给数据库更多的内存,以便它可以完成你要求的工作 – thatjeffsmith
@thatjeffsmith如上所述,内存使用量在增加,但它不应该是。我很好地调整了代码,但找不到增加的可能来源。我可以以某种方式重新开始工作,但说起来容易做起来难。 – rvheddeg
是的,但我们不能帮助你 - 你需要告诉我们你的代码,你的痕迹,告诉我们为什么内存在增加,为什么你认为它不应该是 – thatjeffsmith