【问题标题】:mssql jdbc connection hangs in servletmssql jdbc 连接在 servlet 中挂起
【发布时间】:2014-04-18 09:10:10
【问题描述】:

我的程序遇到了一个奇怪的问题,即在我的程序中遇到了一个特定的数据库,我会尽力解释它。

我们有一个使用 WebSphere 数据池连接到数据库的 Web 应用程序。我们使用该连接连接到同一数据库服务器中的其他数据库。此时一切正常。我创建了一个创建报告的 servlet,因此它必须对各种数据库运行多个查询。它运行得又快又快,但是当它到达第 4 个 DB 时,它停止并且连接挂起。我进入数据库服务器活动监视器,在那里我看到它创建了几个线程,一些正在运行,一些被暂停。当我杀死其中一个时,我的程序会返回并为该迭代出错并继续。它会在击中特定 DB 时继续执行此操作,一旦完成并继续前进,它会毫无问题地执行下一个 3 DB。

我查看了该数据库的属性并将其与其他数据库进行了比较,但我没有发现任何不同之处。有人可以指出我正确的方向来确定这个数据库的问题吗?

更新 - 这是活动监视器的屏幕截图:

【问题讨论】:

  • 它在这个数据库上做了什么?
  • 在挂起的数据库上?它就在那里,活动监视器显示了几个正在运行和暂停的进程。我将发布活动监视器的屏幕截图。
  • 你从你的 servlet 在这个数据库上运行什么?
  • 这是一个带有一些连接的简单选择语句。要使用我正在连接的数据库中的其他数据库,我会在 sql 语句中附加“dbname..tableName”。除此之外,我使用标准的 Java 东西从 jdbc 数据源获取连接,然后使用 PreparedStatement 和 ResultSet。
  • 您的意思是您的查询使用了其他数据库的资源吗?会不会有锁问题?

标签: java sql-server servlets jdbc


【解决方案1】:

检查关闭的连接,您可能会同时执行如此多的查询,这会影响服务器的运行状况,或者尝试在工作台中运行这些查询,以便查看它们是否花费了太多时间来执行。

【讨论】:

  • 是的,我尝试在工作台上执行 SQL,它们几乎是瞬间运行的。我还考虑过由于 servlet 导致的连接混乱,我检查了它,一切都很好。它像 30 条 sql 一样运行没问题,在特定数据库的 4 条上挂起,然后像 15 条一样运行,之后没有问题。
  • 显示java代码?我认为问题在于该数据库中的某些设置或类似情况。我使用的 java 代码是连接和调用数据库的标准东西,我唯一“不同”的是我使用以下方法连接到其他数据库:SELECT A.ID, B.NAME FROM TABLEA A JOIN OTHERDB ..A.ID 上的 TABLEB = B.ID
  • 您可能正在使用相同的(连接/语句)对象来执行您的查询。
  • 哦,好的,我明白你现在在说什么了。但是不,我有一个 DAO 类,它专门为每个操作提供方法。在每种方法中,连接都是“打开的”,然后在 try catch 语句中创建语句的对象。它还有一个关闭连接的 finally 语句。在报告类中,它运行一个循环,为每次迭代调用此函数。因此创建和销毁任何使用的对象(并在每次使用后关闭连接)
  • @MJSalinas 根据您当前的描述,您的连接似乎是您的 DAO 类中的一个字段。
【解决方案2】:

在对这个数据库进行了多次摆弄之后,我后来得知这个特定的数据库最初是从 MSSQL 服务器 2000 迁移而来的,而我们目前使用的是 MSSQL 2008 r2。我创建了一个新数据库,将所有数据从损坏的数据库导入到新数据库,将我的应用程序指向新数据库,现在它工作正常。我们怀疑它是 MSSQL 2008 r2 需要的损坏或丢失的东西。

感谢所有帮助缩小范围的巨大帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2012-05-23
    • 2012-03-02
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多