0

上下文:Grails 2.1,使用 Groovy SQL 执行 SQL 语句。数据库是在 RedHat VM 中运行的 Oracle 11G。Grails 以交互模式运行,尽管作为 WAR 运行在行为上没有区别。

通过 Groovy SQL,我发出了一个具有这种结构的 SQL 语句:

insert into...
select ... from...

这会导致提取和插入@119K 行。当它成功运行时,它通常在一分钟内完成。

此语句在整个数据导入应用程序的上下文中运行,该应用程序通常总共需要大约 10 分钟才能运行并包含许多其他查询。

这是行为:

  1. 我启动 Grails 应用程序
  2. 我开始在应用程序中导入数据。它按预期运行并导致数据发生重大变化
  3. 我再次启动应用程序。前几十个查询运行良好
  4. 在上述较大的插入处,它挂起。

所以:第一次通过,没有问题。第二次通过,它每次都挂在同一个地方。

如果我重新启动应用程序,它会再次运行良好。

这就是它变得奇怪的地方:我会让这个东西旋转一段时间,如果我关闭数据库,查询会继续运行。我没有错误。

所以,如果这种行为听起来很熟悉,我对解决方案很感兴趣。

如果你有关于如何诊断的想法,我也对这些感兴趣。我是一名应用程序开发人员,并且比 Oracle 方面更熟悉 Java 方面,fwiw。我正在尝试寻找一个内部的 Oracle DBA 来提供帮助,但至少在短期内我只能靠我自己。

谢谢你的建议。

4

1 回答 1

0

由于您说重新启动应用程序使其再次工作表明它在 SQL 端没有任何东西,例如索引,因此它可能与 Hibernate 会话大小有关,您可能会最大化会话,请参阅这个可能有帮助的答案

于 2012-12-09T19:39:04.550 回答