当前位置: 首页 > 面试题库 >

SQL Server查询从Java运行缓慢

崔棋
2023-03-14
问题内容

我有一个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上没有任何内存/垃圾收集速度下降(尽管在这种情况下,这并不能真正解释时间差异)。



 类似资料:
  • 我在表中插入了一个数据......我现在想看到整个表的行,列和数据。如何通过命令显示?

  • 我正在使用Saxon 9.0.4,并在我的Eclipse项目中包含了Home Edition jar。但是每当我发出查询字符串时,什么也没有发生,我也没有得到任何输出。当我从命令行使用以下命令时,我得到了正确的结果: 以下是我的疑问: 这是我使用的代码: 我哪里做错了?此外,是否可能从字符串而不是文件中获得输入?

  • 本文向大家介绍详解sqlserver查询表索引,包括了详解sqlserver查询表索引的使用技巧和注意事项,需要的朋友参考一下 SELECT   索引名称=a.name  ,表名=c.name  ,索引字段名=d.name  ,索引字段位置=d.colid  需创建索引 例如: 根据某列判断是否有重复记录,如果该列为非主键,则创建索引 根据经常查询的列,创建索引 无须创建索引 字段内容大部分一样,

  • 提前感谢! UPDATE:这是两个不同的查询,而不是delete查询中的语句。

  • 用户实体类: 感谢任何帮助。多谢了。

  • 本文向大家介绍深入分析SqlServer查询计划,包括了深入分析SqlServer查询计划的使用技巧和注意事项,需要的朋友参考一下 对于SQL Server的优化来说,优化查询可能是很常见的事情。由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划。毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正。 首先,打