【问题标题】:Why would a sql query hang when run a second time in a Java application?为什么在 Java 应用程序中第二次运行 sql 查询会挂起?
【发布时间】:2012-12-08 21:29:43
【问题描述】:

上下文: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 来提供帮助,但至少在短期内我只能靠自己了。

感谢您的建议。

【问题讨论】:

标签: java sql oracle grails groovy


【解决方案1】:

由于您说重新启动应用程序使其再次工作表明它在 SQL 端没有任何东西,例如索引,因此它可能与 Hibernate 会话大小有关,您可能正在最大化会话,see this answer that may help

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2017-06-17
    • 2017-04-06
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多