【发布时间】:2009-06-07 02:36:57
【问题描述】:
我有一个 java 程序,它对一个 sql server 数据库运行一堆查询。其中第一个查询视图返回大约 750k 条记录。我可以通过 sql server management studio 运行查询,大约 30 秒就可以得到结果。但是,我昨晚启动了程序运行。当我今天早上检查它时,大约 15 个小时后,这个查询仍然没有将结果返回给 java 程序。
我可以访问数据库来做任何我想做的事情,但我真的不知道如何开始调试它。应该怎么做才能弄清楚是什么导致了这种情况?我不是 dba,对 sql server 工具集也不是很熟悉,所以如果您能提供更多关于如何执行您可能建议的操作的详细信息,我们将不胜感激。
这是代码
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 已满。更改这些属性可能会有所帮助吗?如果是这样,理想的设置是什么?根据我在网上可以找到的内容,我在想,使用直接选择方法和自适应响应缓冲可能会解决我的问题。有什么想法吗?
EDIT2:
我结束了更改这两个连接字符串参数,使用默认选择方法(直接)并将 responseBuffering 指定为自适应。这最终对我来说效果最好,并缓解了我看到的延迟问题。谢谢大家的帮助。
【问题讨论】:
-
张贴您对 jdbc 的调用将有助于找出错误(如果有的话)
-
Java 程序是什么?可能需要您如何访问数据库的代码 sn-p。此外,SQL Server Studio 是否会限制结果(例如,前 1000 行),这可能会导致结果出现偏差?
-
如果将结果限制为 1k 行,我如何确定不是?
-
SSMS 和您的 Java 应用程序是否在同一个地方运行?如果 SSMS 在 SQL Server 上本地运行,而您的 Java 应用程序不是,则这不完全是级别比较。
-
是的,通过 SSMS 从我运行 java 应用程序的同一个地方运行查询。
标签: java sql-server-2005 jdbc connection-string