SQL Server查询从Java运行缓慢
问题内容:
我有一个Java程序,可以对sql服务器数据库运行一堆查询。其中第一个查询视图返回大约750k条记录。我可以通过sql server management
studio运行查询,大约30秒后即可得到结果。但是,我从昨晚开始运行该程序。当我今天早上检查它时,大约15小时后,该查询仍未将结果返回给Java程序。
我可以访问数据库以执行几乎任何我想做的事情,但是我真的不确定如何开始调试它。人们应该怎么做才能找出导致这种情况的原因?我不是dba,也不熟悉sql服务器工具集,因此,您可以向我提供更多有关如何执行建议操作的详细信息,我们将不胜感激。
继承人的代码
stmt = connection.createStatement();
clientFeedRS = stmt.executeQuery(StringBuffer.toString());
编辑1:
嗯,已经有一段时间了,这个问题已经偏离了轨道,但是这个问题又回来了。我研究了从jdbc驱动程序v 1.2升级到2.0的问题,但是我们坚持使用jdk
1.4,而v 2.0需要jdk 1.5,所以这不是一个开始。现在,我正在查看我的连接字符串属性。我看到2可能有用。
SelectMethod=cursor|direct
responseBuffering=adaptive|full
当前,由于存在延迟问题,我将游标作为selectMethod来运行,而responseBuffering的默认值已满。更改这些属性可能会有所帮助吗?如果是这样,理想的设置是什么?根据我在网上可以找到的内容,我认为使用直接选择方法和自适应响应缓冲可能会解决我的问题。有什么想法吗?
编辑2:
我将使用默认的select方法(直接)并指定responseBuffering为自适应来更改这两个连接字符串参数。这样对我来说效果最好,并减轻了我看到的延迟问题。感谢所有的帮助。
问题答案:
确保将JDBC驱动程序配置为使用直接连接,而不是基于cusror的连接。如果不确定,可以发布JDBC连接URL。
确保您使用的是只读,只读结果集(如果未设置,则为默认设置)。
并确保您使用的是更新的JDBC驱动程序。
如果所有这些都不起作用,那么您应该查看sql事件探查器,并尝试在jdbc驱动程序执行该语句时捕获sql查询,然后在Management
Studio中运行该语句,看看是否有区别。
另外,由于要提取大量数据,因此应尝试确保JVM上没有任何内存/垃圾收集速度下降(尽管在这种情况下,这并不能真正解释时间差异)。